Files
AIRegulation-DocAnalysis/backend/app/api/routes/knowledge.py

52 lines
1.6 KiB
Python
Raw Normal View History

"""Define API routes for knowledge."""
from __future__ import annotations
2026-05-14 15:07:34 +08:00
from fastapi import APIRouter, HTTPException
from app.api.models import SearchResponse, SearchResultItem, SearchRequest
from app.shared.bootstrap import get_retrieval_service
# Keep route handlers close to their transport-layer wiring for easier auditing.
2026-05-14 15:07:34 +08:00
router = APIRouter(prefix="/knowledge", tags=["knowledge"])
@router.post("/search", response_model=SearchResponse)
async def search_knowledge(request: SearchRequest):
"""Search knowledge."""
if not request.query or not request.query.strip():
raise HTTPException(status_code=400, detail="查询文本不能为空")
results = get_retrieval_service().retrieve(
query=request.query,
top_k=request.top_k,
filters=request.filters,
)
return SearchResponse(
query=request.query,
total=len(results),
results=[
SearchResultItem(
id=index + 1,
content=item.content,
score=item.score,
metadata={
"doc_id": item.doc_id,
"doc_name": item.doc_name,
"chunk_id": item.chunk_id,
"section_title": item.section_title,
"page_number": item.page_number,
**item.metadata,
},
2026-05-14 15:07:34 +08:00
)
for index, item in enumerate(results)
],
)
2026-05-14 15:07:34 +08:00
@router.post("/retrieval", response_model=SearchResponse)
async def knowledge_retrieval(request: SearchRequest):
"""Handle knowledge retrieval."""
2026-05-14 15:07:34 +08:00
return await search_knowledge(request)