修复 ChromaDB 跨进程 HNSW 索引不兼容问题,并新增向量库自动恢复机制。语音模块(voice/)无变动。
🐛 问题根因
ChromaDB 1.5.x 的 Rust HNSW 后端在 Windows 跨进程场景下存在序列化不兼容:
- 同一进程内构建完索引可以立即查询 ✅
- 新进程加载时触发
"Error loading hnsw index"❌ - 导致
load_vector_index()返回None,整个 RAG pipeline 失效
🔧 解决方案:三级恢复策略
直接从 chroma.sqlite3 读取文档和元数据(绕过损坏的 HNSW 索引文件),删除旧索引后重建。
📁 涉及改动
| 文件 | 改动 |
|---|---|
src/indexing/vector_builder.py |
新增 _extract_records_from_chroma_sqlite();三级恢复逻辑 |
src/factory.py |
加载时传入 v6 SQLite 作为 fallback |
scripts/rebuild_vector_store.py |
新增:独立向量库重建工具 |
indices/vector_store/ |
新增:跨进程兼容的新版向量索引 |
requirements.txt |
新增 langchain-core、langchain-chroma |
✅ 验证
修复后所有测试用例正常命中 RAG,置信度 0.75–0.95。