引言:为什么你的RAG检索总是不准?——从HyDE说起

想象一下这个场景:你搭建了一个企业知识库RAG(检索增强生成)系统,精心整理了数千份医疗指南。用户提出一个看似简单的问题:“高血压患者如何调整饮食?” 系统检索后,返回的却是“马拉松运动员的营养指南”。更令人沮丧的是,当用户将问题稍作变化,比如“高血压饮食建议有哪些?”,系统依然“理直气壮”地给出了一篇关于“高血脂患者运动注意事项”的文章。

这并非虚构的段子,而是众多RAG系统在实际落地中遇到的共性问题。问题的根源,往往不在大模型本身,也不在知识库的数据质量——尽管这两者同样重要——而在于检索这个环节出现了语义鸿沟。用户习惯于用自然语言表达模糊的意图(“怎么吃好?”),而知识库中的文档却以结构化的、专业化的语言存在(“低钠饮食可降低收缩压4-5 mmHg”)。

传统的向量检索,直接将用户的查询映射到一个高维向量空间,再与所有文档的向量进行相似度计算。这种“直球”匹配方式,很难捕捉到查询中隐含的深层意图与描述性细节。

于是,HyDE(Hypothetical Document Embeddings,假设性文档嵌入)技术应运而生。它提出了一种反直觉但极其高效的思想:不要用用户的查询去检索,而是让大模型先生成一个假设的、最符合用户意图的完美文档,再用这个“脑补”出来的文档作为检索的探针。这听起来有些“脱裤子放屁”的嫌疑,但正是这种巧妙的“中间人”策略,大幅弥合了用户查询与知识库文档之间的语义鸿沟。

本文将为你彻底拆解HyDE假设文档嵌入原理,并手把手带你进行RAG查询扩展技术实战。你将掌握:

  1. 深刻理解:传统向量检索为何在面对复杂、模糊查询时频频失效。

  2. 核心原理:HyDE如何通过“生成-嵌入-检索”三步流程,从根本上提升检索相关性。

  3. 实战代码:使用开源模型(Qwen2.5-7B + bge-large)实现一个完整的HyDE检索模块。

  4. 进阶技巧:指令工程、混合检索(HyDE + BM25)等调优方法,让你的HyDE效果更上一层楼。

  5. 避坑指南:实施HyDE时常见的陷阱,以及如何评估其真实收益。

无论你是RAG系统的初学者,还是正在为检索精度头疼的资深开发者,这篇文章都将为你提供一套可直接落地的解决方案。准备好,让我们一起进入RAG在线检索优化的核心战场。

核心原理:当大模型“脑补”出最佳文档去检索

在深入HyDE之前,我们先需要清醒地认识到:HyDE属于查询扩展(Query Expansion)技术中的一种高级变体。传统的查询扩展策略,比如同义词替换(将“电脑”扩展为“计算机”、“PC”)、Multi-Query(生成多个不同角度的查询)等,都聚焦于“重写”用户的问题本身。它们试图通过丰富、变异用户输入来覆盖更多可能的语义表达。

HyDE则完全不同。它不重写问题,而是直接生成答案的“蓝图”。在HyDE的框架下,大语言模型(LLM)不再是一个简单的查询改写器,而是一个“文档生成器”。它被要求:“请根据用户的问题,假设你已经找到了最完美的答案,写一段详尽的、符合知识库风格的文本来回答这个问题。” 这段生成的文本,就是假设文档(Hypothetical Document)

随后,RAG系统会抛弃原始的查询,转而使用这段假设文档的向量来搜索知识库。为什么要这么做?因为假设文档的语义更贴近知识库中真实文档的风格和内容密度。它不再是用户口中零散、口语化的“高血压怎么吃”,而是一段结构完整、信息密集的“高血压患者应减少钠摄入,多吃蔬菜水果,控制体重,定期监测血压。” 当用这段准文档去匹配知识库时,命中率自然会大幅提升。

HyDE的核心洞察是:在向量空间中,查询与文档之间的语义鸿沟,远大于文档与文档之间的语义鸿沟。与其费力将查询映射到文档空间,不如让LLM直接虚拟出一个位于文档空间中的“锚点”,然后围绕这个锚点进行搜索。

1. 传统检索的盲区:直接向量检索为何失效

要理解HyDE为何有效,必须先剖析传统直接向量检索的“软肋”。

第一,长度与粒度的不对称。 用户的查询通常非常简短(几个词到几十个词),而知识库中的文档或片段则可能长达数百甚至上千词。向量模型在编码时,需要对长文本进行池化(如取均值或拼接)才能得到一个固定长度的向量。一个简短的查询向量,其信息密度极低,只能捕捉到最表面的关键词特征。当它与一个信息丰富、结构复杂的长文档向量进行点积计算时,几乎不可能精准定位到最相关的内容。

就像用一把玩具手枪的准星去瞄准一座大山,结果往往是遍地开花,却打不中靶心。

第二,词汇鸿沟(Lexical Gap)。 用户和文档作者使用不同的词汇表达相同的意思。用户可能会说“怎么钱?”,而文档里写的可能是“个人财务优化策略分析”。通用Embedding模型虽然在一定程度上学习了同义词关系,但在处理行业术语、特定表达时依然捉襟见肘。

“肥厚型心肌病”和“HCM”在医学领域是相同的,但在向量空间中,它们的距离可能比“肥厚型心肌病”和“高血压”还要远。这种词汇鸿沟导致检索结果经常出现“关键词匹配但语义不相关”的尴尬情况。

提示:词汇鸿沟是RAG系统在垂直领域(如医疗、法律、金融)表现不佳的首要原因。通用Embedding模型无法充分理解这些领域的“黑话”。

第三,意图的模糊性。 一个查询往往是“意有所指但语焉不详”。例如,用户问“苹果的利润”,意图可以是“苹果公司的净利润”,也可以是“水果苹果的种植利润”,甚至可以是“苹果(手机)的渠道利润”。传统向量检索需要模型对查询的模糊意图进行“猜测”,但这个猜对的概率非常低。它更倾向于匹配包含“苹果”和“利润”这两个关键词的文档,而不管这两个词在上下文中如何关联。

正是这些盲区,使得直接向量检索在面对复杂、模糊、隐晦的查询时,表现得不尽如人意。HyDE的出现,恰恰是为了照亮这些盲区。

2. HyDE的解决方案:三步走——生成、嵌入、检索

HyDE的巧妙之处,在于它把上述问题转化为了一个“文档生成”任务。让我们来完整拆解HyDE的使用步骤详解:

第一步:生成(Generate)——让LLM“脑补”出一个完美文档

核心在于精心设计一个指令,引导LLM生成一个“假设文档”。这个文档并非从知识库中抽取,而是LLM基于其庞大的预训练知识生成的“优秀范文”。指令的关键要点包括:

  • 明确角色:你需要LLM扮演一个知识渊博的专家,或一个文档撰写者。

  • 指定风格:要求生成的文本风格与知识库中的文档保持一致(例如,如果是医学指南,要使用正式、客观的语言;如果是产品说明,要使用通俗易懂的营销语言)。

  • 强调细节:要求生成的内容必须详尽、具体、有逻辑性,最好能包含一些细节和例子。

  • 限制长度:控制生成文档的长度,避免过长(导致噪声)或过短(无法弥合鸿沟)。通常建议生成1-3个自然段,约100-500个tokens。

示例Prompt

1
2
3
系统角色:你是一位专业的医疗健康顾问。
用户问题:高血压患者如何调整饮食?
任务:请根据用户问题,撰写一段详细的、客观的、用于检索的文档。该文档应包含具体的饮食建议、理由和注意事项。请使用专业、正式的风格。

LLM生成的假设文档(Hypo Doc)示例:

1
“高血压患者的饮食调整是心血管疾病管理的关键环节。首要原则是限制钠的摄入,每日食盐量应控制在5克以下。建议增加钾、钙、镁的摄入,多吃新鲜蔬菜、水果、全谷物和低脂乳制品。同时,应减少饱和脂肪和反式脂肪的摄入,限制高胆固醇食物的摄入。定期监测血压,并结合规律的体育锻炼和控制体重。对于长期服用利尿剂的患者,需注意补充钾元素。”

第二步:嵌入(Embed)——复用Embedding模型,一视同仁

将生成好的假设文档,送到与知识库文档同一个Embedding模型中,计算其向量。这一步至关重要,因为只有使用相同的编码器,才能保证假设文档向量和所有文档向量在同一个“语言”的向量空间里。这个向量,就是hypo_vec

第三步:检索(Retrieve)——用假设文档的向量去搜索

现在,抛弃原始的查询向量query_vec,改用hypo_vec去知识库中检索最相似的文档。由于hypo_vec的语义更接近真实文档,它与目标文档的相似度得分通常远高于与无关文档的相似度。

最佳实践:HyDE不仅仅是一种“技巧”,它更像是一种检索策略的范式转换。它没有改变检索的底层算法,而是改变了检索的探针

对比Multi-Query

  • Multi-Query:生成多个不同表述的查询,分别检索后合并去重。它旨在解决词汇鸿沟,通过扩充查询词来覆盖更多语义。
  • HyDE:生成一个最理想的文档,用它进行单次检索。它旨在解决粒度与意图鸿沟,通过生成一个处于文档空间的“锚点”来精准定位。

在部分场景下,两者可以互补:先用Multi-Query生成多个查询,再对每个查询分别进行HyDE,最后融合结果。但HyDE本身已经能带来非常显著的提升,并且实现起来更简洁。

实战上手:手把手实现一个HyDE检索模块

理论讲得再天花乱坠,不如动手跑一个例子。下面,我将带领你使用Python,结合流行的开源大模型和Embedding模型,构建一个完整的HyDE检索模块。

1. 环境准备与模型选择

推荐组合(大模型RAG检索优化工具)

  • LLM生成模型Qwen2.5-7B-Instruct。它在中文和英文场景下都有出色的表现,且推理速度快、资源占用适中。如果你资源有限,可以使用更小的模型,如Qwen2.5-1.5B-InstructChatGLM3-6B
  • Embedding模型BAAI/bge-large-zh-v1.5

这是目前中文场景下效果最好的开源Embedding模型之一,向量维度为1024,知识库编码效果极佳。也可以使用moka-ai/m3e-base等模型。

  • 推理框架vLLM。对于LLM的生成,强烈建议使用vLLM,它提供了极快的推理速度和优秀的并发能力。对于简单的Demo,HuggingFace Transformers也是可以的。

  • 向量库Faiss。这是最流行的向量检索库之一,支持多种索引结构,性能极佳。

轻量级方案:如果你的硬件条件有限(例如只有8GB显存),可以选择更小的模型组合,或者使用在线的LLM API(如OpenAI、百度文心、阿里通义)来生成假设文档。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 示例:导入基础库
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from sentence_transformers import SentenceTransformer
import numpy as np
import faiss

# 选择一个简单通用的Embedding模型用于演示
# 生产环境建议使用bge-large
embed_model = SentenceTransformer('all-MiniLM-L6-v2')

# 选择一个轻量级LLM,用于本地测试
# 生产环境推荐使用vLLM部署Qwen2.5-7B或通过API调用更大模型
llm_model_name = "Qwen/Qwen2.5-1.5B-Instruct" # 或换成其他模型
tokenizer = AutoTokenizer.from_pretrained(llm_model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
llm_model_name,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
model.eval()

注意:上述代码仅用于验证流程。在实际高并发环境中,务必使用vLLM或类似推理框架进行LLM部署,并使用Faiss等专用向量库。

2. 核心代码:生成假设文档 → 检索 → 输出结果

现在,让我们聚焦核心逻辑。以下代码将展示完整的HyDE流程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import torch
from sentence_transformers import SentenceTransformer
import numpy as np

# 假设你已经初始化了embed_model和llm_model(如上文所示)
# 这里为了演示,我们使用一个简化的LLM调用函数

def generate_hypothetical_document(query):
"""
使用LLM生成假设文档
"""
prompt = f"""你是一位专业的医疗健康顾问。
用户问题:{query}
任务:请根据用户问题,撰写一段详细的、客观的、用于检索的文档。

该文档应包含具体的建议、理由和注意事项。请使用专业、正式的风格。
输出一段约100-200字的中文文字:"""

inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=256,
temperature=0.7, # 温度控制,0.7兼顾创造性与相关性
do_sample=True,
top_p=0.9
)
# 解码输出,并去除前后空格
hypo_doc = tokenizer.decode(outputs[0], skip_special_tokens=True)
# 去除prompt部分,只保留生成内容
# 更严谨的做法是在生成时直接获取生成部分,但这里简单处理
if prompt in hypo_doc:
hypo_doc = hypo_doc.split(prompt)[1].strip()
# 如果生成失败或为空,可以考虑回退到原始查询
if not hypo_doc:
hypo_doc = query
return hypo_doc

# 假设的知识库
knowledge_base = {
1: "马拉松运动员需要高碳水饮食,并注意电解质补充。",
2: "高血压患者饮食建议:低盐低脂,增加钾、钙摄入,控制体重。",
3: "糖尿病患者应监测碳水化合物摄入,定时使用胰岛素或口服药。",
4: "坚持规律运动是控制血压和血糖的有效方法。

",
5: "老年高血压患者需注意体位性低血压,避免快速站立。"
}
doc_ids = list(knowledge_base.keys())
doc_texts = list(knowledge_base.values())

# 1. 使用Embedding模型,将知识库中的所有文档向量化
doc_embeddings = embed_model.encode(doc_texts) # 形状: [num_docs, embed_dim]

# 2. 构建Faiss索引 (这里使用最简单的L2距离索引)
index = faiss.IndexFlatL2(doc_embeddings.shape[1])
index.add(doc_embeddings.astype(np.float32))

# 3. 用户查询
query = "高血压患者如何调整饮食"

# 4. 执行HyDE流程
print(f"原始查询: {query}")

# 步骤1: 生成假设文档
hypothetical_doc = generate_hypothetical_document(query)
print(f"假设文档: {hypothetical_doc}")

# 步骤2: 对假设文档编码,并作为检索查询
# 注意:我们不是用query_vector,而是用hypothetical_vector
hypothetical_vector = embed_model.encode([hypothetical_doc]).astype(np.float32)

# 步骤3: 使用假设文档向量进行相似度检索
k = 1 # 返回最相似的1个文档
distances, indices = index.search(hypothetical_vector, k)

# 输出结果
best_idx = indices[0][0]
best_doc_id = doc_ids[best_idx]
best_doc_text = doc_texts[best_idx]
print(f"检索到的文档ID: {best_doc_id}")
print(f"检索到的文档内容: {best_doc_text}")

# 对比:只用原始查询进行检索
query_vector = embed_model.encode([query]).astype(np.float32)
distances_raw, indices_raw = index.search(query_vector, k)
best_idx_raw = indices_raw[0][0]
print(f"\n直接检索结果: {doc_texts[best_idx_raw]}")

代码逐段讲解

  1. generate_hypothetical_document(query) 函数:
    • 它定义了Prompt模板,要求LLM扮演“医疗健康顾问”并生成一段详细、专业的文档。记住,Prompt决定了生成的假设文档的质量。
    • 通过model.generate()生成文本,max_new_tokens控制生成的长度。

过长的假设文档会引入噪声。
- 易错点:生成后要清理输出,去掉Prompt本身,否则会使向量带有噪声。

  1. 构建知识库和Faiss索引:

    • 我们将知识库文档列表doc_texts用Embedding模型一次性编码成向量矩阵 doc_embeddings
    • 使用Faiss的IndexFlatL2索引,这是一种暴力搜索的索引,准确度最高,但速度在千万级数据后会变慢。对于百万级以下的数据,完全够用。
  2. HyDE检索核心:

    • 调用generate_hypothetical_document生成假设文档。
    • 调用embed_model.encode假设文档进行编码,得到hypothetical_vector
    • 使用index.search(hypothetical_vector, k),用假设文档的向量去搜索知识库。
  • 输出结果。
  1. 结果对比:
    • 最后,我们对比了使用原始查询query_vector检索的结果。在这个例子中,很可能直接检索返回的是“马拉松运动员需要高碳水饮食”,因为其包含“饮食”一词。而HyDE检索返回了正确的“高血压患者饮食建议…”。

提示:这个例子虽然简单,但揭示了HyDE的核心思想。在实际项目中,你需要根据你的知识库内容,精细调整生成假设文档的Prompt。

进阶技巧:如何让HyDE效果更上一层楼?

看到这里,你应该已经能跑通一个基本的HyDE流程了。但要想让它在真实项目中立功,还需要一些RAG在线检索优化方案的“内功”。

1. 生成质量调优:指令工程与few-shot示例

假设文档的质量是HyDE的基石。一个质量低劣的假设文档(如包含错误信息、风格迥异、过于笼统)不仅无法提升检索,反而可能引入大量噪声,导致检索结果下降。

指令工程是调整质量的利器。

  • 控制风格:在Prompt中明确指定文档风格。例如:“请以《中国高血压防治指南》的风格撰写一段文字……”。如果知识库包含大量表格和列表,也可以尝试在Prompt中引导生成结构化文本。
  • 添加约束:可以要求LLM生成的内容必须包含某些关键元素。例如:“请确保你的回答包含‘饮食’、‘运动’、‘药物’这三个关键词。

  • 使用System Prompt:在LLM的System Prompt中定义专家角色,告诉模型它必须具备深厚的医学知识,并且“只输出与问题相关的、可用于检索的文本,不要添加任何解释或讨论。”

Few-shot示例是提升生成一致性的强大方法。

在Prompt中提供一个或几个高质量的假设文档作为示例,可以显著提升LLM的模仿能力。例如:

1
2
3
4
5
6
7
8
9
10
11
请根据用户问题,撰写一段专业的、用于检索的文档。
示例1:
用户问题:糖尿病足如何预防?
假设文档:糖尿病足的预防核心在于控制血糖、定期检查足部、选择合适的鞋袜、避免足部受伤。建议每天用温水洗脚并擦干,用润肤霜保持皮肤湿润但不涂抹在趾缝间。一旦发现红肿、破溃,应立即就医。
示例2:
用户问题:儿童肥胖的危害有哪些?

假设文档:儿童肥胖不仅影响体型,更会增加患高血压、糖尿病、睡眠呼吸暂停综合征、骨关节炎等疾病的风险。同时,肥胖也会对儿童的心理健康造成负面影响。因此,家长应关注孩子的体重,培养健康的饮食习惯和运动习惯。
---
用户问题:[你的查询]
假设文档:

最佳实践:为不同的知识库领域(如医学、法律、金融)准备不同的Few-shot示例。这相当于为每个领域训练了一个专属的“文档生成器”。

2. 混合检索:HyDE + 稀疏检索的互补

HyDE生成的假设文档向量是稠密向量,它擅长捕捉语义相似性,但在处理高精度关键词匹配(如产品编号、书名)方面表现较弱。而稀疏检索(如BM25)则相反,它基于词频和逆文档频率,擅长精确的关键词匹配,但对语义相似性不敏感。

将两者结合,可以实现优势互补。一种常见的做法是:分别用HyDE向量(稠密)和原始查询(稀疏)进行检索,然后将两个结果列表进行RRF(Reciprocal Rank Fusion)融合

RRF融合公式
每个文档的最终得分 = 1/(60 + rank_hyde) + 1/(60 + rank_bm25),其中rank_hyde和rank_bm25分别是该文档在HyDE和BM25检索中的排名。

实现步骤

  1. 使用BM25对原始查询query进行稀疏检索,得到top-k结果列表list_bm25(包含文档ID和得分)。
  2. 使用HyDE(即假设文档向量)进行稠密检索,得到top-k结果列表list_hyde
  3. 对两个列表中的所有文档应用RRF融合公式,计算最终得分。
  4. 按最终得分降序排列,取top-n作为最终结果。

这种RAG查询扩展技术实战中的混合方案,通常能带来比单独使用任何一种方法都更稳健、更准确的检索效果。

常见踩坑记录:实施HyDE时容易忽视的陷阱

在将HyDE应用于生产环境时,有几个常见的陷阱需要警惕。

1. 生成文档“答非所问”怎么办?

这是最令人头疼的问题。发生的原因主要有两个:

  1. LLM本身能力不足:对于非常专业或罕见的问题,小模型甚至中模型可能无法生成有意义的假设文档。
  2. Prompt设计不当:Prompt没有明确引导LLM聚焦于问题,或者没有限制其输出范围,导致LLM发散。

解决方案

  • 验证生成文档的合理性:在正式检索前,计算假设文档向量hypo_vec与原始查询向量query_vec的余弦相似度。如果相似度低于某个阈值(例如0.5),说明假设文档可能“跑偏”了,此时应回退到使用原始查询进行检索。
  • 使用更大的LLM:如果预算允许,使用更强大的模型(如Qwen2.5-72B、GPT-4-0)可以显著提升生成的稳定性。

在测试阶段,可以通过API调用这些模型来评估其效果。

  • 增加Prompt中的限制:明确告诉LLM:“你生成的文档必须与用户问题直接相关,不得包含任何无关信息。如果问题不明确,请假设最可能的情况。”

2. 延迟与成本:HyDE是否值得引入?

HyDE虽然在检索质量上带来巨大提升,但也引入了额外的延迟和成本。

  • 延迟:HyDE的流程是:生成假设文档(LLM推理) → 编码假设文档(Embedding模型) → 检索。与直接检索相比,增加了LLM推理和一次编码的开销。LLM的推理是主要瓶颈。
  • 成本:如果使用API调用LLM,每次HyDE都需要花费一次API调用。对于高频场景,成本会迅速增加。

应对策略

  • 缓存假设文档:对于频繁出现的查询或查询模板,可以缓存生成的假设文档及其向量。下次遇到相同或高度相似的查询时,直接使用缓存的向量,跳过LLM生成步骤。这是一种高效的容错策略。
  • 异步生成:将LLM生成步骤与检索-阅读步骤解耦。可以先使用原始查询进行一次快速检索,让用户快速看到初版答案。

同时,后台异步执行HyDE,生成更精确的检索结果,并在准备好后覆盖或补充初版答案。这可以显著改善用户体验。

  • 选择性应用:并非所有查询都值得使用HyDE。可以建立一个轻量级的分类器(或简单规则),判断查询的复杂度和模糊度。对于简单、明确的查询,直接使用原始查询;对于模糊、复杂的查询,才触发HyDE。

这便是“自适应查询扩展”的雏形。

总结与拓展:从HyDE到更智能的在线检索

我们来回顾一下HyDE假设文档嵌入原理带来的核心突破:它通过一个“生成-嵌入-检索”的优雅流程,将用户查询与知识库文档粒度不匹配的问题,转化为“文档-文档”的匹配问题。这种“以退为进”的策略,极其巧妙地提升了检索的相关性,尤其是在处理复杂、模糊的查询时。

本次RAG查询扩展技术实战中,我们学到了三点

  1. 理解原理:HyDE是查询扩展的“明星”,它不重写问题,而是生成答案的“蓝图”。
  2. 动手实现:通过Qwen2.5-7B + bge-large的组合,我们能在本地环境中轻松复现HyDE的核心流程。
  3. 精细调优:指令工程、Few-shot示例、混合检索(HyDE + BM25)是让HyDE效果最大化的重要工具。

展望未来,RAG的在线检索技术正朝着更智能、更自适应、更低成本的方向演进。

  • 自适应查询扩展:未来的系统将能够根据查询的复杂度、知识库的特性、用户的上下文,动态决定使用哪种检索策略(直接检索、Multi-Query、HyDE、或他们的组合)。这需要更智能的“策略选择器”。
  • 端到端检索即服务:我们可以将HyDE看作一个“检索增强函数”,它可以被集成到更复杂的RAG流程中。

VLLM、LangChain等框架已经提供了HyDE的实现,未来它可能成为每个RAG系统的标准配置。

  • 与知识图谱的融合:HyDE生成的假设文档,不仅可以用于稠密检索,也可以用于知识图谱的实体识别和关系抽取,实现更深度的知识理解。

HyDE不是银弹,但它无疑是目前提升RAG在线检索性能最有效、最实用的技术之一。它告诉我们,有时“绕个弯子”比“直来直去”能更快地到达目的地。现在,是时候在你的项目中尝试一下HyDE了。你会发现,那些曾经让你头疼的“不着边际的答案”,也许将不复存在。

总结

通过本文的学习,相信你已经对「HyDE假设文档嵌入原理」有了更深入的理解。建议结合实际项目多加练习。如有疑问,欢迎交流!