RAG 技术
- 检索增强的生成系统(Retrieve Augment Generation)简称 RAG。
- 原理是在大语言模型的基础上,辅助检索技术,让大语言模型能够获得与用户问题相关的更多上下文信息,使得的大语言模型可以:
- 降低幻觉出现概率
- 适应垂直场景应用
- 弥补数据实时性不足
一个典型 RAG 系统的架构
RAG 系统的核心技术要素
- 文档导入
- 文档切分
- 文档向量化
- 向量数据库选型
- 检索算法
- 文档排序
- Prompt 生成
- $\dots$
市面上大部分的关于 RAG 的介绍都是类似上面的逻辑进行的,然后就顺利的将 某一种 RAG 的方法 变成了 通用 RAG 的框架,从而让我们迷失了 RAG 的真正价值。
从定义出发,RAG 就是
检索 + 生成
- Chat With Documents 属于 RAG
- 用户对话中保留历史记忆 属于 RAG
- 网页搜索 + LLM 属于 RAG
- 自动调用 API 接口获取信息 属于 RAG
- 调用数据库获取信息 属于 RAG
- $\dots$
- 上面各种方法一起使用也属于 RAG
RAG 究竟意味着什么?
为什么我们要使用检索
- 人类行为的两种模式:主动获取信息(功利动机行为)和被动获取信息(共情动机行为);
- 通常在产品上,我们可以用 Save time 和 Kill time 的模式来区分
- 主动获取信息的手段被称为信息检索。
- RAG 更标准的说法应当是有了 LLM 能力加持的信息检索。
LLM 很难独立完成检索
- 最核心的问题是,对于如何引导大模型按照我们的意愿生成内容,我们无法直接控制,我们只能通过增加上下文的方式来影响生成结果。
- 对于大模型来说,它会如何回答一个问题依赖的不是训练框架,而是训练数据。
- 我们无法直接控制大模型的生成结果,但是我们可以通过增加上下文的方式来影响生成结果。
- 一个问题,我们可以提供相关的上下文,然后利用大模型的泛化能力,让它生成我们想要的答案。
- 大模型的“记忆力”并不可靠,不同的上下文会引导出怎样的结果是不确定的。
- 仅靠大模型,是无法取消幻觉的。
- 如果 RAG 做得不好,可能带来的是负面效果。
RAG 的核心
如何用好检索
检索的发展史
- 图书馆的索引式检索(Yahoo 等目录网页);
- 关键词召回(传统搜索);
- 向量相似度(个性化推荐);
- 自然语言回答问题(大模型);
这些方法不是递进的,而是并列的。
新概念下的 RAG 框架
- 对用户问题分类,判断使用哪些检索器;
- 根据用户问题,找到最适合的检索器检索方式(Query、SQL、API 调用等);
- 召回的结果,判断与用户问题的相关性,进行合理过滤或改进;
- 用适合的方式组织召回结果,提供给 LLM 进行汇总并回答用户问题;
- (可选)判断是否很好的回答了用户的问题,是否需要重新再来一遍(这其实就进化成 Agent 了)。
- 可以使用不同的 LLM 来执行不同的任务,这样就可以在计算速度和资源上得到极大的节约,并针对特定问题取得更好的效果。
- 检索器的各种优化技术都值得使用:
- 包括传统的关键词搜索(QP)
- 向量检索只是其中的一种手段;同时向量检索也应当额外建立适合的索引。
- 知识图谱是有效的检索器之一。
- 利用好结构化信息(数据库 或 API)。
- 好的检索器依赖好的数据。
Q & A
如果我们有一些私有的数据,如何让大模型能够利用这些私有数据呢?
- 通过微调的方式,将私有数据加入到大模型的训练数据中。
- 通过检索的方式,将私有数据加入到大模型的上下文中。
- 以上方法都用
怎样才能更好的提升 RAG 的效果?
最核心的要素其实是:找到更优质的数据(准确、结构化)
产品和开发要深入研究 Prompt Engineering 吗?
永远都不要这样做,这件事交给 SFT
- 概念对比
- Let’s think step by step
- 通用优化 Prompt 的 Prompt
- function call
- Self RAG
- 让模型来学习如何 Prompt Engineering