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"}, )