测评数据初始化
上一篇讲了评估集的 schema——150 条样本,12 个字段,每个字段为什么存在、被谁消费。评估集设计好了,但 Ragent 还是空的。
评估集里标了 S1-01 应该召回 GUIDE_PHONE_002,但如果 Ragent 的知识库里压根没有这篇文档,评测就是空转——检索指标算出来全是 0,不是系统差,是根本没东西可检索。意图树也一样,评估集标了 S1_选购推荐,但 Ragent 没建这个意图节点,意图识别就无从谈起。
这篇讲的是评测的基建:怎么用三个 Python 脚本把 Ragent 从空白状态搭到可评测状态——有知识库、有文档、有意图树。
初 始化总览:从空白到可评测
执行初始化之前,需要先安装 Python 环境,版本不得低于 3.11,参考 廖雪峰老师 Python 安装教程。
1. 三步数据流
初始化分三步,每步依赖上一步的产物,必须按顺序执行:
三步跑完后,Ragent 就有了 4 个知识库、115 篇已分块的文档、30 个意图节点,处于可评测状态。
2. 运行前配置
跑之前需要配三个环境变量:
export RAGENT_BASE_URL=http://localhost:9090/api/ragent
export RAGENT_USERNAME=admin
export RAGENT_PASSWORD=admin
所有脚本通过 POST /auth/login 获取 token,后续请求带 Authorization header 鉴权。
初始化第一步:建 4 个知识库
1. 为什么按文档类型建库
第一个问题:为什么是 4 个知识库而不是 22 个?
如果按意图切,每个二级意图一个知识库,就要建 22 个 KB。管理成本高不说,很多意图其实共享同一批文档——S14 售后政策和 S15 退换货查的都是政策类文档,S8 操作指引和 S9 配网连接查的都是使用手册。按意图切会导致大量重复灌入。
所以按文档类型切成 4 个:
| KB Key | 名称 | 文档数 | 覆盖场景 |
|---|---|---|---|
| product | 比特严选-商品库 | 65 | 商品详情、选购指南、对比评测 |
| manual | 比特严选-使用手册库 | 25 | 操作手册、配网指南、APP 指南 |
| policy | 比特严选-政策库 | 15 | 保修、退换货、物流、发票会员政策 |
| faq | 比特严选-FAQ库 | 10 | 故障排查、错误码手册 |
一个意图通过意图树关联到对应的 KB(下一步讲),简洁且灵活。
2. 运行脚本与产物
运行命令:
python eval/rag/init/create_kbs.py
脚本调用 POST /knowledge-base 接口逐个创建,产出 kb_ids.json——记录每个 KB 的 ragent snowflake ID:
{
"product": {
"kb_id": "2058461026313089024",
"name": "比特严选-商品库",
"collection_name": "kb-product",
"embedding_model": "qwen-emb-8b"
}
}
注意:这个脚本没有幂等性——跑两次会建两套重复的 KB。这是有意为之,知识库创建是一次性操作,不值得为幂等增加复杂度。如果需要重建,先用 reset_kbs.py 清理再跑。
可以看到
embedding_model的值是 qwen-emb-8b,这个也是 Ragent 项目默认的向量模型。如果调整了 Ragent,记得这里也要调整。