【人工智能】AI基础知识(第七节:RAG)

【人工智能】AI基础知识(第七节:RAG)

AI基础知识(第七节:RAG)

一. 引入问题

当 Agent 向大模型提问:"XXX公司最近有什么八卦新闻?"时,由于大模型无法获取到相关的私有或实时信息,它可能会产生"幻觉",并开始一本正经地胡说八道。为什么大模型会出现这种情况呢?主要原因在于,大模型是基于公开数据进行训练的,其知识存在截止时间。对于私有数据和最新的实时数据,模型尚未学习过。

neration(生成)三个英文单词的缩写。这三个词也恰好代表了 RAG 流程中的三个核心步骤。

二. 私有数据向量化

1)语义搜索

退商品,退货物,退东西他们都是意思相近的提示词,都绑定到退货这个词上。因为这些都是与退货意思相同的词语。而所谓的语义搜索就是指当用户输入意思相近的退东西退商品的时候,通过语义搜索最后都可以定位到【退货】这个词上。

2)向量

它是一组有序的数字。比方说现在有一个一维向量,它只包含(-2,-1,0,1)四个数字,那么他们在x轴上就是一个点;而二维向量就是(1,11,2)这些数字,他们对应了x和y两个轴,同样也是对应两个不同的点;当然还有三维向量甚至千维向量。使用向量表的目的和作用是什么呢,那之前说的二维向量来举例说,x轴可以理解为:是否是水果;y轴可以理解为:甜度比;那么苹果的向量坐标就是0.9,0.7;而鸭梨的向量坐标就是0.9,0.6;换个物品比如说钥匙,它的向量坐标就是0.0,0.0,因为它既不是水果,也没有甜度可言。通过一个余弦相似度的公式,计算出相应的范围,通过比对某一个或某几个维度上的坐标值接近的程度,来判断两个词之间是否强关联。

回到什么是向量,向量就是把很多词语或字它的很多特征都抽成每个维度上的对应的这些数字,向量可以解决语义搜索的问题。

3)向量化

第一步是进行切块,切块的目的主要就是将数据按照一段一段的分解开,然后为每一个段都增加索引值,从而增加了检索时的效率。切块完成后再对每一个快中的数据进行向量化。最后将向量化的数据存储到数据库当中。

三. RAG的流程说明

大模型是基于公开数据,对于公开数据它是完成过训练的,对于私有数据需要我们给他提供学习,这个时候就需要使用RAG流程。

1)如何让大模型知道要进行RAG

工具上要获取公司内部的八卦信息,在遇到有新人入职等时候使用。

Agent将某公司的八卦信息以及使用的工具告诉大模型,大模型根据场景(比如新人入职时),开始实施RAG

2)RAG真正的流程

1.将提示词向量化。其实整个向量化过程是需要很多步骤的,第一步切分,第二步Token化,第三步转化为Token ID,第四步转化为向量,第五步Transform。

2.检索:提示词向量与向量化数据库的向量进行余弦相似度的一个计算,然后把TopK的数据给找出来。

3.增强:将TopK的数据+提示词进行重新整理,就是增强的过程。

4.生成:大模型基于增强的提示词生成答案。

以下是RAG(检索增强生成)的核心流程示意图:
#mermaid-svg-EFosow1SGSo4knzg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EFosow1SGSo4knzg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EFosow1SGSo4knzg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EFosow1SGSo4knzg .error-icon{fill:#552222;}#mermaid-svg-EFosow1SGSo4knzg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EFosow1SGSo4knzg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EFosow1SGSo4knzg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EFosow1SGSo4knzg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EFosow1SGSo4knzg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EFosow1SGSo4knzg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EFosow1SGSo4knzg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EFosow1SGSo4knzg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EFosow1SGSo4knzg .marker.cross{stroke:#333333;}#mermaid-svg-EFosow1SGSo4knzg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EFosow1SGSo4knzg p{margin:0;}#mermaid-svg-EFosow1SGSo4knzg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EFosow1SGSo4knzg .cluster-label text{fill:#333;}#mermaid-svg-EFosow1SGSo4knzg .cluster-label span{color:#333;}#mermaid-svg-EFosow1SGSo4knzg .cluster-label span p{background-color:transparent;}#mermaid-svg-EFosow1SGSo4knzg .label text,#mermaid-svg-EFosow1SGSo4knzg span{fill:#333;color:#333;}#mermaid-svg-EFosow1SGSo4knzg .node rect,#mermaid-svg-EFosow1SGSo4knzg .node circle,#mermaid-svg-EFosow1SGSo4knzg .node ellipse,#mermaid-svg-EFosow1SGSo4knzg .node polygon,#mermaid-svg-EFosow1SGSo4knzg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EFosow1SGSo4knzg .rough-node .label text,#mermaid-svg-EFosow1SGSo4knzg .node .label text,#mermaid-svg-EFosow1SGSo4knzg .image-shape .label,#mermaid-svg-EFosow1SGSo4knzg .icon-shape .label{text-anchor:middle;}#mermaid-svg-EFosow1SGSo4knzg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EFosow1SGSo4knzg .rough-node .label,#mermaid-svg-EFosow1SGSo4knzg .node .label,#mermaid-svg-EFosow1SGSo4knzg .image-shape .label,#mermaid-svg-EFosow1SGSo4knzg .icon-shape .label{text-align:center;}#mermaid-svg-EFosow1SGSo4knzg .node.clickable{cursor:pointer;}#mermaid-svg-EFosow1SGSo4knzg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EFosow1SGSo4knzg .arrowheadPath{fill:#333333;}#mermaid-svg-EFosow1SGSo4knzg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EFosow1SGSo4knzg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EFosow1SGSo4knzg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EFosow1SGSo4knzg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EFosow1SGSo4knzg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EFosow1SGSo4knzg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EFosow1SGSo4knzg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EFosow1SGSo4knzg .cluster text{fill:#333;}#mermaid-svg-EFosow1SGSo4knzg .cluster span{color:#333;}#mermaid-svg-EFosow1SGSo4knzg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EFosow1SGSo4knzg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EFosow1SGSo4knzg rect.text{fill:none;stroke-width:0;}#mermaid-svg-EFosow1SGSo4knzg .icon-shape,#mermaid-svg-EFosow1SGSo4knzg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EFosow1SGSo4knzg .icon-shape p,#mermaid-svg-EFosow1SGSo4knzg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EFosow1SGSo4knzg .icon-shape .label rect,#mermaid-svg-EFosow1SGSo4knzg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EFosow1SGSo4knzg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EFosow1SGSo4knzg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EFosow1SGSo4knzg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户提问

(提示词)

  1. 向量化

切分 → Token化 → Token ID → 向量 → Transform
2. 检索

计算余弦相似度,从向量库中找出TopK相关片段
3. 增强

TopK片段 + 原始提示词 → 增强后的提示词
4. 生成

大模型基于增强提示词生成最终答案
答案返回给用户

相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
tmlx3I0812 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
Mininglamp_27182 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native
硅谷秋水2 小时前
World Engine:迈向自动驾驶的后训练时代
人工智能·深度学习·机器学习·计算机视觉·语言模型·自动驾驶
RobinDevNotes2 小时前
PentAGI:全自主 AI 渗透测试代理系统
人工智能
明理的信封2 小时前
AI 基础设施的“去 Python 化“:Rust 与 C# 的两条替代路径
人工智能·python·rust
优橙教育2 小时前
Rano AI智能体技术架构深度解析
人工智能
Tiansan66663 小时前
郑州AI问答推广公司:如何用AI提升转化率
人工智能·郑州ai问答推广公司
龙亘川3 小时前
开源本地 AI 智能体网关 OpenClaw 深度实践:架构解析、全场景部署与自动化落地指南
人工智能·架构·开源·openclaw