feat: 新增多格式文件上传入库与认证体系

- 新增 JWT 认证模块,支持登录/注册/用户管理
- 新增文件上传接口,支持 .txt/.md/.html/.pdf/.docx 等格式解析入库
- 新增检索结果 AI 总结功能
- 新增文本去重缓存机制
- 新增全局认证夹具简化测试
- 新增配置项与环境变量支持
- 完善文档与测试覆盖
This commit is contained in:
2026-07-30 10:30:15 +08:00
parent 51dc8dc4f6
commit dce9e31bde
31 changed files with 3021 additions and 45 deletions
+3
View File
@@ -85,6 +85,7 @@ QMDSearch/
| GET | `/api/v1/health` | 健康检查 |
| POST | `/api/v1/search` | 分层检索 |
| POST | `/api/v1/documents` | 文档入库(202 异步入库,返回 task_id |
| POST | `/api/v1/documents/upload` | multipart 文件上传入库(202 异步,支持 .txt/.md/.html/.htm/.pdf/.docx |
| GET | `/api/v1/documents/tasks/{task_id}` | 入库任务状态查询(done 附 resultfailed 附 error |
| GET | `/api/v1/knowledge/categories` | 知识分类类目集 |
| GET | `/api/v1/knowledge/stats` | 统计(四层点数 + 类目分布 + uncategorized 数) |
@@ -131,6 +132,8 @@ QMDSearch/
不足三级 → 2.5级回退
```
**文件上传通道**: 除 JSON 文本入库外,`POST /api/v1/documents/upload` 提供 multipart 文件上传入口,支持 .txt/.md/.html/.htm/.pdf/.docx;服务端调用 `app/core/file_parser.py` 按扩展名提取纯文本后,复用上述同一入库流水线;原始文件落盘到 `settings.upload_dir`(落盘失败仅告警不阻塞入库),任务状态同样经 `GET /api/v1/documents/tasks/{task_id}` 查询。
1. **文本提取**: 从文件中提取纯文本内容
2. **三级总结**: 调用 Ollama 依次生成 L1/L2/L3 总结;其中 L2 大纲优先使用文档原生标题树(不调 LLM),无结构文本(标题数 < 2)回退 LLM 生成
3. **分类判定**: 根据 L1 总结将文档分配到 taxonomy 类目,输出主类目 + 附加标签 + 置信度;LLM 输出解析失败或置信度低于阈值时归 uncategorized 兜底(低置信时候选类目名保留进 tags 供软召回)