一、前言
近阶段,笔者落地了一个蛮深刻的项目,该项目通过RAG技术成功解决了一些问题。因此计划通过两篇文章跟大家分享有关RAG结合ToB Agent应用的探索与实践。
本篇文章,主要关于笔者对RAG(围绕Navie RAG)的些许理解。
二、RAG是什么?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与自然语言生成的技术,通过检索外部知识库增强文本生成能力。
听起来有点复杂,我们不妨从为什么需要用到RAG开始。
为什么需要用到RAG
随着近两年LLM(以下统称为大模型)不断地发展,大模型逐渐成为了我们日常办公场景中不可缺少的一环。但在使用过程中,会发现几个问题:
-
知识局限性问题:通用的大模型没有企业内部数据和用户数据,将私域数据上传第三方平台进行训练,存在着数据泄露的风险。从而导致大模型对一些内部数据无从学习,并不具备某一方面的知识,存在局限性。
-
幻觉问题:大模型底层的设计机制决定了它所生成的回答本质是基于概率而非既定事实的,导致只要大模型生成内容是符合它自己的语言逻辑的,就算内容与事实差了十万八千里,它也会毫不犹豫地输出。
-
时效性问题:模型知识的获取是通过使用训练数据集训练获取的,模型训练后产生的一些新知识,是没有学习的,而大模型训练成本极高,不可能为了弥补知识而频繁进行模型训练。
本质来看,大模型输出的结果都是以过去的公共数据进行归纳推理,没有“固定的知识”。那么假如我们给它外挂上一个“知识库”,是否就能解决这类问题呢?简单举个例子:
我们问大模型“请帮我简单总结一下今天的工作”。很明显大模型在一本正经地胡说八道,因为它并不了解我今天具体做了什么。
▲没有带上“固定知识”的提问
但我们把今天的工作内容作为上下文结合到Prompt中,输入给大模型。大模型便能基于我们提供的内容进行针对性的回复。
▲带上“固定知识”的提问
那是否意味着,我们可以把整个知识库都发送给大模型进行处理呢?
这是一个方法,比方说通过长上下文的方式,但目前来看并不是最优解,一个原因是模型一次接收的信息仍然是有限的(目前普遍最多支持128K)。第二个原因是发送大量的上下文内容所需的消耗成本远大于短文本。最重要的原因是,输入大模型的内容过于广泛,大模型处理的效果会愈发不准确。
因此我们需要先对知识内容进行预处理,这里就引入了RAG的技术。
大白话解释RAG
简单理解,在向大模型提问前,我们需要预先对大量私有化知识内容进行梳理,提取**(检索)出与提问相关的知识内容后整合到Promt中再向大模型提问,让大模型围绕“固定的知识”进行针对性回答。从而提升模型输出内容的准确性和可靠性(增强生成)**,如下图所示。
▲RAG的大致流程
三、RAG流程
RAG的重点之一在于如何对知识内容进行检索,比如说:关键词检索、相似度检索。
1、关键词检索
顾名思义就是我们日常工作中常见的检索方式,比如:通过输入订单标题关键词,模糊检索到订单信息。对于部分场景而言,使用关键词检索会高效快速得多
▲关键词检索的示例
2、相似度检索
使用各种不同的相似度算法(如欧氏距离、余弦等)进行数据检索的一种技术。简单理解,就是把问题Embedding为向量,去向量数据库中匹配与此问题相似度最高的几个内容片段。
相似度检索是RAG中常用的检索方式,接下来我们展开说说如何利用相似度检索完成RAG的整个过程。
a)知识分块处理
首先对数据库中的内容进行处理,比方说:把非文本形式的数据转换为标准的纯文本数据。然后将知识内容进行分块,切分成更短的段落或句子,以便更有效地进行处理。其中知识分块的策略会对最终知识片段的检索起到重要的影响
▲知识切分
b)知识向量化存储
把分成小块的知识片段通过一个嵌入模型(Embedding Model)转换成文本向量后创建索引并存储于向量数据库。向量通常会以数字的形式存储于一个多维空间中。
▲向量嵌入与存储
c)问题处理
当用户提问时,问题将通过和知识分块相同的嵌入模型与转换规则转化成查询向量,以保证问题和知识片段在相同的向量空间里,其中向量间的距离可以反映文本之间的语义相似度。
▲问题向量化
d)向量检索
被转换成向量的问题与向量数据库中存储的知识向量进行比较,找出与查询向量最相似的知识片段,这一步骤通常通过计算向量之间的距离(如余弦距离、欧氏距离等)来实现。
▲向量的相似度检索
e)大模型处理
提取相似度得分最高的几个知识片段,这些内容可以作为额外的上下文信息,结合用户的原始提问构建成Prompt后,输入给大模型进行处理。
f)回答
将大模型输出的问题结果返回给用户。这个答案是从知识库中检索到的最相关信息生成,确保了准确性和相关性。
总结来看,整个RAG流程大致如下图所示。
▲RAG的完整流程
四、RAG存在的挑战
虽说 RAG 能够解决在大模型使用过程中遇到的部分问题,但它仍存在方方面的挑战,比如:
1、索引阶段
Naive RAG在编制索引时,可能无法有效处理非结构化文件中的图像、表格等信息,导致信息提取不完整。其次用简单的知识分块策略,可能会导致重要信息被分割在不同的知识块中,从而影响检索效果 。
2、检索阶段
使用用户原始提问做检索,可能会存在意图识别不明确(当遇到含糊或过于简短的用户查询时),这就导致用户提问和知识索引不能很好的匹配,检索质量比较差。又比如采用单一的检索方法,没有融合关键词、语义和向量等多种检索技术组合,也会一定程度上影响到检索效果。
3、生成阶段
大模型可能无法将检索到的上下文与当前的生成任务有效整合,导致输出结果不一致或相关性不高。其次在生成过程中过度依赖检索到的信息,导致生成的内容只是重复输出检索到的内容,而没有提供新的价值或综合信息。
为了解决上述存在的挑战,RAG技术也在持续地发展和优化中,比方说衍生出了**高级RAG(Advanced RAG)与模块RAG(Modular RAG)**等解决方案(本文不做细说)。
五、结语
作为AIGC应用方,通常以集成第三方向量数据库为主,这意味着把RAG技术应用在实际业务当中相对比较容易,但想做好仍然有很多的困难需要克服,每个步骤都有可能对最终效果产生影响。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。