要解决的问题
检索失败是否都需要换向量数据库?先用一个可复现的小实验检查文本表示差异。这个实验只测试子串匹配,没有使用嵌入、生成模型或外部 API。
环境与版本
2026-10-03 在 macOS、Node.js v26.8.2 上运行。实验只使用 Node 内置文件与断言模块,没有模型调用和付费依赖。源码位于 scripts/retrieval-lab.mjs,固定输入与结果位于 labs/retrieval/。
复现步骤
在项目根目录运行:
node scripts/retrieval-lab.mjs
node scripts/retrieval-lab.mjs --check
第一条打印结果,第二条确认当前代码输出与记录完全一致。修改实验数据后,用 --write 更新记录,并在提交中解释样本变化。
语料由本站编写,共三条,分别包含 RAG、Token 和回归检查。两个方案都返回首个包含查询的文档 ID;唯一改动是比较前是否执行 normalize('NFKC').toLowerCase()。命中规则是返回 ID 与预期 ID 完全相同。
实际结果
| 查询 | 预期文档 | 精确匹配 | 规范化匹配 |
|---|---|---|---|
| RAG | rag | rag | rag |
| rag | rag | 未命中 | rag |
| Token | token | 未命中 | token |
| 回归 | eval | eval | eval |
| 知识增强 | rag | 未命中 | 未命中 |
精确匹配命中 2 / 5,规范化后命中 4 / 5。本次观测说明:在这组手写样本里,大小写与全角字母造成的两处失败可由预处理修复。
失败与适用边界
“知识增强”与文档中的 RAG 没有子串关系,两个方案都失败。新增一个只差语义表达的查询,通常需要更好的查询分析或其他检索方法,但必须重新运行才能得出结果。
三条文档与五个查询是人工挑选的演示数据。结果不代表真实查询分布,也不证明规范化在任意场景都有收益。首个匹配策略还可能把错误文档排在前面;NFKC 会改变兼容性字符表示,原始资料应另外保留。
复习任务
新增一个不该返回结果的问题和一个会匹配多个文档的问题。先写出预期,再运行脚本,记录首个匹配策略的缺陷。把检索命中与答案正确性分开,不要把本实验称作完整的 RAG 评测。
来源与核验
字符串处理依据 MDN 的 normalize 文档;RAG 论文用于理解实验与完整系统的范围差异;评估文章用于设计固定输入与失败记录。实验没有复现上述资料的代码或模型结果。
修订记录
2026-10-03:AI 助手编写自有语料和实验脚本,实际运行并保存 JSON 结果;公开发布前由作者通读解释与边界。
原始资料与核验依据
- Anthropic:怎样设计可信的评估Mikaela Grace、Jeremy Hadfield、Rodrigo Olivares、Jiri De Jonghe / Anthropic · Demystifying evals for AI agents,访问时版本 · 访问于 2026-10-03
- RAG 原始论文:检索与生成怎样结合Patrick Lewis 等 · arXiv:2005.11401v4 · 2021-04-12 · 访问于 2026-10-03
- MDN:字符串 Unicode 规范化MDN contributors · String.prototype.normalize(),访问时版本 · 访问于 2026-10-03
继续探索
哪些笔记引用了这里
学习路径:RAG 与智能体工程:从资料到可验证执行
第 1 / 14 步 · 验证任务:实际运行原有实验并对照记录,新增一个失败查询。
学习路径:AI 应用入门:从概念到一个小实验
第 4 / 4 步 · 验证任务:运行实验、解释两种匹配的差异,并新增一个失败查询。