忘记 RAG:拥抱 Agent,打造更智能、更接地气的 ChatGPT!

检索增强生成 ( RAG ) 设计模式通常用于在特定数据域中开发基础 ChatGPT。然而,重点主要放在提高检索工具的效率上,例如嵌入搜索、混合搜索和微调嵌入,而不是智能搜索。本文介绍了一种受人类研究方法启发的新方法,该方法涉及多种搜索技术、观察临时结果、精炼以及在提供响应之前在多步骤过程中重试。本文提出通过利用智能代理设计,构建一个更加智能、更加基础的 ChatGPT,超越传统 RAG 模型的局限性。

1. RAG模式和局限性

img

标准 RAG 模式实现概述:

  • 该过程首先根据用户的问题或对话创建查询,通常通过提示语言模型 (LLM)。这通常称为查询重写步骤。
  • 然后将该查询分派到搜索引擎,搜索引擎返回相关知识(检索)。
  • 然后,检索到的信息会通过包含用户问题的提示进行增强,并转发给 LLM(增强)。
  • 最后,LLM 对用户的查询(生成)做出回应。

RAG 的局限性

  • 在 RAG 模式中,检索、增强和生成由单独的进程管理。LLM 可能会通过不同的提示来促进每个过程。然而,直接与用户交互的Generation LLM通常最了解回答用户查询所需的内容。检索LLM 可能不会以与生成LLM 相同的方式解释用户的意图,从而为其提供可能妨碍其响应能力的不必要的信息。
  • 每个问题都会执行一次检索,没有来自 Generation LLM 的任何反馈循环。如果由于搜索查询或搜索词等因素导致检索结果不相关,Generation LLM 缺乏纠正这种情况的机制,可能会诉诸捏造答案。
  • 检索的上下文一旦提供就不可更改且无法扩展。例如,如果研究结果表明需要进一步调查,例如检索到的文档引用了应进一步检索的另一文档,则没有此规定。
  • RAG 模式不支持多步骤研究。

2. 智能代理模型

智能代理模型在回答缺乏直接知识的问题时从人类的研究方法中汲取灵感。在此过程中,在提供最终答案之前,可以执行一次或多次搜索以收集有用的信息。每次搜索的结果可以确定是否需要进一步调查,如果需要,则确定后续搜索的方向。这个迭代过程一直持续到我们相信我们已经积累了足够的知识来回答,或者得出结论我们无法找到足够的信息来回答。有时,研究结果可以进一步阐明用户的意图和查询范围。

为了复制这种方法,建议开发一个由语言模型 (LLM) 提供支持的智能代理,用于管理与用户的对话。代理自主确定何时需要使用外部工具进行研究,制定一个或多个搜索查询,进行研究,审查结果,并决定是否继续进一步研究或寻求用户的澄清。此过程一直持续到代理认为自己已准备好向用户提供答案为止。

img

3. 实施

借助 Azure OpenAI 的 function Call,实现可以自主使用搜索工具来查找协助用户请求所需信息的代理要简单得多。仅此功能就简化了 RAG 模式的传统实现,其中查询重写、扩充和生成是单独处理的,如前所述。

代理使用系统定义的角色和目标与用户交互,同时了解其可以使用的搜索工具。当代理需要查找它不具备的知识时,它会制定搜索查询并向搜索引擎发出信号以检索所需的答案。

这个过程不仅让人想起人类行为,而且比 RAG 模式更有效,在 RAG 模式中,知识检索是一个单独的过程,向聊天机器人提供信息,无论是否需要。

要实现此功能:

    1. 定义角色、预期行为和要使用的工具以及何时使用。

img

    1. 定义json格式的函数规范,包含函数和参数描述。

img

有趣的是,“用于搜索知识库的搜索查询”的参数描述起着至关重要的作用。它指导LLM 根据帮助用户进行对话所需的内容制定合适的搜索查询。此外,可以描述搜索查询参数并将其限制为遵守特定的工具格式,例如Lucene查询格式。还可以结合其他参数来执行过滤等任务。

    1. 实现函数调用流程

img

此时,我们开发了一种能够进行独立搜索的智能代理。然而,为了真正创建一个能够承担更复杂的研究任务(例如多步骤和自适应执行)的智能代理,我们需要实现一些额外的功能。幸运的是,这个实施过程可以简单明了。

创建智能研究代理的增强功能

增加代理在系统消息中计划、行动、观察和调整的能力,如下所示:

img

添加的指令表示机器人应该重试并根据需要更改问题。此外,它还表示机器人应该审查搜索结果以指导下一次搜索,并在需要时采用多步骤方法。这假设可以多次调用搜索工具。

由于 LLM 无法自行重复此过程,因此我们需要使用应用程序逻辑来管理此过程。我们可以通过将整个过程放在一个循环中来做到这一点。当模型准备好给出最终答案时,循环退出:

img

img

以下是演示场景中正在运行的智能代理:

img

问题是对两种产品之间的功能进行比较。每个产品的功能都存储在单独的文档中。为此,我们的代理执行两个搜索查询:

  • Radio 0 的 X100 与 Z200 功率曲线
  • 无线电 0 的 X100 功率配置文件

第一个查询是一种贪婪方法,因为代理希望有一个包含比较的文档。情况并非如此,因为搜索查询没有返回有关 X100 的足够信息,因此添加了专用于 X100 的第二个查询。

如果将其提供给经典的 RAG 解决方案,它将无法找到好的答案,因为它会在第一个查询处停止。

结论

实施代理模型可以显着增强基础 ChatGPT 解决方案。这是由于该模型具有测试各种策略并根据观察到的结果改进其方法的智能能力**。**

类似的帖子