RAG查询扩展:HyDE与多查询改写
AI 总结
这篇教程演示如何使用 HyDE 和多查询改写,为措辞与知识库文档不同的完整查询增加检索入口。作者在 PostgreSQL 16、pgvector 0.8、bge-m3 和 RRF 融合环境中报告,多查询扩展并保留原查询时 recall@5 达到 86%,高于不扩展的 72% 和单独使用 HyDE 的 80%,但延迟也更高。评测仅涵盖作者设备知识库中的 100 条查询,不能视为通用基准。
深度见解
文章给出了可复现的 RAG 检索改进方法,同时提醒开发者控制意图漂移、重复分块和额外延迟,并仅对低置信查询触发扩展。
上一篇解决了多轮对话里的指代和省略:先把「它多少钱」还原成独立 query,再送检索。但独立 query 也不天然适合检索。
用户说「设备老是卡住」,文档写的是「设备响应超时」;用户说「打印有黑道」,文档写的是「输出页面出现纵向条纹」。问题很完整,向量检索却可能因为措辞差异捞不到目标文档。
这类问题该做查询扩展:用 HyDE 或多 query 改写增加检索入口。这篇沿用前面的 pgvector + bge-m3 环境,给出最小实现、RRF 融合代码和一组分类型评测,最后说清两套方案怎么选。
一、先分清:查询重写和查询扩展不是一回事
这两个技术经常混在一起,实际解决的问题不同:
| 技术 | 输入的问题 | 目标 | 输出 |
|---|---|---|---|
| 查询重写(上一篇) | 「它多少钱」,离开上下文无法理解 | 补全指代和省略 | 一个独立 query |
| 查询扩展(本篇) | 「设备老是卡住」,语义完整但措辞不好检索 | 增加与用户措辞不同的检索入口 | 假设答案或多个 query 变体 |