Files
AIRegulation-DocAnalysis/backend/app/api/routes/knowledge.py
ash66 30c7bda389 Refactor document handling and update Milvus collection settings
- Removed multiple failed document entries from `documents.json`.
- Added a new document entry with updated metadata and changed the index name to `regulations_dense_1024_v2`.
- Updated architecture documentation to reflect changes in the Milvus collection name.
- Adjusted requirements by removing the sqlalchemy dependency.
- Modified test cases to align with new document structure and naming conventions.
- Introduced a new test file for Milvus vector index runtime recovery and error handling.
- Updated assertions in various test files to ensure compatibility with the new schema.
2026-05-26 20:21:31 +08:00

57 lines
1.9 KiB
Python

"""Define API routes for knowledge."""
from __future__ import annotations
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.
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.text,
score=item.score,
metadata={
"doc_id": item.doc_id,
"doc_title": item.doc_title,
"chunk_id": item.chunk_id,
"chunk_type": item.chunk_type,
"section_title": item.section_title,
"page_start": item.page_start,
"page_end": item.page_end,
"section_level": item.section_level,
"chunk_index": item.chunk_index,
"piece_index": item.piece_index,
**item.metadata,
},
)
for index, item in enumerate(results)
],
)
@router.post("/retrieval", response_model=SearchResponse)
async def knowledge_retrieval(request: SearchRequest):
"""Handle knowledge retrieval."""
return await search_knowledge(request)