为了账号安全,请及时绑定邮箱和手机立即绑定

复合AI系统的设计模式(对话AI、副驾及RAG)

如何使用开源工具构建可配置的流程和复合AI系统。

复合AI系统是什么?

最近,伯克利的研究人员撰写了一篇文章——TheShift从模型到复合AI系统, 在这篇文章中,他们总结了LLM应用的进展,并强调了构建智能系统时,复杂组件协同工作的演变性质,而不是一个封闭的单一模型。尽管最终系统可能使用相同的底层模型(如GPT4),但由于提示和上下文的不同,这些组件仍需被视为不同的部分。

这些系统的常见部署模式:

  1. RAG(检索和理解是关键) — 通过访问思想生成、推理和上下文数据,这些系统能够自我反思并尝试以高级方式理解用户的查询,然后再回复答案。理想设置是一个 Agent Assist 系统。当与用户界面模型/系统(如对话模型)结合时,RAG 系统可以成为会话 AI 或 CoPilot 系统的一部分。
  2. 多代理问题解决者(协作角色扮演是关键) — 这些系统依赖于基于代理输出相互输入的协作和自动化解决方案构建,每个代理都有明确的角色和目的。每个代理都有自己的工具集,并可以承担非常特定的角色,在推理和规划其行动时。
  3. 会话 AI(对话是关键) 自动化软件,如 客户服务代理,在应用程序/生态系统中与人类互动,并根据人类的输入和验证执行可重复的任务。这里最重要的是对话记忆和对话生成,让人感觉像是在与人类交谈。对话模型可以访问底层的 RAG 系统,或一个多代理问题解决者。
  4. CoPilots(人机交互界面是关键) — 通过访问工具、数据、推理和规划能力以及专业配置文件,这些系统可以独立地与人类互动,解决具有封闭解决方案的问题。成为 CoPilot 的关键在于对人类工作环境的理解。例如:MetaGPT 研究员:搜索网络并撰写报告对 Devin 的审慎看法让我们用 CrewAI 建造一些东西Autogen Studio

注意:根据我部署多个使用LLM的系统后的证据,我可以安全地说,这些系统并不是大家期望的万能解决方案。就像任何其他AI系统一样,你需要围绕LLM做大量的工程工作,才能让它们完成基本的任务,即使这样,它们也不能保证可靠和可扩展的性能。

有希望的方向:在你的生态系统中使用LLM的最大价值在于,能够促进机器学习,即理解你的产品或体验的弱点,并以一种长期提高性能的方式将数据反馈到系统中。想象一下,用LLM来替代或减少人工标注的工作。但在封闭系统中,我们可以通过测试和评估LLM的输出,发现它们可以做很多意想不到的事情!尽管代价高昂,但这也为构建更好的LLM生成了数据。这种机器学习赖以生存的反馈效应,是LLM带来的最大价值。

这些系统的组成部分及其如何相互作用以构建复杂系统

复合AI系统通常通过相互连接的“模块”部署,这些模块依赖彼此来完成某些任务,并链接在一起以执行设计模式。

在这里,模块指的是系统中的独立组件,它们可以执行定义明确的任务,这些任务可以借助于底层系统(如搜索引擎、LLM等)完成,也可以不借助。一些常见的模块包括生成器、检索器、排名器、分类器等,这些在自然语言处理中通常被称为任务。这些是领域特定的概念抽象(例如,NLP模块可能与计算机视觉或推荐系统中的抽象模块不同,但它们可能都依赖于相同的底层模型服务或搜索提供者)。

模块的关键组件

一些其他的通用模块

在流行的AI文化中,我们已经习惯了诸如工具代理组件这样的术语,这些都可以被视为模块。

基于LLM的自主代理——复合AI系统中的关键模块

一种模块形式是自主代理它可以在大型语言模型(LLM)的帮助下自主地进行推理和规划。自主代理可能依赖于一系列子模块来决定如何在与环境交互时进行推理和规划动作。

来源

自主代理模块的关键能力或技能:

推理能力,导致一系列思考,最终形成行动计划。

  1. 推理 — 通过观察、生成假设并基于数据等进行验证来解决问题的逻辑方法。
  2. 思考 — 应用推理并生成因果关系的连贯表述。
  3. 思维链 — 一系列思想,将解决方案分解为一系列逻辑上连接的推理步骤。
  4. 规划 — 决策技能,用于形成子目标并从当前状态构建通往未来状态的路径。这通常得益于能够访问底层环境以采取行动并从中学习。更多关于大语言模型规划的信息请参阅 这里
  5. 工具 — 子模块,允许代理根据代理的指令与外部世界交互。
  6. 行动 — 如其名称所示,这是代理为实现目标而采取的决定性步骤,通过计划。工具可能被调用来触发行动。行动在环境中执行。
  7. 环境 — 行动和奖励源自其中的外部世界,如自定义应用程序(如 Microsoft Word、编码环境)或游戏、模拟等。
我们在和随机鹦鹉打交道吗?

注意:尽管有关于LLM缺乏推理和规划能力的大量理论工作,参见 ,但很明显,LLM能够很好地模仿“解决方案方法”。也就是说,如果给定一个需要解决的问题,并提供一些以前是如何解决该问题的例子,LLM可以很好地复制逻辑思维过程。这里我们不关心它是否能够泛化,但正如Yann Le Cunn所说,自回归模型注定失败 !

而在企业环境中,我们只需要可靠地重复任务并从以往的经验中学习,而不需要太有创意。

这些鹦鹉究竟是如何规划的?

根据这项调查,LLMs似乎能够通过以下方式增强自主代理:

  1. 任务分解 — 实际生活中的任务通常比较复杂且多步骤,给规划带来了很大的难度。这种方法采用“分而治之”的思想,将复杂任务分解为几个子任务,然后依次对每个子任务进行规划,例如 TDAG
  2. 多计划选择 — 这种方法侧重于引导大模型“思考”更多,为一个任务生成多个备选计划。然后使用与任务相关的搜索算法选择一个计划执行,例如 ReWoo。
  3. 外部模块辅助规划 — 也称为计划检索。
  4. 反思与优化 — 这种方法强调通过反思和优化来提高规划能力。它鼓励大模型在失败后进行反思并优化计划,例如自我批评和优化循环。
  5. 增强记忆规划 — 这种方法通过增加一个额外的记忆模块来增强规划,其中存储有价值的信息,例如常识知识、过去的经验、领域特定知识等。在规划时检索这些信息,作为辅助信号。

了解LLM代理的规划:一项调查

我们如何为这些能力进行训练,特别是对于RAG?参见针对企业RAG的LLM微调——设计视角,以深入了解。

有了这些模块抽象的概念,让我们看看不同的设计模式是如何被开发出来以解决对话式人工智能、RAG和CoPilot系统中的复杂问题的。

复合AI系统的设计模式
一些澄清定义

由于当前围绕AI的“流行文化”环境,存在一些被误用和误解的术语,这迫使我在继续之前澄清一些事项:

  1. 什么是“代理式”模式?
    自主代理的核心优势在于它可以自行决定采取哪些步骤。如果我们必须手动定义流程或决策,那么它只是一个智能工作流。但如果流程未定义,且决策是由上述能力、工具和行动共同启用的,那么这就是一个“代理式”模式。例如,代理式RAG是一种模式,其中模块被赋予搜索工具的访问权限,并且它会自动产生复杂的搜索流程,而无需任何预定义的步骤。
  2. 什么是“工作流”?
    简单来说,工作流是一种预编码且手动声明的计划,它可以以可预测和可重复的方式解决问题。
  3. 什么是“多代理”?
    一个多代理系统是指不同的模块,承担不同的角色和职责,相互之间进行交互,共同处理彼此的输出并协作解决问题。

当构建一个代理时,一些需要优化的关键点包括:

  1. 代理 角色设定 — 代理的行为方式,主要由提示驱动,高度依赖于“角色”设定。
  2. 代理 通信 — 这些模块之间的常见通信模式可以抽象为下图所示。
  3. 代理环境 接口 — 收集执行环境的反馈以学习、适应并使生成更加实际非常重要。
  4. 代理 学习 和进化 — 代理系统通过与环境(特别是对于编码助手)、其他代理、自我反思、人类反馈、工具反馈等互动来学习。我们将探讨每种架构在实时解决问题时所使用的策略。
选择模式前的考虑因素

为了抽象并定义允许开发RAG(检索增强生成)、对话式AI、副驾和复杂问题解决者的设计模式,我们需要问以下问题:

  1. 模块之间的流程定义明确还是自主的? Engineered flow vs Agent System.

  2. 流程是单向的还是“消息传递”启发式的?是合作的还是竞争的? Agent Modulo .

  3. 流程是否可以自我学习?自我反思和纠正是否重要?
    - 是否可以有推理和行动的循环?
    - 模块之间是否可以相互提供输入?

  4. 每个模块的输出是否可以在环境中进行测试?

  5. 流程的执行是否具有状态性,或者会随着用户的输入而变化?
部署模式 1 — RAG / 对话式 RAG

下面的图表展示了RAG/对话式RAG系统中各个模块的主要职责。这通常是一个信息检索领域,最初通过神经搜索、知识图谱得到了改进,然后通过使用LLMs的生成循环方法进一步提升。对话式信息检索是当信息检索系统和对话系统融合,将查询视为在对话过程中会变化的上下文对象时,对这一系统的一种视角。

为了RAG系统的成功,理解用户的查询并将其映射到底层知识(结构化或非结构化),然后将其提供给生成器/对话管理器并附上适当的指令,这一点至关重要。所有这些操作可以通过一个定义明确的工作流程来执行,或者通过代理模块来完成,这些模块可以动态决定执行哪些步骤(将在下一节中进一步阐述)。

一个 RAG 流程,交由对话管理器处理 — 如果对话管理器是一个代理,RAG 可以作为一个工具

让我们来看看一些中间模块/工具,它们允许代理在这个复杂的RAG世界中导航。

查询理解和重构

查询扩展 / 多查询

使用大语言模型来扩展查询可以提升在使用稀疏和统计检索器时的搜索结果。

查询重写 / 自我查询

一个自我查询的检索器,正如其名称所暗示的那样,具有自我查询的能力。具体来说,对于任何自然语言查询,检索器使用一个查询构建的LLM链来编写结构化查询,然后将该结构化查询应用于其底层的向量存储。这使得检索器不仅可以使用用户输入的查询与存储文档的内容进行语义相似性比较,还可以从用户查询中提取存储文档的元数据过滤条件,并执行这些过滤条件。

实体识别

查询增强

知识或意图检索

多文档搜索

对话管理

响应生成

代理型检索增强生成(Agentic RAG)

Agentic RAG 是一种设计模式,其中由 LLM 驱动的模块根据可用工具集来推理和规划如何回答一个问题。在高级场景中,我们还可以将多个代理连接起来,以创造性的方式解决 RAG 问题,代理不仅检索信息,还验证、总结等。有关这方面的更多信息,请参见多代理部分。

需要精炼的关键步骤和组件:

  1. 根据推理、子任务定义和系统安排进行规划。
  2. 基于自洽性进行自我修正,由于生成多个路径和推理,基于规划的RAG方法(ReWoo和Plan+)比仅基于推理的方法(ReAct)表现更好。
  3. 根据执行情况进行适应,采用更符合多代理范式的模式。

通常,这些操作会使用以下模式执行:

基于推理的代理型检索和生成(Agentic RAG)

ReAct

ReAct:语言模型中的推理与行动协同作用在大型语言模型(LLMs)中,已经在语言理解和各种任务中展示了令人印象深刻的能力……arxiv.org

使用搜索工具进行推理和行动

基于规划的代理式检索和生成(Agentic RAG)

https://blog.langchain.dev/规划代理/

ReWoo

ReWOO: 解耦推理与观察以实现高效的增强型语言模型增强型语言模型 (ALMs) 结合了大型语言模型 (LLMs) 的推理能力与允许……arxiv.org

ReWoo — 导致生成的令牌数量远低于 ReAct。

参阅 以获取更多关于为什么ReAct比ReWoo更差的详细信息。

PlanRAG

它由两个部分组成:首先,制定一个计划将整个任务分解为较小的子任务,然后根据计划执行这些子任务。

计划与解决提示:通过大型语言模型改进零样本链式思维推理大型语言模型(LLM)最近在各种NLP任务中表现出令人印象深刻的性能。为了应对……arxiv.org
部署模式2—对话式AI

传统上,对话流程是高度脚本化的“Bot 说” -> “人说” -> “Bot 说”… 表示不同的假设现实场景,也被称为“故事”(Rasa 开发者术语)。每个用户的 意图 可以通过成百上千的“故事”来表达,这些“故事”基于用户的状况和互动。Bot 会采取行动来执行定义好的故事,并用预设的响应回复用户。例如,如果用户想要订阅一份通讯,可能会有两条路径:

  1. 用户已订阅。

  2. 用户未订阅。

来源

如果用户通过说“我该如何订阅通讯”触发了意图,机器人需要检查用户是否已经订阅,然后采取适当的下一步行动。这个“下一步该做什么”的决策路径是手动硬编码的。如果路径有任何偏离,机器人应该说,“抱歉,我还在学习中,我可以帮助你处理xyz...”。

构建和维护机器人的真正成本来源于这些故事。之所以要做像上述这样繁琐的模式,是为了让机器人能够应对各种现实世界的场景,并且新的路径可以以一种有组织的方式添加。但是,路径编写者总是会考虑到一些“需要检查的条件”、“需要执行的操作”以及“对话的最终目标”,以便编写一个具有目的性的脚本。

借助LLM,我们尝试使用“推理”和“规划”能力来自动化脚本编写或路径规划——更多详情请参阅这里,并采用一个强大的人机协作系统。

想象你是一名客服代表,有一个用户向你提出了同样的请求,如何订阅你们的服务?你会如何定义下一步应该采取的行动?它可以完全开放吗?很可能不能,但也不能像上面那样高度脚本化以控制成本。如果我告诉你以下内容:

条件 — 如果email存在,用户可以订阅_

_工具 — check_subscription, addsubscription

然后作为一个自尊心强的人,你就会能够在脑海中编织出如下这样的故事:

  1. 用户想要订阅,基于这句话 —— “我该如何订阅?”
  2. 询问 用户邮箱 —— “你的邮箱是什么?”
  3. 如果他提供了一个有效的邮箱,触发 工具 —— 检查订阅状态
  4. 如果用户尚未订阅,触发 添加订阅
  5. 回复 成功或失败的信息。

而这正是我们希望LLM完成的任务,生成“计划”,这些计划可以作为蓝图供其在运行时参考并执行。了解更多关于计划和推理的拆分内容,请参阅这里

回到模块模板,让我们看看规划器可能是什么样子:

上面的规划器可以使用工具和条件在设计时或运行时构建计划或故事。让我们来看一个研究中的实际例子:

KnowAgent: 增强知识的LLM代理规划Large语言模型(LLMs)在复杂推理任务中表现出巨大的潜力,但在……arxiv.org

KnowAgent: 基于知识增强的LLM代理规划

有哪些工具可以在运行时帮助规划者通过可靠的推理来决定路径?

  1. 之前由类似陈述触发的路径。

  2. 企业行动图,以及行动之间的依赖关系。这将帮助规划者决定一个行动是否会导致正确的结果,进而引导到下一个行动,以此类推,直到递归地解决问题。参见 有关 Neo4J 和 Langchain 在现实世界中集成知识图谱和规划的示例,不一定与规划路径相关。

  3. 当前用户 / 对话的状态。
部署模式 3 — 多代理

在多代理设置中,目标是为由精确工具支持的大型语言模型驱动的生成器定义角色和职责,以便它们能够协同工作以提出智能答案/解决方案。

由于角色定义明确和底层模型的存在,每个代理都可以将一个子目标或“计划”的一部分委托给“专家”,然后根据输出决定下一步该做什么。详见文末的GPTPilot示例以获取更多细节。

探索基于大型语言模型的智能代理:定义、方法和前景智能代理被视为通向通用人工智能(AGI)的潜在路径。因此,研究人员……arxiv.org

这些模式是通过以下通信模式执行的,这些模式控制了在执行链中定义下一步的权限。更多详情请参阅《编排代理系统》更多内容

代理/模块如何通信以构建现实世界的CoPilots — https://arxiv.org/pdf/2402.01680v1.pdf

多代理设计的好处

  • 关注点分离:每个代理可以有自己的指令和少量示例,由独立的微调语言模型提供支持,并由各种工具支持。将任务分配给不同的代理可以带来更好的结果。每个代理可以专注于特定任务,而不是从众多工具中选择。
  • 模块化:多代理设计允许将复杂问题分解为可管理的工作单元,由专门的代理和语言模型处理。多代理设计允许你独立评估和改进每个代理,而不会干扰整个应用程序。将工具和职责分组可以带来更好的结果。当代理专注于特定任务时,更有可能成功。
  • 多样性:引入代理团队的多样性,带来不同的视角,以优化输出并避免幻觉和偏见。(就像典型的团队一样)。
  • 可重用性:一旦代理构建完成,可以将这些代理用于不同的用例,并考虑一个代理生态系统,这些代理可以协同工作来解决问题,通过适当的编排框架(如AutoGen、Crew.ai等)协调。
部署模式 4—CoPilot

我看到的CoPilot系统唯一的不同在于它通过与用户互动和测试功能所获得的学习。

更多内容即将推出..

框架 vs 实现

区分构建这些CoPilots的框架和实际的实现(如GPT Pilot和aider)是很重要的。在大多数情况下,没有一个开源的CoPilots是基于这些框架开发的,而是所有实现都是从头开始开发的。

我们将要回顾的流行实现:OpenDevinGPT Pilot

我们将要回顾的热门研究论文:AutoDevAgentCoder

流行的框架 — FabricLangGraphDSPyCrew AIAutoGen,Meta GPT,Super AGI 等。

尽可能地,我们将尽量遵循以下定义用于基于LLM的多代理系统

深入了解 — 应用程序
GPT Pilot

GPT Pilot 项目是一个创意提示工程和链式调用大语言模型响应以执行看似复杂的任务的绝佳示例。

有几个配置文件以分层通信的方式工作,见下面的绿色框:

<https://www.reddit.com/r/MachineLearning/comments/165gqam/创建了GPT Pilot一个面向代理的科研项目/>

各个代理以分层的方式进行交互,从一个节点触发到下一个节点,没有任何决策制定的代理参与其中。

有一些精美的原则已经被该产品采用,使其运行良好:

  1. 将任务分解为小的可实现模块,以便LLM为这些模块生成代码。
  2. 测试驱动开发,从人类那里收集好的用例,以便能够准确地验证和迭代。
  3. 上下文回溯和代码总结。

尽管上述复杂的提示工程和流程设计,每个代理的微调带来的好处不容忽视,以降低成本并提高准确性。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消