当前位置: 首页 > news >正文

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.总结

  1. 复杂召回方式:使用问题扩展和递归融合
  2. 简单召回方式:直接检索相关文档并生成回答
  3. rerank:使用重排序提高检索质量
  4. 评估检索结果的精确率和召回率
  5. 平均精度均值
  6. 归一化折损累积增益 (NDCG)
  7. 创建测试数据集

    为了进行评估,需要创建一个测试数据集,包含问题和相关文档的标注。

 

其余的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 重排序初始检索结果

 

  1. 初始检索

    • 使用嵌入 + 余弦相似度进行向量召回,得到多个候选文本块。

  2. 文档评分

    • 用语言模型(如 GPT)评估每个候选块与查询的语义相关性,生成得分。

  3. 重新排序

    • 将得分结果排序,优先使用得分最高的文本块。

  4. 选择前 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)

  • 对最终输出质量进行打分(如准确性、完整性)


🧪 实验结构:

  1. PDF 提取与文本分块

  2. 嵌入生成 + 构建向量库

  3. 执行 self-RAG 流程(含五重评估模块)

  4. 对比传统 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):

  1. OpenAI 是一家人工智能研究机构。

  2. OpenAI 成立于 2015 年。

  3. OpenAI 推出了 GPT 系列模型。

  4. GPT-4 是 OpenAI 推出的模型。

  5. GPT-4 于 2023 年发布。

  6. Elon Musk 是 OpenAI 的共同创始人。

  7. Sam Altman 是 OpenAI 的共同创始人。

  8. 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. 相似度计算

  • 使用标准的余弦相似度公式对 query 向量与所有内容向量进行比较:

similarity=A⋅B∣∣A∣∣⋅∣∣B∣∣\text{similarity} = \frac{A \cdot B}{||A|| \cdot ||B||}similarity=∣∣A∣∣⋅∣∣B∣∣A⋅B​

其中 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 曲线、训练收敛过程、回答质量趋势

 

http://www.xdnf.cn/news/538093.html

相关文章:

  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】
  • C++寻位映射的奇幻密码:哈希
  • AtomicReference 和 volatile 的比较
  • C++--综合应用-演讲比赛项目
  • 让数据驱动增长更简单! ClkLog用户行为分析系统正式入驻GitCode
  • 【随手记】 Event Bus vs. Event Loop
  • 01、java方法
  • 【Python训练营打卡】day30 @浙大疏锦行
  • 盲盒APP开发——解锁盲盒经济无限可能
  • mapbox-gl强制请求需要accessToken的问题
  • Chromium 回调设计实战:BindOnce 与 BindRepeating 的最佳实践
  • 【css】【面试提问】css经典问题总结
  • Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
  • 嵌入式自学第二十四天
  • 整数的个数
  • Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
  • 理解前端工程化
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • java集成mqtt
  • 停等协议(Stop-and-Wait Protocol)
  • AI人工智能写作平台:AnKo助力内容创作变革!
  • 铅铋环境下应力腐蚀的疲劳试验装置
  • 什么业务需要用到waf
  • 20. 自动化测试框架开发之Excel配置文件的IO开发
  • 【monai 教程】transform之CropPad详解
  • 磁流体 磁性流体 磁液
  • 封装一个基于 WangEditor 的富文本编辑器组件(Vue 3 + TypeScript 实战)
  • UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings
  • Oracle 中 open_cursors 参数详解:原理、配置与性能测试