RAG是什么,一文看懂什么是RAG

最近总听说RAG,RAG到底是什么呢?本文将向你介绍代理型 RAG 的概念、实施方法,以及其优势与局限性。

img

1、什么是检索增强生成(RAG)

检索增强生成(RAG)是一种用于构建大型语言模型(LLM)驱动型应用的技术。它借助外部知识源,为大型语言模型提供相关背景信息,从而减少幻觉现象。就好比给 LLM 配备了一个小型的“资料库”,当用户提出问题时,系统会在资料库中查找相关内容并提供给 LLM,以帮助其生成更准确的回答。

img

基本的 RAG 流程包括检索组件(通常由嵌入模型和向量数据库组成)和生成组件(大型语言模型)。在推理阶段,用户问题用于在已索引的文档上执行相似性搜索,检索出与问题最相似的文档,并为大型语言模型提供额外的背景信息。

典型的 RAG 应用存在两个显著局限:

  1. 简单的 RAG 流程仅考虑一个外部知识源。然而,有些解决方案可能需要两个外部知识源,有些解决方案可能需要外部工具和 API,例如网络搜索。
  2. 它是一次性解决方案,即仅检索一次背景信息。对检索到的背景信息的质量没有进行推理或验证。

2、人工智能系统中的Agents是什么?

随着大型语言模型(LLM)的流行,人工智能代理和多代理系统的新范式应运而生。人工智能代理是具有角色和任务的大型语言模型,可以访问内存和外部工具。大型语言模型的推理能力有助于代理规划所需步骤并采取行动以完成当前任务。

举个例子,一个智能旅行规划代理可以帮助你规划旅行路线。它会先思考“用户需要一个旅行路线”这个任务,然后决定使用网络搜索工具查找目的地的景点和酒店,接着分析搜索结果并拟定旅行计划,最后将计划呈现给你。在这个过程中,它不断地思考、行动、观察,直到完成任务。

因此,人工智能代理的核心组件是:

img

  • 大型语言模型(具有角色和任务)
  • 内存(短期和长期)
  • 规划(例如,反思、自我批评、查询路由等)
  • 工具(例如,计算器、网络搜索等)

一个流行框架是 ReAct 框架。ReAct 代理可以通过将路由、查询规划和工具使用整合到一个实体中,来处理顺序多部分查询,同时通过维护状态(在内存中)。

ReAct = 推理 + 行动(借助大型语言模型)

img

该过程涉及以下步骤:

思考:在接收到用户查询后,代理对下一步要采取的行动进行推理。

行动:代理决定一个行动并执行它(例如,使用工具)。

观察:代理观察该行动的反馈。

这个过程不断迭代,直到代理完成任务并回复用户。

3、什么是代理型 RAG?

代理型 RAG 是一种基于人工智能代理来实现检索增强生成(RAG)的方法。具体来说,它将人工智能代理引入 RAG 流程中,协调其组件并执行简单信息检索与生成之外的更多操作,以此克服非代理型流程的局限。

3.1、代理型 RAG 如何工作?

尽管可以在 RAG 流程的不同阶段引入代理,但代理型 RAG 通常指的是在检索组件中使用代理。具体来说,通过使用具有访问不同检索工具权限的检索代理,检索组件具备了代理的特性,这些工具有:

  • 向量搜索引擎(也称为查询引擎),可在向量索引上执行向量搜索(如同在典型的 RAG 流程中)
  • 网络搜索
  • 计算器
  • 任何可编程访问软件的 API,例如电子邮件或聊天程序
  • 以及其他更多工具。

然后,RAG 代理可在以下示例检索场景中进行推理和行动:

  • 决定是否检索信息
  • 决定使用哪种工具来检索相关信息
  • 拟定查询本身
  • 评估检索到的上下文并决定是否需要重新检索。

3.2、代理型 RAG 架构

与顺序的简单 RAG 架构不同,代理型 RAG 架构的核心是代理。代理型 RAG 架构可以具有不同程度的复杂性。最简单的形式是单代理 RAG 架构,即简单路由。但你也可以在多代理 RAG 架构中添加多个代理。本节将讨论两种基本的 RAG 架构。

3.2.1、单代理 RAG(路由)

img

在最简单的形式中,代理型 RAG 是一个路由。这意味着至少有两个外部知识源,代理决定从哪一个检索额外的上下文。然而,外部知识源不必局限于(向量)数据库。你也可以通过工具检索进一步的信息。例如,你可以进行网络搜索,或者使用 API 从 Slack 频道或你的电子邮件账户中检索额外的信息。

3.2.2、多代理 RAG 系统

img

正如你所能推测的,单代理系统也存在局限性,因为它仅限于一个集推理、检索和答案生成于一身的代理。因此,将多个代理串联成一个多代理 RAG 应用是很有益的。

例如,你可以设置一个主管代理,让它协调多个专门化检索代理之间的信息检索工作。比如,一个代理可以从专有的内部数据源检索信息,另一个代理可以专门从你的个人账户(如电子邮件或聊天记录)中检索信息,还有一个代理则可以专注于从网络搜索中获取公开信息。

3.2.3、超越检索代理

以上示例展示了不同类型检索代理的用法。然而,你也可以将代理用于检索之外的其他目的。代理在 RAG 系统中的可能性是多方面的。

4、代理型 RAG 与(普通)RAG 的对比

虽然 RAG 的基本概念(发送查询、检索信息和生成响应)保持不变,但工具的使用使其更加灵活和强大。

可以这样理解:普通的(基础)RAG 就像在智能手机出现之前的图书馆里回答特定问题。而代理型 RAG 则如同手中拿着一部带有网页浏览器、计算器、电子邮件等应用的智能手机。

img

5、实现代理型 RAG

如前所述,代理由多个组件构成。要构建代理型 RAG 流程,有两种选择:具有功能调用的语言模型或代理框架。两种实现方式最终都能达到相同的结果,区别仅在于你所期望的控制程度和灵活性。

5.1、具有功能调用的语言模型

语言模型是代理型 RAG 系统的主要组件。另一个组件是工具,它使语言模型能够访问外部服务。具有功能调用的语言模型提供了一种构建代理系统的方法,通过允许模型与预定义工具交互。语言模型提供商已将此功能添加到他们的客户端。

2023 年 6 月,OpenAI 为 gpt-3.5-turbo 和 gpt-4 推出了功能调用。这使得这些模型能够可靠地将 GPT 的功能与外部工具和 API 结合起来。开发者迅速开始构建应用程序,将 gpt-4 集成到代码执行器、数据库、计算器等工具中。

Cohere 进一步推出了他们的连接器 API,为 Command-R 系列模型添加工具。此外,Anthropic 和 Google 也为 Claude 和 Gemini 推出了功能调用。通过为这些模型提供外部服务支持,它们能够访问和引用网络资源、执行代码等。

功能调用不仅限于专有模型。Ollama 为流行的开源模型(如 Llama3.2、nemotron-mini 等)引入了工具支持。

要构建一个工具,首先需要定义函数。在这个代码片段中,我们编写了一个函数,该函数使用 Weaviate 的混合搜索从数据库中检索对象:

def get_search_results(query: str) -> str:
    """Sends a query to Weaviate's Hybrid Search. Parses the response into a {k}:{v} string."""
    
    response = blogs.query.hybrid(query, limit=5)
    
    stringified_response = ""
    for idx, o in enumerate(response.objects):
        stringified_response += f"Search Result: {idx+1}:\n"
        for prop in o.properties:
            stringified_response += f"{prop}:{o.properties[prop]}"
        stringified_response += "\n"
    
    return stringified_response

然后,我们将通过工具模式将函数传递给语言模型。然后在提示语言模型时使用该模式:

tools_schema=[{
    'type': 'function',
    'function': {
        'name': 'get_search_results',
        'description': 'Get search results for a provided query.',
        'parameters': {
          'type': 'object',
          'properties': {
            'query': {
              'type': 'string',
              'description': 'The search query.',
            },
          },
          'required': ['query'],
        },
    },
}]

由于你是直接连接到语言模型 API,所以需要编写一个在语言模型和工具之间路由的循环:

def ollama_generation_with_tools(user_message: str,
                                 tools_schema: List, tool_mapping: Dict,
                                 model_name: str = "llama3.1") -> str:
    messages=[{
        "role": "user",
        "content": user_message
    }]
    response = ollama.chat(
        model=model_name,
        messages=messages,
        tools=tools_schema
    )
    if not response["message"].get("tool_calls"):
        return response["message"]["content"]
    else:
        for tool in response["message"]["tool_calls"]:
            function_to_call = tool_mapping[tool["function"]["name"]]
            print(f"Calling function {function_to_call}...")
            function_response = function_to_call(tool["function"]["arguments"]["query"])
            messages.append({
                "role": "tool",
                "content": function_response,
            })
    
    final_response = ollama.chat(model=model_name, messages=messages)
    return final_response["message"]["content"]

你可以按照这个配方来重现上述内容。

5.2、代理框架

诸如 DSPy、LangChain、CrewAI、LlamaIndex 和 Letta 等代理框架已经出现,以方便使用语言模型构建应用。这些框架通过组合预制模板简化了构建代理型 RAG 系统的过程。

DSpy 支持 ReAct 代理和头像优化。头像优化描述了为每个工具的描述使用自动化提示工程。

LangChain 提供了许多使用工具的服务。LangChain 的 LCEL 和 LangGraph 框架进一步提供了内置工具。

LlamaIndex 进一步引入了 QueryEngineTool,即检索工具的模板集合。

CrewAI 是开发多代理系统的领先框架之一。在工具使用中利用的关键概念之一是在代理之间共享工具。

Swarm 是 OpenAI 构建的用于多代理编排的框架。Swarm 同样关注工具在代理之间的共享方式。 Letta 通过函数反映和细化内部世界模型。这可能涉及使用搜索结果来更新聊天机器人对用户的记忆,而不仅仅是回答问题。

6、为什么企业采用代理型 RAG

企业正在从基础 RAG 转向构建代理型 RAG 应用。Replit 推出了一个帮助开发者构建和调试软件的代理。此外,微软宣布推出与用户并肩工作的副驾,以提供完成任务的建议。这些只是生产中代理的几个例子,可能性是无穷无尽的。

6.1、代理型 RAG 的好处

从基础 RAG 转向代理型 RAG,使这些系统能够产生更准确的响应、自主执行任务以及更好地与人类协作。

代理型 RAG 的好处主要在于检索附加信息的质量得到改善。通过增加可以使用工具的代理,检索代理可以将查询路由到专门的知识源。此外,代理的推理能力可以在检索到的上下文用于进一步处理之前对其进行验证。因此,代理型 RAG 流程可以产生更稳健、更准确的响应。

6.2、代理型 RAG 的局限性

然而,任何事物都有两面性。使用 AI 代理执行子任务意味着引入一个大型语言模型(LLM)来执行任务。这带来了在任何应用中使用大型语言模型的局限性,例如增加延迟和不可靠性。根据大型语言模型的推理能力,代理可能无法充分完成任务(甚至根本无法完成)。重要的是要纳入适当的故障模式,以帮助 AI 代理在无法完成任务时摆脱困境。

那么,如何系统的去学习大模型LLM?

作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
在这里插入图片描述

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
在这里插入图片描述
在这里插入图片描述

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
在这里插入图片描述

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
在这里插入图片描述

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
在这里插入图片描述

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
在这里插入图片描述
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

<think>嗯,用户现在问的是RAG是什么。之前他们问过数据标注,可能是在学习人工智能的基础知识,现在转向更具体的模型架构。我需要先确定RAG的全称,可能是指Retrieval-Augmented Generation,这在自然语言处理中是一个比较新的概念。 首先,用户可能对RAG没有了解,需要从基础讲起。要解释清楚它是结合了检索和生成的技术,比如用于问答系统或对话机器人。可能用户听说过GPT之类的模型,但RAG的不同之处在于它结合了外部知识库,这样生成的答案更准确,特别是需要实时或特定领域信息的时候。 然后要考虑用户的需求,他们可能想了解RAG的应用场景,或者为什么需要这种技术。比如传统的生成模型可能会产生错误的信息,而RAG通过检索相关文档来增强生成过程,减少幻觉现象。这时候需要举例子,比如客服系统如何利用RAG快速找到产品信息再生成回答。 还要注意用户可能的背景,如果是技术背景,可以深入架构细节,比如使用Dense Passage Retrieval或者Transformer模型。但如果是普通用户,应该保持解释的简洁,用类比的方式,比如把RAG比作一个研究员,先查资料再写报告。 此外,用户之前的问题关于数据标注,可能他们也在关注数据在AI中的作用。这时候可以联系到RAG如何利用标注过的数据来训练检索和生成模块,或者数据质量对RAG效果的影响。 需要检查是否有常见的误解,比如RAG是否只是检索加上生成,还是有更复杂的交互。要指出两者的协同工作,比如检索到的信息如何指导生成过程,而不仅仅是拼接结果。 最后,确保回答结构清晰,分点说明核心概念、工作原理、优势、应用场景,可能还要对比传统方法。使用用户之前接受的格式,比如分步骤、加粗标题、列表或表格,但这次用户没有特别要求格式,不过保持一致性比较好。可能还需要提到数学表达式,比如概率模型中的公式,但要根据用户的理解层次调整深度。</think>RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合**信息检索**与**文本生成**的混合型人工智能技术,旨在通过引入外部知识库提升生成内容的准确性和可靠性。以下是分步解析: --- ### 1. **核心定义** RAG 的核心理念是:**先检索相关知识,再基于检索结果生成答案**。其工作流程可抽象为: $$ \text{输出} = \text{生成模型}( \text{问题} \oplus \text{检索到的相关文档} ) $$ 其中 $\oplus$ 表示信息融合。 --- ### 2. **与传统生成模型的对比** | 特性 | 传统生成模型(如GPT) | RAG | |--------------------|-------------------------------|------------------------------| | 知识来源 | 训练数据中的隐性记忆 | 显式检索外部知识库 | | 动态更新 | 需重新训练 | 仅更新知识库即可扩展 | | 可解释性 | 低(黑盒生成) | 较高(可追踪检索结果) | | 应对专业领域 | 易产生幻觉(错误事实) | 依赖权威文档,准确性更高 | --- ### 3. **技术实现步骤** 1. **检索阶段** - 使用**稠密向量检索**(如DPR,Dense Passage Retrieval)将问题编码为向量,从知识库中匹配最相关的文档片段 - 数学表达: $$ \text{相似度} = \cos(\mathbf{q}, \mathbf{d}_i), \quad \mathbf{q} \text{为问题向量}, \mathbf{d}_i \text{为文档向量} $$ 2. **生成阶段** - 将问题与检索到的文档拼接输入生成模型(如BART、T5),生成最终回答 - 优化目标: $$ p(y|x,D) = \prod_{t=1}^T p(y_t | y_{<t}, x, D) $$ 其中 $x$ 是问题,$D$ 是检索文档,$y$ 是生成结果。 --- ### 4. **核心优势** - **减少幻觉**:依赖检索结果约束生成范围 - **知识可追溯**:可标注回答中引用的文档来源 - **低训练成本**:无需将全部知识编码进模型参数(如医疗领域知识库可独立更新) --- ### 5. **典型应用场景** - **智能问答系统** 例如: ``` 用户问:“量子纠缠现象如何解释?” → RAG检索物理学论文 → 生成结合专业术语的解释 ``` - **法律咨询助手** 通过检索法律条文和判例生成合规建议 - **企业知识管理** 连接内部文档库,生成基于最新政策文件的回复 --- ### 6. **技术挑战** - **检索精度瓶颈**:若检索结果不相关,生成质量显著下降 - **长文本处理**:需平衡检索文档长度与生成模型上下文窗口 - **实时性要求**:知识库更新频率需与业务需求匹配 --- ### 7. **行业意义** 据实验数据显示,在开放域问答任务中,RAG 相较纯生成模型可将事实错误率降低 **40%-60%**(如NaturalQuestions数据集)。这一技术正在重塑搜索引擎、客服机器人等场景,成为连接大模型与垂直领域知识的桥梁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值