lacerate551
|
148559ee3c
|
fix(knowledge): 全量修复多 worker 元数据竞态问题
1. collection.py: create/delete/update/exists 方法开头加 _load_metadata()
2. list_collections: 去掉磁盘扫描自动补充和 stale 清理逻辑,
改为以元数据为唯一真相源,异常集合只跳过不删不改
3. manager.py: _load/_save_metadata 加 fcntl 文件锁防并发写覆盖,
Windows 兼容(fcntl try/import 包裹)
|
2026-06-10 11:17:57 +08:00 |
|
lacerate551
|
431af0217a
|
fix(knowledge): list_collections 每次从磁盘重载元数据,修复多 worker 返回数量不一致
GUNICORN_WORKERS=2 时各 worker 进程的 self._metadata 独立,
一个 worker 清理失效条目后保存 kb_metadata.json,另一个 worker
内存仍是旧版本,导致 /collections 返回数量波动(3 或 5)。
在 list_collections() 开头调用 _load_metadata() 重新加载,
保证每次请求基于最新的磁盘状态。
|
2026-06-09 13:29:49 +08:00 |
|
lacerate551
|
84a8be0ce8
|
fix(knowledge): list_collections 增加异常保护,防止 ChromaDB 数据丢失导致 /collections 500
遍历 kb_metadata.json 时对每个集合的 get_collection/count 操作包裹
try/except,捕获 NotFoundError/InternalError 等异常后跳过并记录警告,
循环结束后自动清理失效的元数据条目。
|
2026-06-09 11:43:34 +08:00 |
|
lacerate551
|
cb75b9b274
|
fix(boundary): 修复多库边界问题、版本管理及删除清理
多库检索与存储修复:
- RRF 融合去重改用 (collection, chunk_id) 复合键,修复同名文件结果被吞
- DocStore 存储路径加 collection 前缀,修复跨库同名切片数据覆盖
- search_multiple 去重改用复合键
- chunk_id 解析改用 rsplit 兼容下划线文件名
上传与版本管理修复:
- 同名文件上传改为覆盖模式,自动清理旧切片
- 修复首次上传不创建版本记录
- 修复覆盖上传版本号回退到 v1
- sync ADDED 分支改用动态版本号生成
- _generate_version_id 改为基于全部版本递增
- 废止/恢复操作同步 SQLite 版本记录
- mark_document_as_superseded 改为仅更新 SQLite
删除清理修复:
- 删除文档时同步清理 SQLite 版本记录和变更日志
- 删除向量库时同步清理该库所有版本记录
- cleanup 改为清理 SQLite 记录而非 ChromaDB
测试:
- test_version_management.py: 27 条版本管理单元测试
- test_edge_cases.py: 28 条边界用例测试
- test_upload_dedup.py: 5 条上传去重测试
- e2e_risk_test.py: 27 条端到端风险测试
文档:
- 新增风险边界问题修复注意事项.md(面向后端的对接文档)
- 新增向量库边界风险分析.md
- 更新多篇现有文档
|
2026-06-04 23:58:44 +08:00 |
|
lacerate551
|
100d1a06eb
|
init: RAG 知识库服务初始提交
- 后端 API(Flask + Gunicorn)
- RAG 引擎(混合检索 + 云端 Reranker + 引用溯源)
- 文档解析(MinerU + 多格式支持)
- Docker 生产部署配置
- 排除前端项目、敏感配置、模型文件
|
2026-06-04 17:35:27 +08:00 |
|