[RAG] 基础知识

news/2025/10/4 18:16:35/文章来源:https://www.cnblogs.com/Answer1215/p/19125802

RAG基础知识

基本介绍

RAG,全称 Retrieval-Augmented Generation,中文:检索增强生成

核心思想:为大模型补充来自于外部的相关数据与上下文,从而帮助大模型生成更丰富、更准确、更可靠的内容。

也就是 临时给大模型外挂一个知识库

image-20250528091104556

解决的问题:

  1. 受限于已有知识库,无法快速新增语料信息
  2. 重新训练大模型需要很长的时间

案例

开发一个在线的自助产品咨询工具,允许客户使用自然语言进行交互式的产品问答。

假设我们的产品是:香蕉手机

请介绍一下您公司这款产品(香蕉手机)与XX产品的不同之处

为了让客户有更好的体验,决定使用大模型来构造这样的咨询功能并将其嵌入到公司的官方网站。

如果你直接使用通用大模型,那么结果可能是:

  1. 大模型回答:我不知道什么是香蕉手机
  2. 大模型胡编乱造一段回答(大模型幻觉)

【RAG技术之前的解决方案】

将公司资料作为提示词的一部分,如下图:

image-20250528093201193

🤔 思考:存在什么问题?

如果需要外挂的知识库内容非常的多(例如一本小说几十万字),那么通过这种方式提供给大模型,大模型也不能精确的找到答案。

经典架构

简单的 RAG 应用从整体上分为两个阶段:

  1. 数据索引(Data Indexing)
  2. 数据查询(Query)
    1. 检索(Retrieval)
    2. 生成(Generation)

1. 数据索引

在做数据索引时,通常分为这么几个步骤:

  1. 加载文档
  2. 切分成 chunks
  3. 转化为向量嵌入
  4. 存入向量数据库
image-20250528101753546

切分成chunks

对输入的文档进行分割,分割成一个一个知识块(Chunk),从而为后续嵌入做准备。

  1. 语义结构维度:强调的是语义完整性,防止模型拿到“断句、不完整”的上下文。

    可以按照句子的粒度进行切割,将每一段文本按句号、问号、叹号等 标点符号 分割。

    原文

    ChatGPT 是由 OpenAI 开发的大语言模型。它基于 Transformer 架构,具有强大的语言理解和生成能力。
    

    切割后

    ChatGPT 是由 OpenAI 开发的大语言模型。
    
    它基于 Transformer 架构,具有强大的语言理解和生成能力。
    
  2. 实现策略维度:满足向量模型有最大词元限制,比如 OpenAI embedding 最大约 8192 词元数。

    1. 固定长度字符切分:每 N 字符为一段,适合规则性较强的文档
    2. 词元切分:每 N 个词元切一段,兼容模型的词元数限制

上面这两个策略可以组合着来使用。

转为向量

将每个 chunk 转换为一个“高维向量”,用来表达其语义。

每个向量通常是一个长度为 1536 或 768 的浮点数数组,例如:

[0.112, -0.045, 0.203, ..., 0.087]  // 一个 chunk 的语义向量

存入向量数据库

一般会存储在功能全面的 向量数据库 里面,向量数据库会提供强大的向量检索算法与管理接口,这样可以很方便地对输入问题进行 语义检索

常见向量数据库:

向量库 特点
Supabase PostgreSQL + pgvector 扩展
Weaviate 云服务 + 本地部署均可
Pinecone 高性能、易接入
Milvus 海量数据、高性能搜索
MemoryVectorStore 纯 JS 内存向量库(测试用)

2. 数据查询

数据查询阶段的两大核心阶段是 检索生成

image-20250528134121574

检索阶段

分为下面几个步骤:

  1. 将 Query(用户的问题) 转化为向量

  2. 在向量数据库中进行相似度检索(语义检索),相似度的检索,有几种方式

    1. 余弦相似度
    2. 欧氏距离
    3. 点积
  3. 为生成阶段准备检索结果

生成阶段

graph LRA[检索到的语义相关内容] --> B{构造Prompt}C[用户Query] --> BB --> D[调用LLM]D --> E[生成回答]E --> F[返回给用户]classDef process fill:#f9f,stroke:#333;classDef data fill:#bbf,stroke:#333;classDef output fill:#9f9,stroke:#333;class A,C data;class B,D,E process;class F output;

构造出来的提示词大致如下:

[系统提示]:
你是一个智能客服助手,请基于以下资料回答用户的问题。[资料内容]:
1. 本产品支持7天无理由退货。
2. 如存在质量问题,可申请退换货。
3. ...[用户问题]:
我买的这个产品坏了还能退吗?[你的回答]:

完整的流程

image-20250528094543784

-EOF-

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

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

相关文章

CF1408F Two Different

关键是要想到可以“借数”CF1408F Two Different 挺好的一道思维题。 手玩几个例子之后发现以下性质: 1、直接变的话,只能同时把 \(2^k\) 个数变成一样的,次数大概是 \(2^{k - 1} \times k\)。 2、零散的小堆可以向…

青岛住房和城乡建设部网站网站登录不了

在Cocos Creator中,脚本代码文件分为模块和插件两种方式: 模块一般就是项目的脚本,包含项目中创建的代码、引擎模块、第三方模块。 插件脚本,是指从 Cocos Creator 属性检查器中导入的插件,一般是引入第三方引入库文件…

区块链网站用vue.js做怎么样早8晚5双休的工作

TimeStamp 更新操作可能伴随数据冲突,我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组(byte[])类型的TimeStamp属性,对应到数据表中的rowvewsion类型字段,自动监控数据的…

数据结构 - 字典树 Trie

字典树(Trie)是一种树形数据结构,主要用于高效地存储和检索字符串集合。它通过利用字符串的公共前缀来节省存储空间,常用于词典查询、自动补全等场景。 1. 什么是字典树 字典树的每条边代表一个字符,从根节点到某…

激活函数实现

激活函数实现 1.1:创建激活函数工程目录 创建激活函数目录- src (存放源代码)- testbench (存放测试文件)- docs (存放文档)- lut_data (存放查找表数据)- python_utils (存放Python辅助脚本…

漏洞赏金入门指南:从零开始的实战方法论

本文详细介绍了漏洞赏金猎人的入门方法论,包括基础知识学习、时间分配策略、持续学习的重要性,以及如何保持动力和专注度。文章打破了"快速致富"的迷思,为初学者提供了切实可行的成长路径。漏洞赏金入门指…

网站建设数据库搭建电影爱好网

在使用svn的过程中,可能出现整个svn崩溃, 例如cleanup 失败的情况,类似于 这时可以下载本贴资源文件并解压。 或者直接访问网站 SQLite Download Page 进行下载 解压后得到 sqlite3.exe 放到发生问题的svn根目录的.svn路径下 右键呼出pow…

PMON failed to acquire latch 的报错及sqlplus / as sysdba 无法连接 - 详解

PMON failed to acquire latch 的报错及sqlplus / as sysdba 无法连接 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

【C++哲学】面向对象的三大特性之 多态 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025CSP-S模拟赛58 比赛总结

2025CSP-S模拟赛58T1 T2 T3 T4总分:;排名:。 不知道为什么又在无意义罚坐。真的是把最显然的那一档打完之后就啥也不会做了,啥也想不出来。

国外优秀的html5网站网站发展趋势

日志对于一些大一些的项目来说,可以在项目运行出现问题时更好的帮助 项目的维护人员快速的定位到问题出现的地方并且知道出现问题的原因, 并且日志也可以帮助程序员很好的进行项目的Debug,那么今天我就来实 现一个C编写的一个简单的日志功能。…

建设网官方网站工商执照查询官网

目录 一、SASL介绍 二、使用 SASL 进行身份验证 2.1 服务器到服务器的身份验证 2.2 客户端到服务器身份验证 三、验证功能 一、SASL介绍 默认情况下,ZooKeeper 不使用任何形式的身份验证并允许匿名连接。但是,它支持 Java 身份验证与授权服务(JAAS)…

精读C++设计模式20 —— 结构型设计模式:桥接模式 - 详解

精读C++设计模式20 —— 结构型设计模式:桥接模式 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

用纯.NET开发并制作一个智能桌面机器人(六):使用.NET开发一个跨平台功能完善的小智AI客户端

前言 前面几篇文章已经把机器人硬件控制部分的开发讲得差不多了,包括屏幕控制、舵机驱动、语音交互等功能。但是之前的外形太过简单,可动角度不够多,所以我就新改进了一个版本,叫VerdiBot(阿荫),详细视频介绍地…

潍坊网站开发公司wordpress伪原创设置

教程-上传应用公钥并获取支付宝公钥 1. 点击签名验签工具右下角的“上传公钥”会打开支付宝开放平台网页,输入账号登录。(建议使用IE或Chrome浏览器。) 2. 在“我的应用”中,选择要配置密钥的应用,点击“查看”。记录对应的APPID…

肥西县住房和城乡建设局网站台州网站制作开发

很久没写过php代码了,二开过程中笔记如下 注意事项 打开APP_DEBUG 关于建表 .在store进行开发,新建表的时候需要加上store_id字段 增加页面 前端页面 增加新的菜单,需要在router.config.js中增加对应的配置增加新的页面,需要…

Gateway-过滤器 - 教程

Gateway-过滤器 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

如何构建一个成交型网站响应式网站建设有哪些好处

一个有效的安全事件响应策略的关键组成部分有哪些?一个有效的安全事件响应策略包括四个关键组成部分,它们协同工作以确保对网络安全问题的快速和有效响应。 一个有效的安全事件响应策略的关键组成部分有哪些? 一个有效的安全事件响应策略包括…

公司建站系统企业网盘推荐

文章目录 一、简介二、OS认证三、口令认证四、remote_login_passwordfile 详解 一、简介 在数据库管理中,登录认证是确保数据库安全性的重要环节。Oracle数据库提供 了两种认证方式,一种是“操作系统认证”,一种是“口令文件认证&#xff0c…

深圳网站建设认准乐云犀牛云做网站推广怎么样

概述 在公司项目中使用到 wkhtmltopdf 转换PDF,由于 wkhtmltox-0.12.5 版本 echarts 图形虚线样式,需要升级 wkhtmltox-0.12.6 版本来解决。 官网地址 wkhtmltopdf :https://wkhtmltopdf.org/ windows 安装 下载流程及安装流程 进入官…