641e33b834
- 语义检索(FAISS + embedding)+ 精确查找(法规名+条号) - RAG 问答(SSE 流式,支持 thinking 折叠显示) - 法规浏览(原文阅读) - 历史记录(检索+对话持久化到 SQLite) - 设置页(系统提示词/模板/LLM 参数可配置) - 检索质量评估脚本 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
"""法规浏览 API — /api/laws, /api/law/{law_id}"""
|
|
from fastapi import APIRouter, Request, HTTPException, Query
|
|
from typing import Optional
|
|
|
|
from app.services.law_reader import LawReader
|
|
from app.config import BROWSE_PAGE_SIZE
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/laws")
|
|
async def list_laws(
|
|
request: Request,
|
|
category: Optional[str] = Query(None, description="法规类别过滤"),
|
|
province: Optional[str] = Query(None, description="省份过滤"),
|
|
keyword: Optional[str] = Query(None, description="法规名关键词"),
|
|
page: int = Query(1, ge=1, description="页码"),
|
|
page_size: int = Query(BROWSE_PAGE_SIZE, ge=1, le=200, description="每页数量"),
|
|
):
|
|
"""法规列表(分页 + 过滤)"""
|
|
trace_id = getattr(request.state, "trace_id", "")
|
|
reader = LawReader.get_instance()
|
|
result = reader.list_laws(
|
|
category=category,
|
|
province=province,
|
|
keyword=keyword,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
return {
|
|
"code": 0,
|
|
"message": "ok",
|
|
"data": result,
|
|
"trace_id": trace_id,
|
|
}
|
|
|
|
|
|
@router.get("/law/{law_id}")
|
|
async def get_law(law_id: int, request: Request):
|
|
"""法规详情(含原文 + 条文列表)"""
|
|
trace_id = getattr(request.state, "trace_id", "")
|
|
reader = LawReader.get_instance()
|
|
detail = reader.get_law(law_id)
|
|
if detail is None:
|
|
raise HTTPException(status_code=404, detail="法规不存在")
|
|
return {
|
|
"code": 0,
|
|
"message": "ok",
|
|
"data": detail,
|
|
"trace_id": trace_id,
|
|
}
|