RAG策略
1.基于 bge-reranker-large 模型的重排序功能,通过对检索到的文档进行二次排序,提高检索质量。
1)将问题和每个文档组成对,然后使用预训练的 bge-reranker-large 模型计算相关性分数,最后返回得分最高的 N 个文档。
2.融合实现
复杂召回方式"通过问题扩展和递归融合提高了全面性:
1)首先通过大模型调用方法生成多个相关问题
2)使用 LLM 生成多个相关问题,然后对每个问题分别进行检索,并将所有问答对积累起来作为上下文,实现了多角度信息的融合。
3.过滤实现
文档检索过滤和重排序过滤
1)基于相关性得分的过滤
2)在向量数据库实现中也有文件级别的过滤功能:
4.摘要和总结实现
项目中的摘要和总结功能主要通过精心设计的提示模板和 LLM 调用实现:
基本的问答提示模板:
template = """
根据上下文回答以下问题,不要自己发挥,要根据以下参考内容总结答案,如果以下内容无法得到答案,就返回无法根据参考内容获取答案, 参考内容为:{context} 问题: {question}
"""
更复杂的包含背景问答对的提示模板:
template2 = """
以下是您需要回答的问题: \n--\n {question} \n---\n 以下是任何可用的背景问答对: \n--\n {q_a_pairs} \n---\n 以下是与该问题相关的其他上下文: \n--\n {context} \n---\n 使用以上上下文和背景问答对来回答问题,问题是:{question} ,答案是:
"""
self.decomposition_prompt = ChatPromptTemplate.from_template(template2)
5.总结
- 复杂召回方式:使用问题扩展和递归融合
- 简单召回方式:直接检索相关文档并生成回答
- rerank:使用重排序提高检索质量
- 评估检索结果的精确率和召回率
-
平均精度均值
-
归一化折损累积增益 (NDCG)
-
创建测试数据集
为了进行评估,需要创建一个测试数据集,包含问题和相关文档的标注。
其余的rag策略
1。不同切分大小对检索的影响
选择合适的块大小对于 RAG 系统至关重要。
较小的块可能导致语义上下文缺失,影响回答完整性。
较大的块虽提供更多上下文,但也可能降低嵌入的分辨力,影响检索精度。
最优块大小应在“上下文足够完整”和“检索精度足够高”之间平衡,一般经验值在
256
左右。
2.加入相邻上下文增强信息
1)将文本切分为多个重叠的小块(如 256 字符 + 50 字重叠)以保持上下文连续。
2)检索某个块时,不仅返回该块,还会额外返回其前后相邻的若干块(例如:前1+当前+后 1),构成“上下文窗口”。
3.为每段文本加上描述性头部
每个文本块前加一个人工生成的或模型生成的“上下文标题”
标题可以来自:文档结构中的章节标题、段落首句、或通过 LLM 提炼出的摘要性标题
将“标题 + 内容块”作为整体进行嵌入,从而提升检索相关性
4.从原文中生成问题来增强检索
问题生成(关键增强)
使用 LLM 为每个文本块生成 1~n 个相关问题
示例:块内容为“AI 可以帮助医生诊断疾病”,生成的问题可能是:
“AI 如何应用于医疗?”
“有哪些 AI 用于诊断系统?”
嵌入生成
为每个“文本块”和“生成的问题”分别生成嵌入向量
构建增强型向量库
将
(问题+块)
对一同保存并用于相似度检索检索
用户的查询与“生成的问题”进行语义匹配,找出最相关的块
5.查询重写(如反向提问、子查询分解)
1. 查询重写(Query Rewriting)
✅ 精度导向
将原始查询转换为更清晰、具体、可检索的形式。例:
原始:苹果公司在2010年的发展情况如何?
重写:请提供关于苹果公司在2010年产品发布、营收和市场份额的详细信息。
2. 后退提示(Step-back Prompting)
🔁 上下文补充导向
生成更泛化或背景性的问题来检索潜在有帮助的背景信息。例:
原始:ChatGPT 为什么能写代码?
后退查询:什么是大语言模型?它们如何用于代码生成?
3. 子查询分解(Sub-query Decomposition)
🔍 复杂问题 → 简化组成
将多层结构的问题分解为若干简单子问,再分别检索后合并。例:
原始:介绍 Transformer 架构及其在 NLP 中的应用
子查询:
什么是 Transformer 架构?
Transformer 在 NLP 中有哪些应用?
6.使用 LLM 重排序初始检索结果
初始检索:
使用嵌入 + 余弦相似度进行向量召回,得到多个候选文本块。
文档评分:
用语言模型(如 GPT)评估每个候选块与查询的语义相关性,生成得分。
重新排序:
将得分结果排序,优先使用得分最高的文本块。
选择前 K 个块生成回答:
通常只保留前 1~3 个得分最高的块,作为上下文传给生成模型。
7.Relevant Segment Extraction,提取连续片段
对检索到的文本块进行“上下文段聚合”
重建成连贯段落(由多个相邻高分块组成)
将整段而非单块输入给 LLM,从而增强生成效果
如何决定“哪些块可以合并成一段”?
🔁 核心算法流程:
从未被选过的块位置
start
开始,尝试各种长度的片段 [start:end]计算该片段内所有块得分总和(即该段的整体价值)
记录得分最高的片段作为“最佳段落”
如果满足最小阈值,就将该段加入最终结果,并排除其覆盖的块
重复,直到达到最大块数限制或找不到更好的段落
8. 压缩无关内容,仅保留关键信息
对检索后的每个文本块使用 LLM 进行压缩过滤
只保留和当前查询高度相关的句子、子段落甚至关键词
最终将多个“压缩后的块”拼接,传入 LLM 生成回答
9.加入用户反馈进行持续优化
反馈机制核心模块:
✅ 用户对生成回答进行“点赞/点踩”或提供评分
✅ 系统记录该 query 与被使用 chunk 的组合
✅ 为 chunk 设置“反馈加权值”,动态影响其排序
反馈感知检索逻辑:
原始相似度分数 × 用户反馈影响因子 → 排序
支持在向量库中更新反馈权重字段(如
metadata['score_boost']
)完整 RAG + Feedback Pipeline
初始检索 → 响应生成 → 用户反馈 → 检索器学习调整 → 下一轮更优召回
10. 根据查询类型动态选择检索策略
自适应 RAG 核心流程:
步骤 1:查询分类
使用 LLM 对输入查询自动分类为以下四种类型之一:
类型 示例 事实型
“GPT-4 发布于哪一年?” 分析型
“GPT-4 和 GPT-3 的差异有哪些?” 观点型
“你如何看待 AI 写作?” 上下文型
“你上次提到的那个技术是什么?”(依赖上下文)
步骤 2:根据类型调用专门策略
🔹 Factual Strategy:追求精确匹配
用于短事实类问题
使用 top-k 向量检索 + 高阈值过滤
🔹 Analytical Strategy:追求覆盖广度
向量召回数量较多,允许重排
聚合多个相关观点或段落
🔹 Opinion Strategy:追求多样性
使用关键词反查或 BM25 提升语义广度
可引入多段回答做综合评述
🔹 Contextual Strategy:追溯上下文
可集成历史对话内容、用户偏好、上下文线索
通常用于多轮问答或 session-aware 应用
11.自我评估是否需要检索并调整方式
🔄 Self-RAG 核心组件与流程:
1. 检索决策(Retrieval Decision)
使用 LLM 判断当前查询是否需要外部知识支持
如回答能直接生成(如常识、定义类),则跳过检索
2. 文档检索
若需要检索,则执行向量相似度检索(标准流程)
3. 相关性评估(Relevance Evaluation)
对检索结果进行再次打分,识别哪些块真正有价值
4. 响应生成(Response Generation)
基于精选文段生成回答
5. 支持评估(Support Assessment)
LLM 判别生成的回答是否确实基于上下文
如回答脱离上下文或胡编,则会标记或调整
6. 效用评价(Utility Evaluation)
对最终输出质量进行打分(如准确性、完整性)
🧪 实验结构:
PDF 提取与文本分块
嵌入生成 + 构建向量库
执行 self-RAG 流程(含五重评估模块)
对比传统 RAG 与 Self-RAG 在不同场景下的表现差异
12.将文档拆成原子命题以精细化检索
🧠 命题组块核心思路:
将文档拆解成每个可以独立表达的“事实陈述”,作为最小检索单位。
具体流程如下:
步骤 1:文本提取与初步分段
从 PDF 提取纯文本,按段落或句子初步切分
步骤 2:命题生成(Proposition Generation)
使用 LLM 将每段文本进一步抽取出“原子命题”(如:主谓宾结构的陈述)
步骤 3:命题质量过滤
去除含糊、重复或不完整的陈述(如只包含代词、模糊词的句子)
步骤 4:为命题生成向量嵌入
每条命题作为最小检索单元加入向量库
步骤 5:执行查询并匹配命题
查询与命题逐条对比相似度,找到最精准相关语句用于响应生成
📌 示例(假设输入 chunk 如下):
原始 chunk(被分块的文档段):
OpenAI 是一家人工智能研究机构,成立于 2015 年。它推出了 GPT 系列模型,其中 GPT-4 于 2023 年发布。该公司由 Elon Musk 和 Sam Altman 等人共同创立,总部位于旧金山。
模型生成的命题(Propositions):
OpenAI 是一家人工智能研究机构。
OpenAI 成立于 2015 年。
OpenAI 推出了 GPT 系列模型。
GPT-4 是 OpenAI 推出的模型。
GPT-4 于 2023 年发布。
Elon Musk 是 OpenAI 的共同创始人。
Sam Altman 是 OpenAI 的共同创始人。
OpenAI 的总部位于旧金山。
13.文图结合的多模态检索
🧠 Multimodal RAG 系统的工作流程:
步骤 1:文本处理
从 PDF 等文档中提取普通文本
使用标准 chunking + embedding 流程生成语义向量
步骤 2:图像处理与字幕生成
提取文档中的图像(包括图表、插图、结构图等)
利用 OpenAI Vision 模型 生成每张图的图像字幕(caption)
示例生成字幕:
图像:流程图
Caption:这是一张显示模型训练步骤的流程图,包含数据输入、模型计算和输出评估等阶段。步骤 3:整合图文内容
将图像字幕作为与普通文本并列的语义块
一并添加进向量检索数据库(如用 NumPy 实现的简单 VectorStore)
步骤 4:查询检索与响应生成
查询时,文本与视觉字幕被共同检索
检索结果用于构建上下文,传入 LLM 生成回答
检索时如何处理混合向量排序
🧠 检索排序的核心步骤:
1. 统一嵌入向量空间
文本内容(如普通段落)
图像字幕(caption)
→ 都会使用同一嵌入模型(如 OpenAI text embedding 或 vision caption embedding)生成等长语义向量。2. 相似度计算
similarity=A⋅B∣∣A∣∣⋅∣∣B∣∣\text{similarity} = \frac{A \cdot B}{||A|| \cdot ||B||}similarity=∣∣A∣∣⋅∣∣B∣∣A⋅B
使用标准的余弦相似度公式对 query 向量与所有内容向量进行比较:
其中
A
是查询的向量,B
是每一条内容(文本或图像字幕)的向量。3. 相似度排序
所有内容按相似度从高到低排序
选出前
k
条最相关项(混合结果,可能既有文字段也有图像字幕)
14.结合向量检索和关键词检索(如 BM25)
方法通过结合**向量检索(语义匹配)与关键词检索(BM25)**两种机制,实现了更准确、更全面的文档召回效果。
🧠 核心流程设计:
1. 文档预处理
文本从 PDF 提取,分成块(chunks)
为每个块:
生成向量嵌入
添加到关键词搜索索引(如 BM25)
2. 查询执行
用户查询被同时送入两条通路:
语义通路:生成向量 → 计算与向量库中内容的相似度
关键词通路:执行 BM25 排名 → 获取关键词匹配得分
3. 分数融合(融合策略)
对两种得分进行 标准化(归一化)
使用可调参数融合两个得分:
final_score = α * vector_score + β * bm25_score
α
,β
可设为默认如 0.5:0.5,或动态调整(如查询分类后适配)4. 综合排序 + 内容选择
按融合得分排序
选出前
k
个块作为上下文调用 LLM 生成回答
15.构建知识图谱并遍历相关概念
。
🧠 Graph RAG 的主要能力:
能力 描述 💡 概念连接 构建概念之间的边(如 A 属于 B、A 引用 B) 🔄 图遍历检索 查询时不仅找最相关块,还能沿关系扩展更多上下文 🎯 多跳问答支持 回答需要整合多个相互关联信息的复杂问题 🔍 可解释路径 可视化哪些节点被访问过,模型“如何得出结论”
🔧 系统流程:
步骤 1:PDF 文本提取
提取语料中的实体和命题(chunk、句子)
步骤 2:构建知识图谱
节点:实体、概念、事实命题
边:例如 “属于”、“引用”、“等价”、“影响”、“依赖”
方式:可用 LLM 自动抽取三元组生成图结构(如:
(GPT-4, uses, Transformer)
)步骤 3:嵌入生成(实体/节点)
每个节点生成 embedding,加入图向量索引
步骤 4:图遍历+检索(查询处理)
查询先被向量匹配到节点
然后通过图结构遍历(例如邻接节点、2跳路径)扩展更多上下文
步骤 5:构建上下文 → 调用 LLM 生成回答
汇总图中路径相关节点内容作为提示语
16.构建层级索引(概要+详细内容)
:
🧠 Hierarchical RAG 的主要能力:
能力 描述 🧱 分层结构构建 将长文档按“章节-段落-句子”层级组织嵌入 🔍 分层级检索 先检索 coarse-grain(如章节),再细化到 fine-grain(如句子) 🧠 多粒度上下文融合 多层检索内容拼接成最终上下文,引导模型回答更精准 📈 层级策略比较 可对比 flat RAG 与 hierarchical RAG 的表现差异
🔧 系统流程:
步骤 1:环境与依赖初始化
导入必要库(如
openai
,numpy
,scikit-learn
, 自定义 embedding 工具等)设置 API 密钥与参数配置
步骤 2:文档分层结构构建
按章节 → 段落 → 句子方式处理文档文本
每层生成对应的嵌入(可能用 chunking + embedding)
步骤 3:建立分层索引结构
为每个层级构建嵌入索引(如章节向量库、句子向量库)
可选地使用简易向量匹配器(或 FAISS)
步骤 4:分层检索流程
查询首先匹配 coarse 层级(如最相关的章节段落)
在 coarse 匹配范围内再精细检索句子级内容
将 coarse+fine 检索到的内容拼接,作为提示词上下文
步骤 5:回答生成(调用 LLM)
将最终拼接的上下文与原始 query 输入到语言模型(如 GPT)
生成自然语言回答
步骤 6:效果对比与评估
可对比:
Flat RAG(直接所有句子为单层索引)
Hierarchical RAG(两层检索、分块更优)
输出指标可能包括准确率、BLEU、相似度等
17.使用假设文档向量来改进语义四配
🧠 HyDE RAG 的主要能力:
能力 描述 🔮 假设文档生成(HyDE) 查询后先调用 LLM 生成“假设答案”,再用其作为检索向量,提升检索准确性 🧠 向量检索增强生成(RAG) 结合向量数据库与语言模型,实现检索增强回答 🧪 RAG 对比实验 对比 HyDE-RAG 与标准-RAG 在响应质量上的差异 📊 可视化评估 支持对结果进行定量指标评估与可视化展示(如相似度、BLEU)
18. Corrective RAG,支持回退至 Web 搜索
:
🧠 CRAG(Chunked Retrieval-Augmented Generation) 的主要能力:
能力 描述 🧩 Chunk-Level 区块编码 将文本切分为小块(chunk),逐块嵌入 🎯 精准检索 查询向量与 chunk 嵌入匹配,提升召回精度 🏗️ 多文档检索支持 支持多来源、多文档的检索合并策略 🧪 可调 Chunk Size 实验 比较不同 chunk_size 设置下 RAG 表现变化 📊 召回率与生成评估 评估 chunk 粒度对检索质量和回答效果的影响
🔧 系统流程:
步骤 1:环境准备
导入依赖(如
openai
,sklearn
,numpy
等)设置 OpenAI Key 与默认参数
步骤 2:文档切块与嵌入生成
将长文档按
chunk_size
进行切分(如每 100 或 300 token 一块)每个 chunk 用嵌入模型编码成向量(如 OpenAI Embedding)
步骤 3:构建检索系统
所有 chunk 组织成向量数据库(如用 FAISS 或简单矩阵比对)
支持向量检索最相关的 Top-K chunk
步骤 4:RAG 响应生成
输入 query → 转成向量 → 检索最相关 chunk
将这些 chunk 作为上下文拼接到 prompt,送入 LLM → 生成回答
步骤 5:可变 Chunk Size 实验
试验 chunk_size = 64、128、256、512...
比较不同设置下的:
文本召回质量
LLM 回答准确率
生成长度、冗余度
步骤 6:指标评估与可视化
输出指标如 BLEU、精确率、召回率、F1
绘图展示 chunk_size 对效果的影响趋势
19.使用强化学习优化 RAG 检索结果质量
🧠 RAG with RL(基于强化学习优化的检索增强生成) 的主要能力:
能力 描述 🧠 RAG + 强化学习训练 将生成质量作为 reward,对模型生成策略进行优化 🎯 检索策略优化 通过 RL 学习更优的 chunk 选择或上下文构造方式 🧪 评估反馈驱动学习 利用回答质量指标作为强化学习的奖励信号 🤖 支持多策略对比 比较标准 RAG 与 RL 强化后的策略效果
🔧 系统流程:
步骤 1:基础环境与依赖加载
导入库(如
openai
,torch
,gym
,transformers
,numpy
等)设置 API Key、device、训练参数等
步骤 2:构建标准 RAG 模块
文本预处理、chunk 切分
嵌入生成(使用 Embedding API)
Top-K 检索实现(向量空间)
步骤 3:定义强化学习环境
自定义 RL 环境类(继承
gym.Env
)
状态(State):当前 query + 候选 chunk 向量
动作(Action):选择哪些 chunk 用作 context
奖励(Reward):基于生成答案的准确性、相关性评分
步骤 4:强化学习训练过程
使用策略梯度(Policy Gradient)等方法训练 Agent
多轮采样生成 → 根据反馈进行策略更新
Reward 可来自人工评分函数或自动指标(如 BLEU, ROUGE)
步骤 5:优化后策略生成回答
用训练好的 RL Policy 指导 chunk 选择与上下文组织
调用 LLM 生成最终回答 → 可与标准 RAG 策略做对比
步骤 6:性能评估与可视化
比较 RL-RAG 与原始 RAG 在:
答案准确率
生成质量指标(BLEU、ROUGE)
上下文长度压缩效率
可视化 reward 曲线、训练收敛过程、回答质量趋势