【人工智能】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. 生成

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

相关推荐
进击的横打5 分钟前
【人工智能】人与AI协作的四象限
人工智能
yyk3332411 分钟前
计算机视觉OpenCV中的FisherFace人脸识别
人工智能·opencv·计算机视觉
澳鹏Appen12 分钟前
AppenTalk | 当AI推理不再只是模型的事:Dan Roth谈智能体的真正边界
人工智能·大语言模型·智能体·大模型推理
Mr数据杨13 分钟前
二手车价格预测实战解析 从 Kaggle 回归赛题到可落地估价方案
人工智能·数据分析·kaggle竞赛
Zzj_tju15 分钟前
Embodied Agent 小环境:用状态日志解释成功、绕路与超时
人工智能·深度学习·机器学习·自然语言处理
微财经观圈33 分钟前
AI 3D生成角色怎样套用预设动作?自动绑骨与动作测试步骤
人工智能·3d
是翎44 分钟前
图解大语言模型部署
人工智能·驱动开发·深度学习·开源协议·imagen
joinwell521 小时前
写了“始终审批”,AI 为什么还是执行了?
人工智能
腾渊信息科技公司1 小时前
腾渊科技重磅出品——智能体交易信任架构实战:从KYA到可追溯审计的完整方案
人工智能·科技·aiagent·腾渊科技·腾渊信息科技
知几蜗牛1 小时前
AI写歌有了工程图:YuE2把旋律和和弦放回可编辑层
人工智能