Files

40 lines
1.5 KiB
Python
Raw Permalink Normal View History

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from starlette.responses import StreamingResponse
from app.core.response import ApiResponse, ok
from app.core.user_context import UserContext, get_user_context
from app.db.session import get_db
from app.schemas.learning_assistant import LearningAssistantChatRequest, LearningAssistantChatResponse
from app.services.learning_assistant_service import LearningAssistantService
router = APIRouter()
@router.post("/chat", response_model=ApiResponse[LearningAssistantChatResponse], include_in_schema=False)
async def learning_assistant_chat(
payload: LearningAssistantChatRequest,
ctx: UserContext = Depends(get_user_context),
db: Session = Depends(get_db),
):
"""AI 学习助手调试接口:非流式返回回答,正式前端联调使用流式接口。"""
result = await LearningAssistantService(db).chat(ctx, payload)
db.commit()
return ok(result)
@router.post("/chat/stream", response_class=StreamingResponse)
async def learning_assistant_stream_chat(
payload: LearningAssistantChatRequest,
ctx: UserContext = Depends(get_user_context),
db: Session = Depends(get_db),
):
"""AI 学习助手流式问答:返回 retrieval_done、answer_delta、answer_done 事件。"""
stream = LearningAssistantService(db).stream_chat(ctx, payload)
db.commit()
return StreamingResponse(
stream,
media_type="text/event-stream",
headers={"Cache-Control": "no-cache", "Connection": "keep-alive", "X-Accel-Buffering": "no"},
)