Files
law-kb/app/routers/history.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

77 lines
2.8 KiB
Python

"""历史记录 API — /api/history"""
from fastapi import APIRouter, Request, HTTPException, Query
from app.services import history as hist_service
router = APIRouter()
@router.get("/history/search")
async def list_search_history(
request: Request,
page: int = Query(1, ge=1),
page_size: int = Query(20, ge=1, le=100),
):
"""获取检索历史列表(分页,最新在前)"""
trace_id = getattr(request.state, "trace_id", "")
data = hist_service.get_search_history(page, page_size)
return {"code": 0, "message": "ok", "data": data, "trace_id": trace_id}
@router.get("/history/chat")
async def list_chat_history(
request: Request,
page: int = Query(1, ge=1),
page_size: int = Query(20, ge=1, le=100),
):
"""获取对话历史列表(分页,最新在前)"""
trace_id = getattr(request.state, "trace_id", "")
data = hist_service.get_chat_history(page, page_size)
return {"code": 0, "message": "ok", "data": data, "trace_id": trace_id}
@router.get("/history/chat/{chat_id}")
async def get_chat_detail(chat_id: int, request: Request):
"""获取单条对话历史详情"""
trace_id = getattr(request.state, "trace_id", "")
detail = hist_service.get_chat_detail(chat_id)
if not detail:
raise HTTPException(status_code=404, detail="对话记录不存在")
return {"code": 0, "message": "ok", "data": detail, "trace_id": trace_id}
@router.delete("/history/search/{history_id}")
async def delete_search_history(history_id: int, request: Request):
"""删除单条检索历史"""
trace_id = getattr(request.state, "trace_id", "")
if hist_service.delete_search_history(history_id):
return {"code": 0, "message": "ok", "trace_id": trace_id}
raise HTTPException(status_code=500, detail="删除失败")
@router.delete("/history/chat/{history_id}")
async def delete_chat_history(history_id: int, request: Request):
"""删除单条对话历史"""
trace_id = getattr(request.state, "trace_id", "")
if hist_service.delete_chat_history(history_id):
return {"code": 0, "message": "ok", "trace_id": trace_id}
raise HTTPException(status_code=500, detail="删除失败")
@router.delete("/history/search")
async def clear_search_history(request: Request):
"""清空全部检索历史"""
trace_id = getattr(request.state, "trace_id", "")
if hist_service.clear_search_history():
return {"code": 0, "message": "ok", "trace_id": trace_id}
raise HTTPException(status_code=500, detail="清空失败")
@router.delete("/history/chat")
async def clear_chat_history(request: Request):
"""清空全部对话历史"""
trace_id = getattr(request.state, "trace_id", "")
if hist_service.clear_chat_history():
return {"code": 0, "message": "ok", "trace_id": trace_id}
raise HTTPException(status_code=500, detail="清空失败")