RAG简介

LLM当道, 以及大力出奇迹的时代, “凡人”还能做什么:

LLM模型缺点

回答缺少时效性, 因为训练投喂的数据是静态的过时的. 作为个人智能助手的角色时, 这一点是不能接受的. 由于一次训练开销过大, 耗时过长, 也不太可能通过定期训练弥补.

结果幻觉问题, 即一本正经的胡说八道. 我可以接受你诚实的说不知道, 但是不可以胡编乱驺骗我. 不可控的生成, 说的话类似于做梦, 罔顾事实非常奇幻, 或者像幼童, 因为小孩更容易胡编乱造事实以合理化自己的行为, 说话不可信. 不同于梦呓, 难以从结果上判定是否可信. 因此不能用于如法律问答, 医疗诊断等严肃应用场景. 短期内的应用, 多落在(文科类型)文章创作, 陪聊机器人等, 错误不会导致严重后果场景.

插眼: COT能否缓解LLM的幻觉问题?

我们需要什么样的智能体? 能提供有时效的信息, 并可提供信息来源作证结论.

我们利用LLM的什么能力?

总而言之, 合格的LLM应当类似一个优秀的高中毕业生. 这也是为啥LLM评测用SAT之类做.

LLM不具有什么能力?

因此我们需要让LLM”联网”看世界.

日常联网检索解决问题的痛点

从个人解决经验来看, 有时解决完一个问题, 回头一看, 浏览器打开几十个网页, 不断排除似是而非的答案, 问题条件不匹配的答案, 并验证可行性.

时间都浪费再哪儿了?

如何的出答案?

若无类似问题答案的, 需要做问题拆解并不断总结, 考验基本的问题拆分能力.

工作量在于对于检索结果的阅读过滤去重, 质量甄别.

问题的根源在哪里? 传统搜索引擎返回了太多的东西, 而我们需要的只是一个答案, 以及进一步, 这个答案是如何推理得到或者依赖的论据信息是哪些. 只是告诉了这里面可能有你要的东西, 而没有整合信息直接给到答案. 顺着一篇论文的引用去读开, 可以学会整个世界, 而你的时间和精力耗费不起.

我们需要怎样的知识助理? 一个爱看报跟得上时代的, 不装逼不吹牛的私人老师. 问问题先说结论, 再引经据典. 如果建立起了对于助理的信息, 则很少需要去自行验证信息来源可靠性以及推导答案的呵护逻辑性, 从而节省精力.

知识助理的动作

例子及产品评测

先日常调戏一遍ChatGPT

绿光是谁唱的?
 → [chatgpt] ←
绿光是由华语歌手李宇春演唱的。这首歌曲是由李宇春演唱的电视剧《何以笙箫默》的插曲,成为了该剧的代表性歌曲之一。

三国演义中张辽在第几回第一次出现?
$🤖️ → [chatgpt] ←
张辽在三国演义小说中第一次出现是在第三回,他在那一回中被曹操招募为麾下名将,并在白马之围中表现出色,击败了袁绍的将领高览和张郃。

三国演义里比司马懿活得久的角色有哪些?
🤖️ → [chatgpt] ←
三国演义中,活得比司马懿久的角色有不少,以下是其中的一些:
孙权:孙权是三国时期东吴的开国皇帝,他在位期间,东吴逐渐壮大,对抗曹魏和蜀汉。孙权在位56年,比司马懿长寿。
刘备:刘备是三国时期蜀汉的开国皇帝,他在位期间,蜀汉逐渐壮大,对抗曹魏和东吴。刘备在位23年,比司马懿短寿,但是他在三国演义中已经过世。
诸葛亮:诸葛亮是蜀汉的重要谋臣和政治家,他在位期间曾经多次出使吴国,协助刘备对抗曹魏。他在蜀汉丞相期间,处理政务有方,开创蜀汉的文治。诸葛亮逝世后,蜀汉逐渐没落,但他的名声却在历史中留了下来。
姜维:姜维是蜀汉的将领,他曾经多次出征,被赞誉为“锦马超”。姜维在刘禅时期期间,曾经多次阻止蜀汉投降曹魏。姜维在三国演义中死于曹魏的围攻,但是历史记录中,他比司马懿活得更久。

结合搜索的联网AI助手表现如何?

各传统搜索引擎已有落地, 根据提问概率触发. Google AI Overviews / New Bing / 微信搜索AI问答 / 百度搜索AI智能问答 / … 等. 简单问题, 如日期, 计算器, 天气等, 直接规则触发答案, 相当于搜索引擎加规则或者插件. 例子

结合搜索功能的AI知识助理, 国内推广比较猛的有

优点, 阅读时不用适配各种网站排版格式, 专注文字输出, 自动跳过网站广告内容. 从而跟专注内容.

缺点, 对于检索到不相关内容, 再融合答案时, 会出现奇怪的强行缝合答案, 需通过进一步细化提问方式解决.

生成速度更不上阅读速度时候, 会稍微卡一下效率.

由于检索互联网信息的”投毒”, “怎么吃石头”这个问题反而是离线的LLM问答结果比较好. 由于开放联网的本质, 导致内容质量受控性差了.

RAG

等等, 标题说RAG么, 前面这么多还没提到RAG.

RAG: Retrieval Augmented Generation, 检索增强生成

理解名字就知道大概怎么做了, 就是把检索的相关内容丢到提问里面, 从而得到更有时效, 更有证据的答案. 手段来说应该属于PE的范畴.

简言之, 可以视作提示工程: 每次问LLM前, 先检索可能相关的数据放入到PROMPT中后再问.

只利用LLM的基本逻辑推理能力, 忘记LLM存储的事实信息, 将需要分析的内容直接在PROMPT里面列出. 如

流程: 原始问题->检索->构建新的PROMPT->LLM提问->后处理

模块拆解

过程拆解

RAG对于LLM的挑战: 更看重总结任务能力, 对于上下文有更高的要求

context window / 自主力机制决定了计算复杂度是窗口的平方关系, 各种相关优化(偷懒)手段

“Needle In a Haystack Test” for LLM RAG System: 长文本里面藏一个信息并针对性提问, 看LLM结果是否捕获该信息.

评价体系

从端到端的角度评价来说, 同LLM评价. 不过结果还依赖于检索相关性, 也可以拆成两阶段的评价, 前面的环节从检索排序评价体系 (AP/精度/召回/ranking evaluation/…)

客观题, 有确定标号数据

主观题: 有参考答案, 相似度评分; 无参考答案, 人主观评价

评价维度:

RAG App Framework

LangChain

LlamaIndex

GraphRAG

我们业务落地的思考

化繁为简, 客户提出一个问题, 直接给出分析答案

例子:

PS: Transformer注意力机制回顾

意图: 模型结构里面固定习得的QKV以及Attention机制, 类似于联网后的检索环节?

E += softmax(QK^T)*V*E

E是整个句子(到目前为止)的嵌入空间向量

Q,K每一维认为是在问一个问题, 前段是每个问题的真假答案, V认为是每个问题对于信息细化权重, 并投影回嵌入空间

可以调的参数: 多少个头(每次可以多少问题), 多少层(一共可以问几次), 每次问之间是通过MLP链接, 理解为推理或者事实查找步骤

多头注意力: 多个问题的答案汇聚

例子: 猜人游戏

从不断问问题的答案中细化可能性或靠近真实答案

类似于结构化面试, 一箩筐问题, 这一轮答不好下一轮换一批简单的问题组合, 单这个问题回答的很出色加不少印象分, 等.

REF

HOME