Spaces:
Sleeping
Sleeping
from asgi_correlation_id import correlation_id | |
from fastapi import APIRouter | |
from fastapi.responses import StreamingResponse, JSONResponse | |
from utils.bio_logger import bio_logger as logger | |
from utils.i18n_util import ( | |
get_language, | |
create_error_response, | |
) | |
from utils.i18n_context import with_language | |
from bio_requests.chat_request import ChatRequest | |
from service.chat import ChatService | |
router = APIRouter(prefix="/mcp", tags=["MCP"]) | |
async def bio_qa(query: str, lang: str = "en"): | |
""" | |
生物医学问答接口,提供RAG问答服务。 | |
query: 问答内容 | |
lang: 语言设置,zh代表中文,en代表英文 | |
""" | |
logger.info(f"{correlation_id.get()} Bio QA for {query}") | |
chat_request = ChatRequest(query=query, language=lang) | |
# 解析语言设置 | |
language = get_language(chat_request.language) | |
# 使用上下文管理器设置语言 | |
with with_language(language): | |
try: | |
chat_service = ChatService() | |
return StreamingResponse( | |
chat_service.generate_stream(chat_request), | |
media_type="text/event-stream", | |
headers={ | |
"Connection": "keep-alive", | |
"Cache-Control": "no-cache", | |
}, | |
) | |
except Exception as e: | |
logger.error(f"{correlation_id.get()} Stream chat error: {e}") | |
error_response = create_error_response( | |
error_key="service_unavailable", | |
details=str(e), | |
error_code=500, | |
) | |
return JSONResponse(content=error_response, status_code=500) | |
# 添加MCP协议所需的端点 | |
async def list_tools(): | |
"""列出可用的MCP工具""" | |
return { | |
"tools": [ | |
{ | |
"name": "bio_qa_stream_chat", | |
"description": "生物医学问答服务,提供RAG问答功能", | |
"inputSchema": { | |
"type": "object", | |
"properties": { | |
"query": { | |
"type": "string", | |
"description": "问题内容" | |
}, | |
"lang": { | |
"type": "string", | |
"description": "语言设置,zh代表中文,en代表英文", | |
"enum": ["zh", "en"], | |
"default": "en" | |
} | |
}, | |
"required": ["query"] | |
} | |
} | |
] | |
} | |