feat: connect chat endpoint to verified retrieval

This commit is contained in:
2026-10-17 10:47:33 +08:00
parent af52ee5f58
commit 9db687ee00
5 changed files with 52 additions and 11 deletions
+25 -6
View File
@@ -1,15 +1,34 @@
from fastapi import APIRouter
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) -> ChatResponse:
# TODO: retrieval -> context assembly -> LLM -> evidence/source checks
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"已收到问题:{payload.question}。当前为基础壳子,尚未接入知识检索或大语言模型。",
status="stub",
sources=[],
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,
)