0


HyDE :让 RAG 检索从"匹配关键词"升级到"理解意图"

做过检索增强生成(Retrieval-Augmented Generation,RAG)的人大概都遇到过这样的情况:用户问了一个完全合理的问题,但检索就是漏掉了最相关的信息。

传统 RAG Pipeline 不弱,但它严重依赖查询和文档分块之间的直接相似度匹配。措辞和文档内容只要写法不一样这套就开始失灵。

Hypothetical Document Embeddings(HyDE) 不是"搜索文档",而是让系统在检索开始之前,先想清楚理想答案应该长什么样。

传统检索的问题

大多数 RAG 系统的流程很简单:

 Query → Embedding → Vector Search → Retrieved Chunks → LLM Response

向量数据库根据语义相似度去检索,但相似不等于相关。

举个例子:

 Query:
 "How can LangSmith help monitor LLM applications?"

如果存储的分块里从来没出现过 "monitor"、"tracking" 或 "observability",哪怕文档里其实写过答案,检索质量也会掉下来。

由此带来三类典型问题:对未见过的查询检索效果差;在领域专有术语上表现弱;不相关的上下文被送进了 LLM。检索一旦失败,生成基本也跟着崩。

什么是 HyDE

HyDE 是 Luyu Gao 提出的检索技术,思路是:在向量检索之前,先生成一份假设的答案文档。

不是直接把用户查询拿去做 Embedding,而是这样:

 User Query
      ↓
LLM generates hypothetical answer/document
      ↓
Create embedding of that hypothetical document
      ↓
Search vector database using this richer embedding
      ↓
 Retrieve better context

核心想法非常简单:生成出来的假设文档,比原始的短查询承载了更丰富的语义。检索系统据此搜索的是"上下文意图",而不只是关键词层面的相似度。

HyDE 内部是怎么跑的

完整流程如下。

1、用户提交查询例如:

 "What is LangSmith and why do we need it?"

2、LLM 生成一份假设文档

LLM 写出一段可能回答这个问题的合成文本。

例如:

 "LangSmith helps developers monitor, debug, and evaluate LLM applications..."

这份文档并不要求事实完全正确,它要表达的是"一个有用答案大致长什么样"。

3、生成 Embedding

把假设文档转成向量。这个向量通常比直接对原始查询做 Embedding 信息密度高得多。

4、执行向量检索

用这个 Embedding 去向量数据库里做相似度搜索:

 Hypothetical Embedding → Similarity Search → Relevant Documents

检索关注的是概念上的相关性,而不是浅层的关键词匹配。

5、生成最终答案

检索到的文档进入 RAG 的生成阶段,从而拿到更准确、更贴合上下文的回答。

这个设计的妙处在于不需要重新训练检索模型。改变查询的表达方式,就能改善检索质量。

LangChain 实现

HyDE 之所以流行起来,原因之一是用 LangChain 有现成的实现我们可以直接拿来用

 fromlangchain.embeddingsimportOpenAIEmbeddings
fromlangchain.chat_modelsimportChatOpenAI
fromlangchain.chains.hyde.baseimportHypotheticalDocumentEmbedder

llm=ChatOpenAI(
    temperature=0
)

base_embeddings=OpenAIEmbeddings()

hyde_embeddings=HypotheticalDocumentEmbedder.from_llm(
    llm=llm,
    base_embeddings=base_embeddings,
    prompt_key="web_search"
)

query="What is LangSmith and why do we need it?"

 embedding=hyde_embeddings.embed_query(query)

LLM 生成假设答案;答案被 Embedding;Embedding 用于检索。代码改动很小,但检索效果可能有不小的提升。

总结

HyDE 在 RAG 应用里尤其有用,特别是:文档很长;术语与用户表述差异大;检索质量不稳定。

传统 RAG 搜索的是"与查询相似的文档",HyDE 搜索的是"与理想答案相似的文档"。一个小小的视角切换,让检索明显聪明了不少。

by Mangesh Jadhav

标签: RAG 语言模型 HyDE

“HyDE :让 RAG 检索从"匹配关键词"升级到"理解意图"”的评论:

还没有评论