from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.db.session import get_db from app.schemas.chat import ChatRequest, ChatResponse from app.schemas.retrieval import RetrievalRequest from app.services.retrieval import retrieve router = APIRouter(tags=["chat"]) @router.post("/chat", response_model=ChatResponse) def chat(payload: ChatRequest, db: Session = Depends(get_db)) -> ChatResponse: """运行可复核的关键词检索;模型未配置时绝不伪造生成式回答。""" result = retrieve(db, RetrievalRequest(query=payload.question, top_k=5)) if result.status == "no_evidence": return ChatResponse( answer="未检索到可用的已核验知识依据。请补充更具体的关键词,或由管理员补充并审核资料。", status="no_evidence", sources=[], retrieval_run_id=result.run_id, ) return ChatResponse( answer=( f"已检索到 {result.total_hits} 条已核验知识依据。当前尚未配置大语言模型," "因此系统仅返回可追溯证据,不生成或改写答案。" ), status="retrieval_only", sources=[ {"title": hit.title, "source_url": hit.source_url} for hit in result.results ], retrieval_run_id=result.run_id, )