0Pricing
AI Agents · 课时

HyDE:假设性文档嵌入

让 LLM 生成一份虚构的“理想”答案,为其生成嵌入并据此搜索——效果优于短查询嵌入。

HyDE:假设性文档嵌入 是 CoddyKit 上的免费 AI Agents 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

查询嵌入的问题

用户查询通常很短,而且与您想要检索的文档完全不像。

  • 查询:“修好我的键盘”
  • 文档:“如果您的机械键盘按键出现粘连,可以使用异丙醇清洁轴体……”

两者的向量在语义上相距很远,因此检索不到该文档。

HyDE 思路

HyDE = 假设文档嵌入(Gao 等,2022 年)。

  1. 让 LLM 为查询写出一个虚构的“理想答案”
  2. 嵌入这个虚构答案,而不是查询
  3. 使用该向量搜索真实语料库

为什么有效

假设答案看起来像一篇真实文档(使用相似的词汇和结构)。它的嵌入会接近真实文档的嵌入,因此检索结果更加可靠。

Implementation

def hyde_search(query, k=5):
    # Step 1: hallucinate an answer
    hypo_answer = llm.invoke(f'Please write a passage to answer the question: {query}').content
    # Step 2: embed it
    vec = embed(hypo_answer)
    # Step 3: retrieve
    return vector_db.query(vec, k=k)

答案有误也 OK

HyDE 生成的假设答案可能存在事实错误——这没有关系。我们只使用它的嵌入进行检索。随后使用检索到的 REAL 文档生成最终答案。

Code Example with LangChain

from langchain.chains import HypotheticalDocumentEmbedder
from langchain_openai import OpenAIEmbeddings, ChatOpenAI

embeddings = HypotheticalDocumentEmbedder.from_llm(
    ChatOpenAI(),
    OpenAIEmbeddings(),
    'web_search'   # built-in prompt template
)
vector = embeddings.embed_query('How do I fix a sticky keyboard?')

成本权衡

HyDE 会为每个查询额外增加 1 次 LLM 调用。以下情况值得使用:

  • 查询的措辞与文档的措辞差异很大
  • 检索召回率是瓶颈
  • 语料库包含用户会进行改述的技术文档

多样本 HyDE

生成 N 个假设答案,分别嵌入,并为每个答案检索前 K 个结果,然后合并这些结果。成本更高,但对于棘手的查询,召回率也更高。

hypos = [llm.invoke(...).content for _ in range(3)]
vecs = [embed(h) for h in hypos]
results = set()
for v in vecs:
    results.update(vector_db.query(v, k=5))

将 HyDE 与重新排序结合

使用 HyDE 提升召回率,使用交叉编码器提升精确度:

  1. HyDE 检索前 50 个结果
  2. 交叉编码器将结果重新排序,取前 5 个
  3. LLM 使用前 5 个结果生成答案

不应使用 HyDE 的场景

  • 查询已经与文档语言相匹配(常见问题)
  • 对延迟敏感的路径
  • 语料库非常小,朴素检索已经有效

用于代码的 HyDE

对于代码搜索:虚构用户正在寻找的函数,嵌入该函数,然后检索真实函数。

code_hypo = llm.invoke(f'Write the Python function that does: {user_request}').content
results = code_index.search(embed(code_hypo))

变体:回退式提示

一种相关技术:先让模型推导出一个更一般的问题(“如何清洁键盘?”→“哪种通用清洁方法适用于机械键盘?”),然后嵌入该问题并进行检索。

HyDE 为何有效

为什么 HyDE 比直接嵌入原始查询的检索效果更好?

回顾

HyDE:虚构一个答案,嵌入 THAT,然后进行搜索。它会额外增加 1 次 LLM 调用,但能改善困难查询、改述查询或技术查询的检索效果。

常见问题解答

「HyDE:假设性文档嵌入」课时是免费的吗?

是的 — 「HyDE:假设性文档嵌入」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。

「HyDE:假设性文档嵌入」这节课中我会学到什么?

让 LLM 生成一份虚构的“理想”答案,为其生成嵌入并据此搜索——效果优于短查询嵌入。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Agents 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「HyDE:假设性文档嵌入」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Agents 课中编写并运行代码吗?

能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用交叉编码器重新排序
  2. HyDE:假设性文档嵌入
  3. 多向量检索(ColBERT)
  4. RAG 评估(RAGAS、Recall@K)
← 返回 AI Agents