Spaces:
Sleeping
Sleeping
File size: 2,822 Bytes
79899c0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
"""API路由模块"""
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_success_response,
create_error_response,
)
from utils.i18n_context import with_language
from bio_requests.rag_request import RagRequest
from bio_requests.chat_request import ChatRequest
from service.rag import RagService
from service.chat import ChatService
router = APIRouter()
@router.post("/retrieve")
async def search(rag_request: RagRequest) -> JSONResponse:
"""文档检索接口,支持多源数据检索。"""
logger.info(f"{correlation_id.get()} Searching for {rag_request}")
# 解析语言设置
language = get_language(rag_request.language)
# 使用上下文管理器设置语言
with with_language(language):
try:
rag_assistant = RagService()
documents = await rag_assistant.multi_query(rag_request)
logger.info(f"{correlation_id.get()} Found {len(documents)} documents")
results = [document.__dict__ for document in documents]
# 返回国际化响应
response_data = create_success_response(
data=results, message_key="search_success"
)
return JSONResponse(content=response_data)
except Exception as e:
logger.error(f"{correlation_id.get()} Search error: {e}")
error_response = create_error_response(
error_key="search_failed", details=str(e), error_code=500
)
return JSONResponse(content=error_response, status_code=500)
@router.post("/stream-chat")
async def stream_chat(chat_request: ChatRequest):
"""流式聊天接口,提供RAG问答服务。"""
logger.info(f"{correlation_id.get()} Streaming chat for {chat_request}")
# 解析语言设置
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)
|