
🧠 图解记忆: 假设文档只负责把查询带到更合适的向量区域,最终答案仍必须由真实检索证据支撑。
💡 答案要点
核心思想:让 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%。"