Switch default knowledge collection back to biz (drop+recreate on rebuild), replace PowerShell rebuild runner with Python, skip README.md imports, and merge duplicate rag keys in application.yml.
107 lines
2.6 KiB
Markdown
107 lines
2.6 KiB
Markdown
# 重建 hybrid 知识库(dense + BM25)
|
||
|
||
面向当前 `knowledge_base/` 目录文档,**清空并重建**配置中的 Milvus collection(默认 **`biz`**)。
|
||
|
||
## 前提
|
||
|
||
1. 应用已启动(默认 `http://localhost:9900`)
|
||
2. `MILVUS_TOKEN` 等连接配置可用
|
||
3. `application.yml` 已配置:
|
||
|
||
```yaml
|
||
milvus:
|
||
collection: biz
|
||
retrieval:
|
||
search:
|
||
mode: hybrid
|
||
knowledge:
|
||
base-path: knowledge_base/
|
||
```
|
||
|
||
## 一键脚本(Python)
|
||
|
||
在项目根目录执行:
|
||
|
||
```bash
|
||
python scripts/rebuild_hybrid_knowledge.py --confirm REBUILD
|
||
```
|
||
|
||
指定服务地址:
|
||
|
||
```bash
|
||
python scripts/rebuild_hybrid_knowledge.py --base-url http://127.0.0.1:9900 --confirm REBUILD
|
||
```
|
||
|
||
跳过前后 stats:
|
||
|
||
```bash
|
||
python scripts/rebuild_hybrid_knowledge.py --confirm REBUILD --skip-stats
|
||
```
|
||
|
||
依赖:Python 3.9+ 标准库即可(无需 pip 包)。
|
||
|
||
## 脚本会做什么
|
||
|
||
| 步骤 | 动作 |
|
||
|---|---|
|
||
| 1 | 检查 `/milvus/health` |
|
||
| 2 | 打印重建前 `/api/knowledge/stats` |
|
||
| 3 | `POST /api/knowledge/rebuild-hybrid?confirm=REBUILD` |
|
||
| 4 | 打印重建后 stats |
|
||
|
||
服务端 `rebuild-hybrid` 内部顺序:
|
||
|
||
1. **Drop + recreate** Milvus collection(`milvus.collection`,默认 `biz`)
|
||
- 原有向量数据会被删除
|
||
- 按 dense + BM25 schema 重建
|
||
2. **清空** MySQL `api_document`
|
||
3. **清空** 内存 L0 索引
|
||
4. **扫描** `knowledge_base/**/*.md`(跳过 `README.md`)并 force 全量导入
|
||
- 写 MySQL 元数据
|
||
- 切片
|
||
- 写 dense 向量 + BM25 `search_text`
|
||
- 更新 L0
|
||
|
||
## 不会做什么
|
||
|
||
- **不会**动 `knowledge_base/` 源文件
|
||
- **不会**在未传 `--confirm REBUILD` 时执行
|
||
|
||
## 手动 curl 等价命令
|
||
|
||
```bash
|
||
# 重建(危险:会清空 biz collection + api_document)
|
||
curl -X POST "http://localhost:9900/api/knowledge/rebuild-hybrid?confirm=REBUILD"
|
||
|
||
# 仅强制导入(不 drop collection)
|
||
curl -X POST "http://localhost:9900/api/knowledge/init?force=true"
|
||
|
||
# 统计
|
||
curl "http://localhost:9900/api/knowledge/stats"
|
||
```
|
||
|
||
## 成功判据
|
||
|
||
响应中大致应有:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"collection": "biz",
|
||
"inserted": 15,
|
||
"failed": 0,
|
||
"milvus": { "recreated": true, "loaded": true }
|
||
}
|
||
```
|
||
|
||
然后用一条知识库里真实存在的术语/故障词走 `lookup_knowledge` 或 chat 验证 hybrid 命中。
|
||
|
||
## 失败排查
|
||
|
||
| 现象 | 可能原因 |
|
||
|---|---|
|
||
| connect / token 错误 | `MILVUS_TOKEN`、host、database |
|
||
| BM25 / analyzer 相关报错 | 云端 Milvus/Zilliz 版本不支持 BM25 Function |
|
||
| inserted=0 | `knowledge_base` 路径不对,或 md 缺 frontmatter/title |
|
||
| failed>0 | 看响应 `details` 与应用日志 |
|