Agentic RAG

Agentic RAG是一种基于代理的方法,用于以协调的方式执行RAG。它可能涉及从各种文档源检索数据、比较摘要,并实现自动自我纠正机制。

在本教程中,我们将探讨如何构建一个自我修正的RAG系统,该系统能够检查检索到的数据的相关性,并在结果不相关时自动重新生成查询。

概述

主动RAG流程实施了一个多步骤过程,该过程:

  1. 对收到的查询进行验证和分类

  2. 为向量数据库检索生成优化的搜索查询

  3. 评估检索到的文档的相关性

  4. 当结果不相关时,通过重新生成查询进行自我纠正

  5. 根据检索到的信息提供情境相关的回复

步骤1:设置起始节点

首先,在画布上添加一个Start节点。这将成为你的智能体流程的入口点。

配置:

  • 输入类型:选择“聊天输入”以接受用户问题

  • Flow State:添加一个键为“query”且值为空的状态变量

Start节点使用一个空的query变量来初始化流程状态,该变量将在整个流程中不断更新。

步骤2:添加查询验证

添加一个条件代理节点,并将其连接到开始节点。

配置:

  • 说明:“检查用户是在询问与人工智能相关的话题,还是只是一般性查询”

  • 输入{{ question }}(引用用户的输入)

  • 场景

    • 场景1:“与人工智能相关” 场景2:“一般”

该节点充当路由器,判断查询是需要专门的AI知识还是一般就能回答。

步骤3:创建通用响应分支

对于非人工智能相关的查询,添加一个与条件代理的输出1相连接的**大型语言模型(LLM)**节点。

这为一般查询提供了直接回复,无需进行文档检索。您也可以使用“直接回复”节点来返回预定义的答案。

步骤4:设置查询生成

对于与AI相关的查询,添加一个LLM节点,该节点连接到条件代理的输出0,这是“与AI相关”的场景。

配置:

  • 消息:添加一条系统消息:

    根据用户问题和历史记录,构建一个可用于搜索向量数据库的简短字符串。仅生成查询,不包含元注释,也不提供解释
    
    示例:
    问题:今天发生了哪些事件?
    查询:今天的活动
    
    示例:
    问题:地址呢?
    查询:该店铺的营业地址
    
    问题:{{ question }}
    查询:
  • 更新流状态:将键“query”设置为值{{ output }}。这将把“query”的值更新为此大型语言模型(LLM)节点的输出。

该节点将用户的自然语言问题转换为针对向量数据库的优化搜索查询。

步骤5:配置向量数据库检索器

添加一个检索器节点,并将其连接到“生成查询”大型语言模型(LLM)上。

配置:

  • 知识(文档存储):选择您预先配置的文档存储(例如,“ai paper”)

  • 检索查询{{ $flow.state.query }}(使用共享状态中的“query”值)

此节点使用优化后的查询在您的向量数据库中搜索,并返回相关文档。

步骤6:添加文档相关性检查

再添加一个与检索器相连的条件代理节点。

配置:

  • 说明:“判断文档是否与用户问题相关。用户问题为{{ question }}”

  • 输入{{ retrieverAgentflow_0 }}(引用步骤5中检索到的文档)

  • 场景: 场景1:“相关”

    • 场景2:“不相关”

这评估了检索到的文档是否确实包含与用户问题相关的信息。

步骤7:创建最终响应生成器

对于相关文档,添加一个与相关性检查器的输出0(即场景“相关”匹配时)相连接的LLM节点。

配置:

  • 输入消息

    给定问题:{{ question }}
    检索结果如下:{{ retrieverAgentflow_0 }}
    输出最终响应

该节点通过将用户的问题与检索到的相关文档相结合,生成最终答案。

第8步:实现自我纠正

对于不相关的文档,添加一个LLM节点,该节点连接到相关性检查器的输出1 - 用于第二种场景 - “不相关”。

配置:

  • 消息:添加系统消息:“你是一个乐于助人的助手,能够转换查询以生成更好的问题。”

  • 输入消息

    查看输入内容,并尝试推断其潜在的语义意图/含义。
    以下是初始问题:{{ $flow.state.query }}
    提出一个改进的问题:
  • 更新流状态:将键“query”设置为值{{ output }}

该节点分析初始查询未返回相关结果的原因,并生成一个改进版本。

步骤9:添加环回机制

添加一个与“重新生成问题”大型语言模型(LLM)相连接的循环节点。

配置:

  • 循环回溯至:选择“retrieverAgentflow_0-Retriever Vector DB”

  • 最大循环次数:设置为5(防止无限循环)

这形成了一个反馈循环,当初始结果不令人满意时,系统可以用改进后的查询进行重试。

完整流程结构

{
  "name": "Agentic RAG V2",
  "description": "一个基于深度学习的文本生成模型,用于生成自然语言文本。",
  "version": "2.0",
  "author": "OpenAI",
  "date": "2021-06-22",
  "license": "MIT"
}

摘要

  1. 开始 → 检查查询是否有效

  2. 检查查询是否有效(与AI相关)→ 生成查询

  3. 检查查询是否有效(通用)→ 通用答案

  4. 生成查询 → 检索向量数据库

  5. 检索向量数据库 → 检查文档是否相关

  6. 检查文档是否相关(相关)→ 生成响应

  7. 检查文档是否相关(不相关)→ 重新生成问题

  8. 重新生成问题 → 循环回到检索器

测试你的流程

用各种类型的问题来测试你的思路:

  • 与人工智能相关的提问:“机器学习领域有哪些最新进展?”

  • 一般查询:“今天天气怎么样?”

  • 可能需要进一步细化的复杂问题:“那项新技术是如何运作的?”

该主动式检索增强生成(Agentic RAG)系统为基于文档的问题回答提供了一个稳健、自我优化的系统,该系统既能处理简单查询,也能处理复杂查询,同时通过迭代优化保持高精度。

Last updated