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>
77 lines
2.8 KiB
Python
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="清空失败")
|