Initial commit: QMDSearch 分层信息检索服务

- FastAPI + Qdrant + Redis + Ollama 技术栈
- L1→L2→L3→chunk 四层分层检索(dense + sparse RRF 融合)
- 文档三级总结与 2.5 级回退
- query 解析路由与分类
- /admin 管理页面
This commit is contained in:
2026-07-29 21:24:40 +08:00
commit 51dc8dc4f6
83 changed files with 10794 additions and 0 deletions
@@ -0,0 +1,41 @@
# Checklist
## 文档管理 API
- [x] GET /api/v1/documents 分页返回 itemsdoc_id/title/category/tags/summary)与 next_offset,空库返回空列表
- [x] GET /api/v1/documents/{doc_id} 返回 L1 全部字段 + l2_nodes/l3_nodes + chunks_count
- [x] 不存在 doc_id 详情返回 code=1004
- [x] DELETE /api/v1/documents/{doc_id} 后四层集合该文档点全部清除,再查详情返回 1004
- [x] DELETE 不存在 doc_id 幂等成功且 deleted 统计为 0
## 统计 API
- [x] GET /api/v1/knowledge/stats 返回四层集合点数、类目分布、uncategorized_count
- [x] stats 数值与内存 Qdrant 实际写入一致(测试验证)
## 管理页面
- [x] GET /admin 返回 200 HTML
- [x] 页面含 概览/文档管理/入库/检索测试台/类目 五个区块
- [x] 页面无外部 CDN/外链资源(无 http(s):// src 或 link
- [x] 所有 fetch 指向 /api/v1/ 路径且与后端路由契约一致(路径、方法、字段名)
- [x] 删除操作有二次确认逻辑(confirm 或等价交互)
- [x] code≠0 时页面有错误提示处理
## 单测补全
- [x] judge.py:正常幻觉率计算、部分断言不支持、解析失败返回 0.0
- [x] response.pyok/error/ApiError 结构与 code
- [x] ollama.pygenerate 正常/json_mode payload 含 format:is_available 可达与异常分支
- [x] run_eval.py:门槛判定(✅/❌)与数值格式化纯函数
## 部署与文档
- [x] Dockerfile 含 COPY scripts/ scripts/
- [x] CLAUDE.md 项目结构、API 清单(含 documents 管理端点/stats//admin)与实际一致
## 集成
- [x] 内存 Qdrant 管理闭环冒烟通过:入库→列表→详情→检索→删除→统计
- [x] `uv run pytest` 全部通过(含新增测试)
- [x] `uv run ruff check app tests scripts` 无错误