问题描述
AstrBot v4.27.4 的知识库混合检索在处理短英文实体词时,可能出现以下情况:
- Dense 检索因为 embedding 对大小写敏感而召回失败;
- Sparse / FTS5 已经成功召回包含该英文实体的精确词面匹配;
- 但由于当前 Fusion 明显偏重 Dense(本环境中
dense_weight = 0.9),Sparse-only 的正确候选仍可能被压出 Fusion top20;
- 最终 top5 中完全不存在实际包含查询词的 chunk。
最终表现是:
知识库中明明存在非常罕见的精确字符串,但混合检索结果中却完全没有它。
对于 DND、CoC、WoD 等包含大量英文怪物名、法术名、人名、缩写和其他专有名词的资料库,这种情况影响较明显。
如何复现?
-
在 AstrBot WebUI 中创建/使用一个知识库,并确保某个知识块正文中明确包含较罕见的英文实体词,例如:
-
确认该文档已经完成知识库索引。
-
进入该知识库的「知识库检索」页面,返回结果数量设置为 5。
-
搜索:
在我的环境中可以正常召回包含 Oni 的目标知识块,其中 2025 版怪物图鉴中的 Oni 条目排名第 1。
-
将查询仅修改大小写为:
-
再次搜索。
-
此时目标 Oni 知识块全部掉出最终 top5,返回结果变为与查询明显无关的其他内容。
-
再搜索:
结果同样与 Oni 明显不同。
-
搜索中文实体名:
又可以正常召回目标条目。
补充:
已进一步对生产环境内部 retrieval 进行只读诊断。FTS5 / Sparse 对 Oni、oni、ONI 的召回结果完全一致,差异首先出现在 Dense embedding 阶段;随后由于 Fusion 偏重 Dense,Sparse 已经命中的目标知识块仍可能被淘汰。
AstrBot 版本
v4.27.4
操作系统
Linux
部署方式
Docker(Ubuntu VPS)
使用的消息平台适配器
不涉及。本问题可直接在 AstrBot WebUI 的知识库检索页面复现。实际使用QQ 官方机器人(WebSocket) - OneBot v11
错误日志
本问题不会产生 Exception / Error 日志,表现为 native hybrid retrieval 返回结果异常。
已对生产 AstrBot v4.27.4 的内部检索链进行只读诊断:
KnowledgeBaseManager.retrieve()
→ RetrievalManager.retrieve()
→ Dense: FaissVecDB / IndexFlatL2
→ Sparse: SQLite FTS5 / unicode61
→ RankFusion.fuse()
→ final top5
目标 chunk 均明确包含 token "Oni"。
关键诊断结果:
query = Oni
2025 Oni:
Dense #1
Sparse #8
Fusion #1
Final #1
query = oni
2025 Oni:
Dense >50
Sparse #8
Fusion >20
Final: 未进入
2014 Oni:
Dense >50
Sparse #25
Fusion >20
Final: 未进入
query = ONI
2025 Oni:
Dense #42
Sparse #8
Fusion >20
Final: 未进入
另外直接验证 FTS5:
"Oni" / "oni" / "ONI" 均返回完全相同的 32 个 rowid。
因此大小写差异最早出现在 Dense / embedding 阶段;Sparse 已正确召回,但目标候选随后在 Fusion 中被淘汰。
测试日志随附在辅助信息里。
辅助信息
kb_diag_fts.txt
检查清单
问题描述
AstrBot v4.27.4 的知识库混合检索在处理短英文实体词时,可能出现以下情况:
dense_weight = 0.9),Sparse-only 的正确候选仍可能被压出 Fusion top20;最终表现是:
对于 DND、CoC、WoD 等包含大量英文怪物名、法术名、人名、缩写和其他专有名词的资料库,这种情况影响较明显。
如何复现?
在 AstrBot WebUI 中创建/使用一个知识库,并确保某个知识块正文中明确包含较罕见的英文实体词,例如:
确认该文档已经完成知识库索引。
进入该知识库的「知识库检索」页面,返回结果数量设置为 5。
搜索:
在我的环境中可以正常召回包含
Oni的目标知识块,其中 2025 版怪物图鉴中的 Oni 条目排名第 1。将查询仅修改大小写为:
再次搜索。
此时目标
Oni知识块全部掉出最终 top5,返回结果变为与查询明显无关的其他内容。再搜索:
结果同样与
Oni明显不同。搜索中文实体名:
又可以正常召回目标条目。
补充:
已进一步对生产环境内部 retrieval 进行只读诊断。FTS5 / Sparse 对
Oni、oni、ONI的召回结果完全一致,差异首先出现在 Dense embedding 阶段;随后由于 Fusion 偏重 Dense,Sparse 已经命中的目标知识块仍可能被淘汰。AstrBot 版本
v4.27.4
操作系统
Linux
部署方式
Docker(Ubuntu VPS)
使用的消息平台适配器
不涉及。本问题可直接在 AstrBot WebUI 的知识库检索页面复现。实际使用QQ 官方机器人(WebSocket) - OneBot v11
错误日志
辅助信息
kb_diag_fts.txt
检查清单