Files
law-kb/app/routers/law.py
T
freedak 641e33b834 feat: QYLAW 法律法规知识库
- 语义检索(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>
2026-08-07 14:55:25 +08:00

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,
}