一篇文章看懂RAG + 实战,看不懂来揍我

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

一、为什么需要RAG

可以将大语言模型看作是一个过于热情的新员工,他拒绝随时了解时事,但总是会绝对自信地回答每一个问题。不幸的是,这种态度会对用户的信任产生负面影响,这是不希望聊天机器人效仿的!

我们将大模型用于实际的业务时候,会发现通用的基础大模型基本无法满足我们实际的业务需求,经过实践主要有以下几个方面:

  1. 知识的局限性:大模型对于一些具有实时性、非公开或者离线的数据是无法获取的
  2. 幻觉问题:当大模型不具备某一领域的知识或者有不擅长的场景时,就会出现幻觉问题,简言之就是开始一本正经的胡说八道。
  3. 数据安全性:数据是一个企业至关重要的东西,没有企业愿意承担数据泄露的风险

RAG 是解决其中一些挑战的一种方法。它会重定向 LLM,从权威的、预先确定的知识来源中检索相关信息。组织可以更好地控制生成的文本输出,并且用户可以深入了解 LLM 如何生成响应。

二、什么是RAG

2.1 RAG的概念

比较官方的概念就是:Retrieval-Augmented Generation(检索增强生成)是一种结合了检索模型和生成模型的AI技术,它能让大型语言模型(LLM)在回答问题或生成文本时,先从外部的知识库(如公司内部文档或数据库)检索相关信息,再将这些信息整合到生成过程中,从而生成更准确、更相关、更新鲜的答案,而无需重新训练或微调整个模型。

下面我们来拆解一下RAG的概念:

  1. Retrieval - 检索模型:将用户的Prompt首先Embedding,然后和向量数据库中的上下文进行对比,相似性搜索,找到向量数据库中最匹配的前k个数据。核心就是两部分。
  2. 建立索引:将知识库转换为可搜索/查询的内容,建立相关索引。
  3. 执行查询:从搜索内容中提取最相关的,最佳知识片段。
  4. Augmented - 增强:将用户的Prompt和检索到的相关信息,一起嵌入到一个预设的提示词模板中。
  5. Generate - 生成模型:最终将增强后的Prompt输入给LLM。

2.2 RAG的特点

RAG通过以下几个特点来弥补单纯的语言模型:

  1. 信息检索: RAG使用检索系统(比如Elasticsearch)来从大规模数据集中检索相关文档或数据。
  2. 上下文融合: 将检索到的信息和原始的问题或输入融合,构造一个扩展的上下文。
  3. 知识增强:通过上下文融合,模型可以利用外部检索到的知识来指导生成过程,这可以显著减少"幻觉"。
  4. 快速更新:实施RAG需要矢量数据库等技术,这些技术可以快速编码新数据,并搜索该数据以输入给LLM模型。
  5. 灵活性: RAG模型可以与不同的检索库和不同的语言模型结合使用。
  6. 不需要训练:RAG可以通过查询最新的外部数据源来处理频繁变化的数据,不需要训练,模型大小不会产生变化。

2.3 RAG 主要组成

RAG的主要组成,分别是:数据提取 - embedding(向量化) - 创建索引 - 检索 - 自动排序 - Rerank - LLM归纳生成。

RAG就是让大模型进行开卷考试,如果大家准备的资料都差不多,那么我们怎么在有限的时间内,能够取得优异的成绩呢?

  1. 准备的资料准确:如果答案都是错误的,写上去也是错误的
  2. 准备的资料充分:考的全是资料上面的,自然正确率是非常高的

上面的要求也是我们在建立RAG知识库时候需要注意的地方。

三、RAG 和 Fine-tuning 的区别

Fine-tuning(微调):是指用一定的数据集对LLM进行局部参数调整,需要进行训练,以期望LLM理解我们的业务逻辑,有更好的 zero-shot (零样本)能力。简而言之:让大模型通过学习,内化知识。

RAG(检索增强生成):是指把文档先进行embedding(向量化),借助检索先得到大致的知识范围答案,将用户输入的Prompt和检索得到的答案一起给到LLM,让LLM生成最终答案。简而言之:让大模型可以开卷考试。

添加图片注释,不超过 140 字(可选)

四、RAG 未来的趋势

检索增强生成的未来趋势集中在使 RAG 技术更高效、更适应各种应用。 以下是一些值得关注的趋势:

  1. 个性化:RAG 模型将继续纳入用户特定的知识。 这将使他们能够提供更加个性化的响应,特别是在内容推荐和虚拟助理等应用程序中。
  2. 可定制的行为:除了个性化之外,用户本身还可以更好地控制 RAG 模型的行为和响应方式,以帮助他们获得所需的结果。
  3. 可扩展性:RAG 模型将能够处理比目前更大量的数据和用户交互。
  4. 混合模型:RAG 与其他人工智能技术(例如强化学习)的集成将允许更通用和上下文感知的系统,可以同时处理各种数据类型和任务。
  5. 实时、低延迟部署:随着 RAG 模型检索速度和响应时间的提高,它们将更多地用于需要快速响应的应用程序(例如聊天机器人和虚拟助手)。

五、OceanBase 实战

5.1 OceanBase 介绍

该项目是基于 langchain、langchain-oceanbase 和 streamlit 构建,处理流程是先将 OceanBase 数据库的文档,通过 Embedding 模型转化为向量数据,并存储在 OceanBase 数据库中。当用户提问时,系统会用相同的模型将问题转化为向量,然后通过向量检索找到相关的文档内容,再将这些文档作为上下文提交给大语言模型,从而生成更精准的回答。

Github地址:github.com/oceanbase/o...

参考线上地址:www.oceanbase.com/obi

5.2 OceanBase 特性

  1. 向量检索:支持向量索引和高效查询,可用于 AI 应用、推荐系统和语义搜索,提供高吞吐、低延迟的向量搜索能力;
  2. 水平扩展:单机群支持超过1500节点、PB级数据量和单表超万亿行数据;
  3. 极致性能:TPC-C 7.07亿tmpC和TPC-H 1526 万 QphH @30000GB;
  4. 低成本:存储成本节省70%-90%;
  5. 实时分析:不需要额外开销,支持HTAP;
  6. 高可用:RPO = 0(0数据丢失),RTO < 8秒(恢复时间);
  7. MySQL 兼容:很容易的从MySQL迁移过来。

5.3 部署开始

使用 Linux系统 部署

bash 复制代码
# 下载并安装 all-in-one (需要联网)
bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/installer.sh)"
source ~/.oceanbase-all-in-one/bin/env.sh

# 快速部署 OceanBase database
obd demo

使用 docker 部署

  1. 启动 OceanBase 数据库实例
ini 复制代码
# 部署一个mini模式实例
docker run -p 2881:2881 --name oceanbase-ce -e MODE=mini -d oceanbase/oceanbase-ce

# 使用 quay.io 仓库的镜像部署 OceanBase.
# docker run -p 2881:2881 --name oceanbase-ce -e MODE=mini -d quay.io/oceanbase/oceanbase-ce

# 使用 ghcr.io 仓库的镜像部署 OceanBase.
# docker run -p 2881:2881 --name oceanbase-ce -e MODE=mini -d ghcr.io/oceanbase/oceanbase-ce
  1. 连接 OceanBase
bash 复制代码
docker exec -it oceanbase-ce obclient -h127.0.0.1 -P2881 -uroot # 连接root用户sys租户

下面是部署成功后的UI界面:

六、最后总结

优化RAG的关键是什么?我得到的答案是数据 + 检索。

数据质量决定了基础,高质量数据从海量数据提纯而来,检索则是确保内容能够被快速且准确提取的关键。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

相关推荐
聚客AI2 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
安思派Anspire7 小时前
创建完整的评估生命周期以构建高(二)
aigc·openai·agent
字节跳动数据平台7 小时前
一句话让AI帮你搞营销?火山引擎Data Agent说:这事儿可以的~
agent
智泊AI7 小时前
Transformer之词嵌入 | 为什么要做词嵌入?
llm
程序员鱼皮8 小时前
刚刚 Java 25 炸裂发布!让 Java 再次伟大
java·javascript·计算机·程序员·编程·开发·代码
库森学长8 小时前
一文带你 "看见" MCP 的过程,彻底理解 MCP 的概念
llm·ai编程·mcp
杨杨杨大侠8 小时前
打开 JVM 黑匣子——走进 Java 字节码(一)
java·jvm·agent
SimonKing8 小时前
接口调用总失败?试试Spring官方重试框架Spring-Retry
java·后端·程序员