Skip to content
🔗 分享本题
查看我的学习进度 →
HyDE 假设文档辅助检索图解

🧠 图解记忆: 假设文档只负责把查询带到更合适的向量区域,最终答案仍必须由真实检索证据支撑。

💡 答案要点

核心思想:让 LLM 先写"假答案",再用假答案去检索

为什么需要 HyDE?

  • 用户查询是短文本,语义信息有限
  • 直接检索可能无法准确匹配相关文档
  • HyDE 用 LLM 生成"假设性答案",答案更接近文档风格

HyDE 工作流程:

用户查询: "Transformer为何能并行计算?"

Step 1: LLM 生成假设性答案(不真实,但风格类似文档)
假设性答案: "Transformer并行计算的核心在于Self-Attention机制..."
         → 这个答案的embedding更接近真实技术文档

Step 2: 用假设性答案的向量去检索
检索: cosine_similarity(假设答案_emb, 文档_emb)

Step 3: 检索出真实文档
返回: ["Attention is all you need论文...", "BERT技术解读..."]

Step 4: 用真实文档 + 用户原始问题 → 最终生成答案

代码实现:

python
def hyde_retrieve(query, vector_db, llm, k=5):
    # Step 1: LLM生成假设性答案
    hypothetical_doc = llm.generate(
        f"请用技术文档的风格回答以下问题,不需要真实:{query}"
    )

    # Step 2: 用假设答案检索
    query_emb = embed(hypothetical_doc)
    results = vector_db.search(query_emb, k=k)

    return results

适用场景:

  • 查询与文档风格差异大(如口语问 vs 学术文档)
  • 需要深层语义理解的问题
  • 简单关键词匹配效果不好的场景

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "HyDE 的核心思想很巧妙:先用 LLM 生成一个'假答案',这个假答案的风格更接近真实文档,用它去检索效果反而更好。因为用户的问题是短文本,直接检索容易语义漂移,而 LLM 生成的回答是长文本,embedding 更稳定。实测在学术问答场景,HyDE 能提升召回率 15-20%。"