查询改写与 HyDE 是什么
用户问句与文档陈述句之间存在表述鸿沟:口语、指代、缺术语的短查询,用向量检索很难命中正确段落。查询改写负责把问句补成完整书面表述,比如补上被省略的主语与实体;HyDE 则先让模型写一段假想答案,再用这段假答案的向量去检索——假答案不要求内容正确,它的价值在于用词分布贴近真实文档,从而把检索拉进正确的语义邻域。
基本信息
| 直接改写 | 结合对话历史补全指代与省略,如「它怎么配」改成「Qdrant 怎么配置快照」 |
|---|---|
| HyDE | 生成一段假想答案文档,用它的向量检索,假答案内容不必为真 |
| 多查询扩展 | 一次生成多条不同角度的查询并行检索,再融合结果 |
| 适用信号 | 查询短、术语口语化、与文档措辞差距大、多轮对话含指代 |
| 主要代价 | 每次问答多一次模型调用,首字延迟与成本同步上升 |
| 上线前提 | 必须有评测集对比改写前后召回率,不能凭感觉开开关 |
典型使用场景
- 多轮对话里用户说「它怎么重启」,指代不补全则检索直接失效
- 口语化提问「程序跑得太慢有什么办法」,与文档里的性能优化章节用词差距大
- 术语缺失的场景:「服务器老是自己重启」需要改写成宕机与自动重启相关表述
- 中英混用与内部缩写较多时,改写成文档使用的正式术语
- 专业领域短问题(条款、标准术语)用 HyDE 生成一段该领域的典型论述再检索
两段提示词模板
两段提示词模板
# 改写模板:只补全,不改意图
结合对话历史,把用户问题改写成一条自包含的检索查询:
补全指代与被省略的主语,保留全部数字、版本号与专有名词。
只输出改写后的查询,不要解释。
原始问题:{{query}}
# HyDE 模板:写假想答案,用它的向量检索
请针对下面的问题写一段 100 字左右的假想答案,
用词尽量接近该领域的正式文档,内容不必正确:
问题:{{query}}
假想答案:三种查询侧手段对比
| 手段 | 依赖 | 适合 | 主要风险 |
|---|---|---|---|
| 直接改写 | 对话历史与上下文 | 多轮对话、指代密集 | 改写抹掉关键实体与编号 |
| HyDE | 一次额外生成调用 | 短查询、术语鸿沟大 | 假答案跑偏主题,召回同向偏移 |
| 多查询扩展 | 多次检索资源 | 多义问句、覆盖面不足 | 各条查询高度重复,等于没扩展 |
HyDE 的假答案内容对错无关紧要,但要与目标语料同语言、同文体:用中文口语写假答案去检索英文技术手册,效果通常不如直接改写。
改写最常见的损失是数字与编号:型号、版本号、条款号一旦被改写或省略,检索就会偏移到错误文档,模板里要显式要求原样保留。