RAG知识分享

news2025/1/19 14:37:22

文章目录

    • 博客详细讲解视频
    • 点击查看高清脑图
  • 1.为什么要做RAG
    • 1.1. 解决幻觉问题
      • 1.1.1 直接输入问题
      • 1.1.2. 问题 + 相关知识
  • 2. 什么是RAG
    • 2.1. 基本概念
    • 2.2. 基本RAG方法
      • 2.2.1. 知识预处理
      • 2.2.2. 知识检索
      • 2.2.3. 答案生成
  • 3. RAG 与 Long Context
    • 3.1. Long Context
    • 3.2. RAG 与Long Context
    • 3.3 RAG对比Long Context的优势
  • 4. 高级RAG
    • 4.1. 借助模型处理
      • 4.1.1. 优化用户问题
      • 4.1.2. 优化待检索知识
    • 4.2. 不借助模型
      • 4.2.1 Small to Big
    • 4.3. 优化检索方法
      • 4.3.1 混合检索
        • 向量检索的优势
        • 向量检索的劣势
        • 关键词搜索的优势
      • 4.3.2. 重排
        • RRF (Reciprocal Rank Fusion, 倒数排序融合)
        • ReRank 模型
  • 5. FastGPT RAG实战
    • 5.1. 创建知识库
      • 5.1.1. 直接分块
      • 5.1.2. QA拆分
      • 5.1.3. CSV 模板文件导入
      • 5.1.4. 混合检索
    • 5.2. 创建应用
      • 5.2.1. 提示词工程

博客详细讲解视频

点击查看高清脑图

在这里插入图片描述

1.为什么要做RAG

1.1. 解决幻觉问题

1.1.1 直接输入问题

小米汽车的型号

1.1.2. 问题 + 相关知识

请把引号内的内容作为你的知识
"3月28日晚7点,在小米汽车发布上,小米集团董事长雷军宣布,小米SU7正式发布,标准版售价21.59万元,雷军表示,这个价格小米是亏钱的; 小米SU7 Pro 版(后驱超长续航高阶智驾版)售价24.59万元; 小米SU7 Max版 (高性能四驱超长续航高阶智驾版)售价29.99万元。"
我的问题是:小米汽车的型号

2. 什么是RAG

2.1. 基本概念

  • Retrieval-Augmented Generation,检索增强生成
  • 把"问题 + 相关知识"一起输入到模型,模型根据相关知识生成答案,避免幻觉

2.2. 基本RAG方法

2.2.1. 知识预处理

  1. 解析知识库文件为文本,例如pdf、word、xlsx、txt
  2. 长文本分割为文本块
  3. 文本块转为语义向量 egg:[0.1234, 0.221, …, 0.1552] 768, 1024, 1536
  4. 保存语义向量到向量数据库
测试语义相关度
几岁了 & 今年多大了

2.2.2. 知识检索

  1. 用户问题转为语义向量
  2. 向量搜索: 计算余弦相似度,即向量内积 [0.1234, 0.221, …, 0.1552] · [0.2, 0.3, …, 0.2] = 0.1234 * 0.2 + 0.221 * 0.3 + … + 0.1552 * 0.2 = x . x∈[0, 1]
  3. 筛选出topK 或 余弦相似度 大于某个阈值的文本块

2.2.3. 答案生成

  1. 使用提示词模板组合问题与相关知识
请把引号内的内容作为你的知识
"{{knowledge}}"
我的问题: {{question}}
  1. 发送给大模型得到答案

3. RAG 与 Long Context

3.1. Long Context

超长文本输入

  1. gpt-4-turbo 128K文本输入
  2. kimi 200万文本输
  3. 通义千问 1000万文本输入

3.2. RAG 与Long Context

3.3 RAG对比Long Context的优势

  1. 成本更低
  2. 性能更高
  3. 数据量无限
  4. 数据多样性高

4. 高级RAG

4.1. 借助模型处理

4.1.1. 优化用户问题

  • 使用对话背景或历史对话补全用户问题
  • 拆分用户问题为多个问题
测试补全用户问题与问题拆分
问题:价格

4.1.2. 优化待检索知识

  • QA拆分: 文本分块,使用模型根据文本块生成QA问答对
  • 摘要:文本分块,使用模型总结一下文本块内容

4.2. 不借助模型

4.2.1 Small to Big


把文本块中的一句话向量化,召回的时候把这句话以及这句话前后附近的句子同时召回。或者召回的时候把这个句子整个段落都召回。

4.3. 优化检索方法

4.3.1 混合检索

向量检索的优势

除了能够实现复杂语义的文本查找,向量检索还有其他的优势:

  • 相近语义理解(如老鼠/捕鼠器/奶酪,谷歌/必应/搜索引擎)
  • 多语言理解(跨语言理解,如输入中文匹配英文)
  • 多模态理解(支持文本、图像、音视频等的相似匹配)
  • 容错性(处理拼写错误、模糊的描述)
向量检索的劣势

虽然向量检索在以上情景中具有明显优势,但有某些情况效果不佳。比如:

  • 搜索一个人或物体的名字(例如,伊隆·马斯克,iPhone 15)
  • 搜索缩写词或短语(例如,RAG,RLHF)
  • 搜索 ID(例如,gpt-3.5-turbo,titan-xlarge-v1.01)
关键词搜索的优势

而上面这些的缺点恰恰都是传统关键词搜索的优势所在,传统关键词搜索擅长:

  • 精确匹配(如产品名称、姓名、产品编号)
  • 少量字符的匹配(通过少量字符进行向量检索时效果非常不好,但很多用户恰恰习惯只输入几个关键词)
  • 倾向低频词汇的匹配(低频词汇往往承载了语言中的重要意义,比如“你想跟我去喝咖啡吗?”这句话中的分词,“喝”“咖啡”会比“你”“吗”在句子中承载更重要的含义)

参考资料:引入混合检索(Hybrid Search)和重排序(Rerank)改进 RAG 系统召回效果

4.3.2. 重排

RRF (Reciprocal Rank Fusion, 倒数排序融合)
RRF(Reciprocal Rank Fusion)算法和rerank算法都是用于改进搜索结果排序的方法。
RRF是一种将具有不同相关性指标的多个结果集组合成单个结果集的方法。这种方法的优势在于不需要调优,不同的相关性指标也不必相互关联即可获得高质量的结果。RRF算法的工作原理是,对于每个查询,如果文档在结果集中,那么它的分数就会增加1.0 / ( k + rank( result(q), d ) ),其中k是一个排名常数,rank( result(q), d )是文档在结果集中的排名。这样,即使你不了解不同方法中排名分数的确切分布,RRF也能提供出色的排序方法[1]。
例如,假设我们有两个查询,每个查询返回的结果集如下:
● 查询1的结果集:{文档A: 1, 文档B: 2, 文档C: 3}
● 查询2的结果集:{文档B: 1, 文档A: 2, 文档C: 3}
使用RRF算法,我们可以计算每个文档的分数:
● 文档A的分数:1.0 / (60 + 1) + 1.0 / (60 + 2) = 0.016 + 0.016 = 0.032
● 文档B的分数:1.0 / (60 + 2) + 1.0 / (60 + 1) = 0.016 + 0.016 = 0.032
● 文档C的分数:1.0 / (60 + 3) + 1.0 / (60 + 3) = 0.015 + 0.015 = 0.03
因此,最终的排名结果是:文档A,文档B,文档C。
Rerank算法则是在初步排序结果的基础上,对前N个结果进行重新排序。这通常是因为初步排序可能使用了一些快速但不够精确的方法(如ANN等),而rerank阶段则可以使用更精确的算法进行排序。例如,我们可以先使用某种快速的方法获取前30个结果,然后使用一种更精确的方法(如一一计算打分的方式)对这30个结果进行重新排序[2][4]。
例如,假设我们有一个初步排序的结果集:{商品A: 0.9, 商品B: 0.8, 商品C: 0.7}。然后我们使用一个更精确的模型进行rerank,得到的新的打分可能是:{商品A: 0.85, 商品B: 0.9, 商品C: 0.8}。因此,rerank后的结果集是:{商品B, 商品C, 商品A}。
总的来说,RRF和rerank都是用于改进搜索结果排序的方法,但它们的工作方式和使用场景有所不同。RRF是通过合并多个结果集来改进排序,而rerank则是在初步排序的基础上进行二次排序以提高精度。
(ChatGPT回答)
ReRank 模型
  • Say Goodbye to Irrelevant Search Results: Cohere Rerank Is Here
  • Reranker API
  • bge-reranker
rerank模型的作用并不仅仅是重复向量化语义检索的功能,它还有几个关键的作用,使得在检索流程的最后阶段使用它是有价值的:
更深层次的分析:尽管rerank模型也是基于向量化的方法,但它通常能进行更深层次、更复杂的分析。例如,它可能会考虑查询和文档之间的微妙关系、上下文的细节、以及特定领域的知识,这超出了初步向量化语义检索的能力范围。
整合多种信号:Rerank模型可能会整合初步检索阶段未考虑的多种信号,如文档的新颖性、可靠性、用户行为数据等,从而提供一个更全面的评估。
优化用户体验:Rerank模型可以根据用户的具体需求和偏好进行调整,以优化用户体验。例如,它可以根据用户的历史交互对结果进行个性化调整。
处理多样性和公平性问题:在rerank阶段,可以采取措施确保结果的多样性和公平性,例如防止某一来源的文档过度占据顶部位置。
实时反馈和学习:Rerank模型可以利用用户的即时反馈(如点击率)来实时调整排序策略,更好地适应用户的当前需求。
总的来说,rerank阶段的目的不仅仅是再次评估文档的相关性,而是在初步检索的基础上提供更精细、更个性化、更符合用户需求的排序。这是对初步向量化语义检索的一个重要补充,而不是简单的重复。
(ChatGPT回答)

5. FastGPT RAG实战

5.1. 创建知识库

5.1.1. 直接分块

5.1.2. QA拆分

5.1.3. CSV 模板文件导入

indexcontent
直接分块文本:结合人工智能的演进历程,AIGC的发展大致可以分为三个阶段,即:早期萌芽阶段(20世纪50年代至90年代中期)、沉淀积累阶段(20世纪90年代中期至21世纪10年代中期),以及快速发展展阶段(21世纪10年代中期至今)。
问题:AIGC发展分为几个阶段?早期萌芽阶段(20世纪50年代至90年代中期)、沉淀积累阶段(20世纪90年代中期至21世纪10年代中期)、快速发展展阶段(21世纪10年代中期至今)
摘要:AIGC发展的阶段早期萌芽阶段(20世纪50年代至90年代中期)、沉淀积累阶段(20世纪90年代中期至21世纪10年代中期)、快速发展展阶段(21世纪10年代中期至今)

5.1.4. 混合检索

5.2. 创建应用

5.2.1. 提示词工程

  1. 系统提示词
  2. 知识库模板
Use the content within the  tags as your knowledge:
{{quote}}
Answer requirements:
- If you are unsure of the answer, you need to clarify.
- If the user's question is not related to your knowledge, please say you don't know.
- Avoid mentioning that your knowledge comes from the data.
- Keep your answer consistent with the description in the data.
- Use Markdown syntax to optimize the formatting of your answer.
- Answer in Chinese.
Question: {{question}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1572004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你为什么选择程序员这个职业?

注意,今天的这篇文章,我只是对程序员这份工作所需要面对的问题挑选一些有意思的话题讲讲我的理解,并不是对程序员的职业规划进行分享。本文分为入行前和入行后两个部分,分别聊聊。 入行前 所谓入行前,其实就是指还是学…

力扣面试150: O(1) 时间插入、删除和获取随机元素 HashMap结合数组

Problem: 380. O(1) 时间插入、删除和获取随机元素 文章目录 思路复杂度Code 思路 👩‍🏫 三叶题解 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( n ) O(n) O(n) Code class RandomizedSet {static int[] nums new int[200_010];//存…

RabbitMQ小记

参考书籍:朱忠华的《RabbitMQ实战指南》 一、基础概念 1.Exchange 1.1 创建方法的参数,exchangeDeclare() exchange:交换器的名称type:交换器的类型durable:是否持久化,true代表持久化。(持…

iperf图形化打流工具JPerf2.0使用教程(1):相关设置介绍

0 前言 iperf是一个很常用的网络性能测试工具,经常来进行打流测试,用来查看丢包率、抖动时间等网络通信情况,但它是使用命令行操作的,使用起来不太友好。本文介绍基于iperf的图形化操作工具JPerf2.0。 1 JPerf2.0的客户端和服务…

蓝桥杯速成5-AD/DA模数转换

一、原理图 上图可知该芯片使用的是iic时序,而不是51单片机的xpt2046时序,iic我们都很熟悉了吧 并且大赛还提供了我们iic底层驱动代码 左上角有AIN0-4四个转换输入通道,和AOUT一个输出通道,由控制字节选择 地址字节:0x…

Stable Diffusion本地部署教程

Stable Diffusion本地部署的步骤一般包括准备环境、下载Stable Diffusion模型和依赖库、配置运行参数等。下面是一个通用的教程,用以在计算机上本地部署Stable Diffusion。 准备环境 1. 确保硬件满足最低要求: - 一块NVIDIA GPU,至少4GB…

LLMOps快速入门,轻松开发部署大语言模型

大家好,如今我们能够与ChatGPT进行轻松互动:只需输入提示,按下回车,就能迅速得到回应。然而,这个无缝互动的底层,是一系列复杂而有序的自动执行步骤,即大型语言模型运营(LLMOps&…

【数据分析面试】11. 计算账户关闭率(SQL:评估不同查询方法的性能效率)

题目 给定一个账户状态表,编写一个查询以获取在2019年12月31日活跃并在2020年1月1日关闭的账户所占的百分比,以及在2019年12月31日活跃的总账户数。每个账户只有一条每日记录,显示其在当天结束时的状态。 注意:将结果四舍五入到…

在同一个局域网如何共享打印机和文件

1.在连接了打印机的主机上设置 1.1启用windows共享 打开网络与共享中心,点击“更改高级共享设置” 选择: “启用网络发现”“启用文件和打印机共享”“启用共享以便可以访问网络的用户可以读取和写入公用文件夹中的文件” 打开控制面板,选…

STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式,生成代码四、MDK打开生成项目,编写HAL库的GPIO输出代码五、运行仿真程序,调试代码 一、功能需求分析 在完成开发环境搭建之后,开始使用STM32GP…

python标准数据类型--列表常用方法

在Python中,列表(List)是一种非常常用的数据类型,用于存储一组有序的元素。Python提供了许多内置方法来操作列表,使得对列表的处理变得非常灵活和便捷。在本篇博客中,我们将介绍一些常用的列表方法&#xf…

Python | Leetcode Python题解之第8题字符串转换整数atoi

题目: 题解: INT_MAX 2 ** 31 - 1 INT_MIN -2 ** 31class Automaton:def __init__(self):self.state startself.sign 1self.ans 0self.table {start: [start, signed, in_number, end],signed: [end, end, in_number, end],in_number: [end, end,…

基于Java+SpringBoot+vue3点餐/外卖管理系统设计与实现

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

linux 安装 pptp 协议

注意:目前iOS已不支持该协议 yum -y install ppp wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/pptpd-1.4.0-2.el7.x86_64.rpm yum -y install pptpd-1.4.0-2.el7.x86_64.rpm vi /etc/pptpd.conf 去除 localip 和 remoteip的注释 …

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题? 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

阿里云2核2G服务器租用价格,真便宜

阿里云2核2G服务器配置优惠价格61元一年和99元一年,61元是轻量应用服务器2核2G3M带宽、50G高效云盘;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large,2核2G、3M固定带宽、40G ESSD entry系统盘,阿里云活动链接 aliyunfuwuqi.…

真--开源个人收款系统方案--部署方案

继上文:真--个人收款系统方案,今天主要推出部署方案 1.下载源码 首先需要下载源码,源码地址:PayServer: 个人收款系统方案 - Gitee.com 并且pip下载依赖库: Flask2.5.1 Flask-Cors3.0.10 gevent23.6.0 websockets10.9 urllib31.26.1 2.修改配置 路径下有两个py文件&#xf…

【Frida】【Android】09_爬虫之Socket

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…

【Java网络编程】HTTPS协议

HTTPS协议 由于HTTP协议是采用明文传输的方式,因此带来了很大的数据安全隐患,所以在最近几年的时间内,大部分平台都采用了HTTPS逐渐取代了HTTP,但HTTPS并不是一种全新的协议,而是建立在HTTP协议的基础之上&#xff0c…