RAG知识分享

文章目录

  • 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}}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(2024,超分辨率,膨胀卷积和低通滤波,SD)FouriScale:免训练高分辨率图像合成的频率视角

FouriScale: A Frequency Perspective on Training-Free High-Resolution Image Synthesis 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 相关工作 2.2 通过扩散模型进行…

【攻防世界】ics-05

php://filter 伪协议查看源码 preg_replace 函数漏洞 1.获取网页源代码。多点点界面,发现点云平台设备维护中心时,页面发生变化。 /?pageindex 输入什么显示什么,有回显。 用php://filter读取网页源代码 ?pagephp://filter/readconvert.…

PC版复古珠宝饰品网站模板 基于pbootcms的首饰类源码下载

PbootCMS复古珠宝饰品网站模板:PCWAP双端同步,数据即时共享,轻松打造专业饰品首饰平台 本模板基于PbootCMS内核开发,专为饰品首饰网站、复古珠宝饰品网站等企业量身定制。同时,其他行业同样适用,只需替换文…

【PostgreSQL】技术传承:使用Docker快速部署PostgreSQL数据库

前言 PostgreSQL的重要贡献者Simon Riggs因一起坠机事故不幸离世。Simon Riggs是英国著名的软件与服务领导者,也是PostgreSQL的主要开发者和贡献者。事故发生在英国当地时间3月26日13:41分,当时他驾驶的私人通用航空Cirrus SR22飞机在英国达克斯福德机场…

SpringBoot整合Netty整合WebSocket-带参认证

文章目录 一. VectorNettyApplication启动类配置二.WebSocketServerBoot初始化服务端Netty三. WebsocketServerChannelInitializer初始化服务端Netty读写处理器四.initParamHandler处理器-去参websocket识别五.MessageHandler核心业务处理类-采用工厂策略模式5.1 策略上下文 六…

Thinkphp5萤火商城B2C小程序源码

源码介绍 Thinkphp5萤火商城B2C小程序源码,是一款开源的电商系统,为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发,执行效率、扩展性、稳定性值得信赖。 环境要求 Nginx/Apache/IIS PHP5.4 MySQL5.1 建议使用环境&#xff…

代码随想录第三十天 | 回溯问题P6 | ● 332● 51● 37● 总结

332.重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK…

docker从入门到熟悉

一、什么是docker? Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付…

11-1(2)-CSS 背景+CSS 精灵图

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 一、CSS 背景1 背景颜色2 背景色半透明3 背景图片4 背景平铺5 背景图片位置6 …

LCD屏幕mmap显示

目录 前言 一.LCD显示 二.LCD颜色显示 2.1 直接显示 2.2 mmap映射显示 前言 mmap是一种内存映射文件的方法,它允许将文件或其它对象映射到进程的地址空间。 使用mmap映射函数进行映射显示,与屏幕普通直接显示相比有很大的优势 一.LCD显示基础 像素、分辨…

2. 如何让mybatis-plus的逻辑删除注解@TableLogic临时失效

文章目录 如何让mybatis-plus的逻辑删除注解TableLogic临时失效1. 场景复现1.1 controller代码1.2 service层代码1.3 entity代码 2. 问题分析3. 解决方案3.1 说明3.2 核心代码3.3 service方法对应修改为3.4 运行结果 如何让mybatis-plus的逻辑删除注解TableLogic临时失效 1. 场…

数学矩阵GCD和lCM(详解)

矩阵乘法 知阵乘法是《线性代数》中的基础内容,但在考察数学的算法题中也会出现。 本节我们学习基础的矩阵乘法规则。 每个矩阵会有一个行数和一个列数,只有当相乘的两个矩阵的左矩阵的列数等于右矩阵的行数 时,才能相乘,否则不允…

移动Web学习05-移动端适配Less预处理器

7、移动端适配 7.1、什么是适配? 简单理解就是、同一个网页,在不同屏幕分辨率的设备下、显示还是一样的,你可以理解为、网页当中的图片,盒子之间的距离、文字的大小、随着屏幕分辨率的变化而变化 前面我们学习了flex布局的方式…

关系型数据库与非关系型数据库、Redis数据库

相比于其他的内存/缓存数据库,redis可以方便的实现持久化的功能(保存至磁盘中) 一、关系数据库与非关系型数据库 1.1 关系型数据库 一个结构化的数据库,创建在关系模型基础上一般面向于记录 SQL语句 (标准数据查询语言) 就是一种…

二叉树学习

树 树是n个结点的有限集合,当n0时为空树,在任意一颗非空的树中,有且只有一个特定的称为根的结点,当n>1时,其余结点又可以分为m个不相交的有限集,其中每一个集合又是一棵树,并且称为根的子树…

深度学习方法;乳腺癌分类

乳腺癌的类型很多,但大多数常见的是浸润性导管癌、导管原位癌和浸润性小叶癌。浸润性导管癌(IDC)是最常见的乳腺癌类型。这些都是恶性肿瘤的亚型。大约80%的乳腺癌是浸润性导管癌(IDC),它起源于乳腺的乳管。 浸润性是指癌症已经“侵袭”或扩散到周围的乳…

c# wpf template itemtemplate+dataGrid

1.概要 2.代码 <Window x:Class"WpfApp2.Window8"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

《UE5_C++多人TPS完整教程》学习笔记30 ——《P31 摄像机和弹簧臂(Camera And Spring Arm)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P31 摄像机和弹簧臂&#xff08;Camera And Spring Arm&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

梯度下降算法(Gradient Descent)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法引言 梯度下降算法&#xff0c;这个在机器学习中非常常见的算法&#xff0c;可以用下山的例子来形象地解释。想象一下&#xff0c;你在一座…