1、引言
尽管当前研究者在AI Agent领域投入了巨大努力,但从业者在构建和实施基于基础模型(Foundational Model,FM)的Agent方面面临着陡峭的学习曲线。文章注意到存在一系列可重用的解决方案,这些解决方案可以归纳为模式,以解决设计基于FM的Agent的多样化挑战。然而,Agent的架构设计和架构模式的集合尚未得到系统的探索和制定。
在这方面,本文提出了一个用于设计基于FM的Agent的架构模式目录。在软件工程中,架构模式是软件设计中常见问题的一个可重用的解决方案。因此本文希望基于收集的架构模式,对基于FM的Agent设计和实现感兴趣的软件架构师和开发人员提供指导。
2、架构模式提取方法
上图展示了AI Agent架构模式的提取和收集过程。
首先,笔者对基于基础模型(FM)的代理进行了系统性文献回顾(SLR)。其专注于可用的、高度学术性的材料和研究工作。根据一系列预设的标准选择相关论文,并通过进行正向和逆向的滚雪球过程来识别遗漏的材料。在确定了论文池后,笔者对选定的材料进行了质量评估,以确保工作的质量。最终,共有57项研究被纳入数据提取和综合。基于这些发现,本文提出了一个面向基础模型(Foundation Model, FM)Agent的模式导向参考架构。
基于报告的发现,文章深入分析了用于构建集成FM代理的识别模式。通过SLR识别了在开发和实施集成Agent的系统时遇到的一系列架构设计挑战。随后,文章进一步对这一主题进行了广泛的审查,包括灰色文献和现实世界的应用(通过审查官方网站和可用文件),以识别已知的用途。结合SLR和额外审查的发现,在本文中,笔者最终提取了对17个架构模式的分析。
3、FM Agent系统生态
上图展示了基于基础模型(Foundation Model)的Agent系统的生态系统,Agent组件和不同实体之间的交互被用相关模式进行了注释:
- 在画像模块中,主要包含被动目标创建者(4.1)和主动目标创建者(4.2)。a)被动目标创建者通过角色/任务相关的prompt分析用户表达的目标,以保持交互性、目标寻求和直观性。
b)主动目标创建者通过理解人际交互并通过相关工具捕获上下文来预测用户的目标。
在模型调用模块中,主要包含prompt/响应优化器(4.3)、一次性模型查询(4.5)和增量模型查询(4.6)。
a)prompt/响应优化器(4.3)根据期望的输入/输出内容并优化prompt/响应的格式,根据预定义的模板对其他Agent/工具的提示或指令进行优化,以满足特定格式或内容要求。
b)一次性模型查询(4.5)在单一实例中访问基础模型以生成计划的所有必要步骤。
c)增量模型查询(4.6)在计划生成过程的每一步都去访问基础模型。在规划能力中,主要包括单路径计划生成器(4.7)、多路径计划生成器(4.8)以及自我反思(4.9)
a)单路径计划生成器(4.7)通过生成单路径的计划步骤以实现用户目标。
b)多路径计划生成器(4.8)在每个中间步骤中创建多个选择,以实现用户目标。
c)自我反思(4.9)使Agent能够生成对计划和推理过程的反馈,并提供自身改进指导。在行动能力中,主要包含检索增强生成(4.4)以及工具/Agent注册表(4.16)。
a)检索增强生成可以提升Agent的知识更新能力,同时维护本地基础模型Agent/系统实现的数据隐私。
b)工具/Agent注册表是指通过注册表的形式维护一个统一且方便的调用来源,供用户选择多样化的Agent和工具。在多Agent协作方面,主要包含了交叉反思(4.10)以及基于投票的、基于角色的或基于辩论的合作(4.12-4.14)。
a)交叉反思使用不同的Agent或基础模型提供反馈,以优化生成的计划和相应推理过程。
b)基于投票的合作是指Agent可以自由提供意见,并通过投票达成共识。
c)基于角色的合作是指根据Agent的角色分配任务,并根据角色做出决策。
d)基于辩论的合作是指Agent接收其他Agent的反馈,并在与其他Agent的辩论中调整思想和行为,直到达成共识。在人机协同方面,主要包含了人类反思(4.11)和Agent评估器(4.17)。
a)人类反思(4.11)收集人类反馈以改进计划,有效与人类偏好对齐。
b)Agent评估器在设计时和运行时评估Agent的性能,同时可以执行测试,根据多种需求和指标来评估Agent。
4、17种架构模式总结
4.1 被动目标创建者(Passive Goal Creator)
被动目标创建者通过对话接口分析用户表达的目标,以保持交互性、目标寻求和直观性。
当用户通过prompt向Agent解释他们期望实现的目标时。Agent在给定的上下文信息不足时,可能会对用户的指令生成不准确的响应。- 交互性:用户需要与Agent交互以提供指令并接收响应。
- 目标寻求:Agent需要尽可能多的信息来理解用户的目标。
解决方案:如图所示,被动目标创建者提供了一个对话接口,用户可以直接指定场景和问题,这些信息被传递给被动目标创建者以生成目标。同时,被动目标创建者也可以从记忆中检索相关信息,包括正在处理的工件库、最近任务中使用的相关工具、对话历史记录以及正面和负面的例子。这些信息被附加到用户的prompt中,以实现目标寻求。生成的目标被发送到其他组件进行进一步的任务分解和完成。在这种情况下,Agent被动地接收来自用户的输入,并生成实现目标的策略,因为它只接收用户提供的上下文信息。- 目标寻求:Agent可以分析用户提供的上下文信息,确定目标并创建相应的策略。
- 直观性:用户可以直接指定目标,向Agent提供上下文,并通过对话接口接收Agent的响应,这是直观且易于使用的。
响应不准确性:由于用户可能具有不同的背景和经验,且没有标准的prompt要求,不清晰的用户提供的上下文信息可能导致Agent产生幻觉反应。- HuggingGPT 可以通过聊天机器人生成响应以解决用户请求。用户的请求,包括复杂的意图,可以被解释为他们预期的目标。
- 主动目标创建者:主动目标创建者可以被视为被动目标创建者的替代方案,它支持多模态上下文注入。
- prompt/响应优化器:被动目标创建者首先处理用户的输入,然后将目标和相关的上下文信息传递给prompt/响应优化器以优化prompt。
4.2 主动目标创建者(Proactive Goal Creator)
通过理解人际交互并通过相关工具捕获上下文来预测用户的目标。 主动目标创建者通过理解人际交互并利用相关工具捕获上下文,来预测用户的目标。用户通过prompt向Agent解释他们期望实现的目标。仅通过对话接口收集的上下文信息可能有限,可能导致对用户目标的响应不准确。- 交互性:用户需要与Agent交互以提供指令和接收响应。
- 目标寻求:Agent需要尽可能多的信息来理解用户的目标。
- 可访问性:可能有特定残疾的用户无法直接通过被动目标创建者与Agent进行交互。
上图展示了主动目标创建者的简单图形表示。除了来自对话接口的prompt和从记忆中检索的相关上下文外,主动目标创建者可以通过向探测器发送需求来预测用户的目标,然后探测器将捕获并返回用户周围环境的信息,以便进行进一步的分析和理解以生成目标。例如,通过摄像头识别用户的手势,或通过屏幕截图识别应用程序 UI 布局等。主动目标创建者应以低误报率通知用户有关上下文捕获和其他相关问题,以避免不必要的中断。 - 交互性:用户可以通过提供多模态信息与Agent交互。此外,在多Agent环境中,主动目标创建者可以通过主动预测他们的决策来促进不同Agent之间的交互。
- 目标寻求:多模态输入可以为Agent提供更详细的信息,以帮助理解用户的目标,并提高生成响应的准确性。
- 可访问性:额外的工具可以帮助捕获来自残疾用户的情感和其他上下文信息,确保可访问性并扩大基础模型Agent的人文价值。
开销:i) 主动目标创建者由相关工具捕获的多模态上下文信息启用,这可能会增加Agent的成本。ii) 有限的上下文信息可能会增加用户和Agent之间的通信开销。- GestureGPT 能够解读用户的手势描述,从而理解用户的意图。
- 编程屏幕录像分析工具,可以提取编码步骤和代码片段。
- ProAgent 可以观察其他队友Agent的行为,推断他们的意图,并相应地调整计划。
- 被动目标创建者:主动目标创建者可以被视为被动目标创建者的替代方案,支持多模态上下文注入。
- prompt/响应优化器:主动目标创建者首先处理用户的输入,然后将目标和相关上下文信息传递给prompt/响应优化器,以优化prompt。
通过主动目标创建者模式,Agent能够更全面地理解用户的目标和意图,即使在用户无法直接通过标准界面与Agent交互的情况下也能提供准确的响应。这种模式增强了Agent的预测能力和对用户需求的响应性。4.3 Prompt/响应优化器(Prompt/Response Optimiser)
根据期望的输入或输出内容和格式优化prompt/响应。prompt/响应优化器根据期望的输入或输出内容和格式,对prompt(prompts)和响应(responses)进行优化。用户可能在撰写有效的prompt方面存在困难,尤其是在需要注入全面上下文的情况下。同样,在某些情况下,用户可能难以理解Agent的输出。如何生成与用户目标或目的一致的有效prompt和标准化响应?- 标准化:prompt和响应可能在结构、格式和内容上有所不同,这可能导致Agent的潜在混淆或不一致行为。
- 响应准确性:确保prompt和响应与最终目标或目的一致,可以帮助Agent实现期望的结果。
- 互操作性:生成的prompt和响应可能直接输入到其他组件、外部工具或Agent中,以完成进一步的任务。
上图展示了prompt/响应优化器的高级图形表示。用户可能向Agent输入初始prompt,但由于缺乏相关上下文或无意的注入攻击等原因,这些prompt可能效果不佳。在这方面,prompt/响应优化器可以根据预定义的约束和规格构建优化的prompt。这些约束和规格概述了输入和输出的期望内容和格式,确保与最终目标一致。prompt或响应模板通常在prompt/响应优化器中使用,作为创建特定实例的prompt或响应的工厂。此模板提供了一种结构化方法来标准化查询和响应,提高响应的准确性,并促进与外部工具或Agent的互操作性。例如,prompt模板可以包含对Agent的指令、一些少样本学习的示例,以及Agent要解决的问题/目标。- 标准化:prompt/响应优化器可以创建符合模板中指定要求的标准化prompt和响应。
- 响应准确性:优化的prompt和响应符合用户定义的条件,因此它们可以实现更高的准确性和与目标的相关性。
- 互操作性:prompt/响应优化器促进了Agent与外部工具之间的互操作性,它可以提供一致且定义良好的prompt和响应。
- 适应性:prompt/响应优化器可以通过使用知识库完善模板,适应不同的约束、规格或特定领域要求。
- 响应不准确性:在某些情况下,prompt/响应优化器可能难以有效地捕获和整合所有相关上下文信息,特别是考虑到用户输入的歧义性和对上下文工程的依赖性。因此,优化器可能难以生成适当的prompt或响应。
- 维护开销:更新和维护prompt或响应模板可能会导致显著的开销。需求的变化可能需要修改多个模板,这既耗时又容易出错。
- LangChain:LangChain 提供prompt模板,供从业者开发定制的基础模型Agent。
- Amazon Bedrock:用户可以在 Amazon Bedrock 中配置prompt模板,定义Agent应如何评估和使用prompt。
- Dialogflow:Dialogflow 允许用户创建生成器,以在运行时指定Agent行为和响应。
- 被动目标创建者和主动目标创建者:可以先处理用户的输入,然后将目标和相关的上下文信息传递给prompt/响应优化器,以优化prompt。
- 自我反思、交叉反思和人工反思:反思模式可以应用于评估和完善prompt/响应优化器的输出。
通过这种方式,prompt/响应优化器模式帮助确保Agent与用户的交互更加高效和准确,同时提高了系统的互操作性和适应性。4.4 检索增强生成(Retrieval Augmented Generation, RAG)
增强Agent的知识更新能力,同时维护本地基础模型Agent/系统实现的数据隐私。检索增强生成技术通过从其他来源(内部或在线数据)检索事实来增强Agent的准确性和可靠性。大型基础模型Agent不具备通过模型训练学习到的特定领域相关知识,尤其是涉及高度保密和隐私敏感的本地数据。给定一个任务,Agent如何使用基础模型未通过模型训练学习到的数据/知识进行推理?- 推理不确定性:当Agent需要完成特定领域的任务,而这些任务在Agent没有知识储备时,推理过程可能是不可靠的。
- 开销:使用本地数据微调大型基础模型或在本地训练大型基础模型需要消耗大量的计算和资源成本。
- 数据隐私:本地数据是保密的,不能用于训练或微调模型。
上图展示了检索增强生成的高级图形表示。RAG 是一种技术,通过从其他来源(内部或在线数据)检索事实来增强Agent的准确性和可靠性。Agent在记忆中缺乏的知识空白可以通过向量数据库中生成的参数化知识来填补。例如,在计划生成期间,特定步骤可能需要原始Agent记忆中没有的信息。Agent可以从参数化知识中检索信息并用于计划,而增强的响应(即计划)将返回给用户。检索过程不需要对Agent服务的基础模型进行预训练或微调,这保留了本地数据的数据隐私,减少了训练和计算成本,并提供了所需的最新和更精确的信息。目前有一系列 RAG 技术,专注于各种增强方面、数据源和应用等。- 推理确定性:Agent可以搜索和检索与给定任务相关的知识,确保推理步骤的可靠性。
- 可更新性:使用 RAG 由Agent生成的prompt/响应可以通过补充的参数化知识进行更新。
- 数据隐私:Agent可以从本地数据存储中检索额外知识,确保数据隐私和安全。
- 成本效益:在数据隐私约束下,RAG 可以在不完全训练新的基础模型的情况下为Agent提供必要的知识。这降低了训练成本。
- 维护开销:维护和更新向量存储中的参数化知识需要额外的计算和存储成本。
- 数据限制:Agent仍然主要依赖于其训练过的数据来生成prompt。这可能会影响到特定领域中生成内容的质量和准确性。
- LinkedIn:LinkedIn 应用 RAG 构建基于基础模型的Agent管道,该管道可以搜索适当的案例研究以响应用户。Yan 等人设计了一个检索评估器,在评估检索数据的质量后可以输出置信度。该解决方案可以提高 RAG 对Agent的鲁棒性和整体性能。
- 数学辅助:使用 GPT-3.5 应用 RAG,开发了一个Agent,可以检索高质量开源数学教科书的内容,以生成对学生的响应。
检索增强生成可以通过提供来自本地数据存储的额外上下文信息,补充所有其他模式。通过检索增强生成模式,智能Agent能够更加准确地理解和回应复杂的查询,同时保护用户数据的隐私和安全。这种模式特别适用于需要结合最新信息或特定领域知识以提供精确答案的场景。4.5 一次性模型查询(One-shot Model Querying)
在单一实例中访问基础模型以生成计划的所有必要步骤。在单一实例中访问基础模型以生成计划所需的所有必要步骤。当用户与Agent交互以实现特定目标时,所包含的基础模型将被查询以生成计划。- 效率:对于某些紧迫的任务,Agent应该能够快速进行规划并做出响应。
上图展示了用户与Agent在一次性模型查询中的交互。用户在一次prompt中指定目标和约束后,Agent将查询集成的基础模型以生成相应的响应(例如,行动计划)。基础模型不需要多次交互就能理解上下文和要求。通过这种方式,Agent可以制定一个多步骤的计划来实现一个广泛目标,并为这个计划提供一个整体的解释,而无需深入到详细的推理步骤中。- 效率:Agent可以通过仅查询一次基础模型来生成实现用户目标的计划,节省了时间。
- 成本效益:由于基础模型只被查询了一次,用户的费用可以减少。
- 简单性:一次性模型查询可以满足不需要复杂行动计划的任务。
- 过度简化:对于复杂任务,一次性模型查询可能无法一次捕获所有要求,因此过度简化了任务并且不能返回正确的响应。
- 缺乏可解释性:由于只查询了一次基础模型,一次性模型查询可能缺乏可解释性,可能无法提供计划生成的详细推理步骤。
- 上下文窗口大小:考虑到基础模型处理长对话上下文和令牌限制的当前能力,响应质量可能受到限制。
当用户利用基础模型时,一次性模型查询可以被视为默认的配置或使用方式,而CoT和Zero-shot-CoT都是这种模式的示例。- 增量模型查询(Incremental Model Querying):增量模型查询可以被视为一次性模型查询的替代方案,具有迭代功能。
- 单路径计划生成器(Single-path Plan Generator):一次性模型查询通过仅对基础模型进行一次查询,启用了单路径计划的生成。
4.6 增量模型查询(Incremental Model Querying)
增量模型查询涉及在计划生成过程的每一步访问基础模型。当用户与Agent交互以实现特定目标时,所包含的基础模型将被查询以生成计划。基础模型可能在第一次尝试时难以生成正确的响应。Agent如何进行准确的推理过程?- 上下文窗口大小:基础模型的上下文窗口可能有限,因此用户可能无法提供完整和全面的prompt。
- 过度简化:推理过程可能过于简化,因此只有一次模型查询尝试就可能存在不确定性。
- 缺乏可解释性:基础模型生成的响应需要详细的推理过程以保持可解释性和最终的可信度。
上图展示了用户和Agent在增量模型查询中的交互。Agent可以通过逐步推理过程,通过多次查询基础模型来制定实现目标的计划。与此同时,用户反馈可以随时提供给推理过程和生成的计划,并且在模型查询过程中相应地进行调整。请注意,增量模型查询可以依赖于一个可重用的模板,该模板通过上下文注入或明确的工作流程/计划存储库和管理指南来指导过程。
- 补充上下文:增量模型查询允许用户通过多个prompt来分割上下文,以解决上下文窗口限制的问题。
- 推理确定性:基础模型将通过自我检查或用户反馈迭代地完善推理步骤。
- 可解释性:用户可以通过增量模型查询查询基础模型以提供详细的推理步骤。
开销:i) 增量模型查询需要与基础模型多次交互,这可能会增加规划确定的时间消耗。ii) 当使用商业基础模型时,大量的用户查询可能是成本密集型的。- HuggingGPT:HuggingGPT的基础模型被多次查询,以将用户请求分解为细粒度的任务,然后确定任务的依赖关系和执行顺序。
- EcoAssistant:EcoAssistant应用代码执行器与基础模型交互,以迭代地改进代码。
- ReWOO:ReWOO查询基础模型来i) 生成相互依赖计划的列表,以及;ii) 结合从工具中获取的观察证据与相应的任务。
- 一次性模型查询:增量模型查询可以被视为带有迭代的一次性模型查询的替代方案。
- 多路径计划生成器:Agent可以在每一步捕获用户的偏好,并通过迭代查询基础模型来生成多路径计划。
- 自我反思:自我反思要求Agent多次查询其集成的基础模型以进行响应审查和评估。
- 人类反思:人类反思通过增量模型查询得以实现,以在用户/专家和Agent之间进行迭代通信。
4.7 单路径计划生成器(Single-path Plan Generator)
通过生成单路径的计划步骤以实现用户目标。 单路径计划生成器协调生成中间步骤,以实现用户目标。Agent可能对用户来说是一个“黑箱”,而用户可能关心Agent是如何实现用户目标的过程。上图展示了单路径计划生成器的高级图形表示。在接收并理解用户目标后,单路径计划生成器可以协调为其他Agent或工具创建中间步骤,并确定任务优先级,以逐步实现目标完成。具体来说,这个过程中的每个步骤都被设计为只有一个单一的后续步骤,例如思维链(Chain-of-Thought, CoT)。自我一致性被用来多次确认基础模型,并选择最一致的答案作为最终决策。4.8 多路径计划生成器(Multi-path Plan Generator)
多路径计划生成器在实现用户目标的每个中间步骤中都允许创建多种选择。Agent对用户来说可能被视为“黑箱”,而用户可能关心Agent是如何实现用户目标的过程。当面对复杂任务或问题时,Agent如何生成高质量、连贯、高效的解决方案,同时考虑到包容性和多样性?欠规格化:用户可能分配具有高层次抽象的任务,这对Agent来说可能难以处理所提供的上下文中的不确定性或模糊性。
连贯性:用户和其他交互工具/Agent将期望为实现特定目标提供一致的响应或指导。
符合人类偏好:某些目标要求Agent捕获用户的偏好,以提供定制化的解决方案。
- 过度简化:对于特定复杂任务,Agent可能过度简化推理过程,因此提供的解决方案无法满足用户的要求。
展示了多路径计划生成器的高级图形表示。基于单路径计划生成器,多路径计划生成器可以在实现目标的每个步骤中创建多种选择。用户的偏好可能影响随后的中间步骤,导致不同的最终计划。所涉及的Agent和工具的使用将相应调整。Tree-of-Thoughts(ToT)是这种设计模式的一个例子。推理确定性:多路径计划生成器可以生成具有多种中间步骤选择的计划,以解决推理过程中的不确定性或模糊性。
连贯性:交互用户、Agent和工具提供了一条清晰、连贯的通往最终目标的路径。
符合人类偏好:用户可以确认每个中间步骤以完成计划,因此人类偏好被纳入生成的定制策略中。
- 包容性:Agent可以在复杂任务的推理过程中指定多个方向。
开销:任务分解和多计划生成可能增加用户和Agent之间的通信开销。 4.9 自我反思(Self-Reflection)
使Agent能够生成对计划和推理过程的反馈,并提供自身的改进指导。自我反思使Agent能够对计划和推理过程生成反馈,并提供自身改进指导。鉴于用户的目标和需求,Agent将生成计划,将目标分解为实现目标的一系列任务。生成的计划可能会受到基础模型的幻觉影响,如何有效审查计划和推理步骤并纳入反馈?展示了自我反思的高级图形表示。特别是,反思是一个优化过程,正式化为迭代审查和改进Agent生成的响应。用户通过prompt向Agent明确目标,然后Agent生成计划以满足用户的需求。随后,用户可以指示Agent反思计划以及推理过程。Agent将审查响应以识别和精确定位错误,然后生成一个改进的计划,并相应调整其推理过程。最终确定的计划将逐步执行。推理确定性:Agent可以评估自己的响应和推理程序,检查是否存在错误或不当输出,并相应进行改进。
可解释性:自我反思允许Agent向用户回顾和解释其推理过程,有助于更好地理解Agent的决策过程。
持续改进:Agent可以不断更新记忆或知识库以及形式化prompt和知识的方式,以在没有或减少反思步骤的情况下向用户提供更可靠和连贯的输出。
- 效率:一方面,Agent自我评估其响应可以节省时间,因为与其他反思模式相比,没有额外的通信开销。另一方面,Agent可以在未来提供更准确的响应,以减少整体推理时间消耗,考虑到持续改进。
4.10 交叉反思(Cross-Reflection)
使用不同的Agent或基础模型提供反馈,以改进生成的计划和相应的推理过程。交叉反思使用不同的Agent或基础模型来提供反馈,并对生成的计划和相应的推理程序进行改进。Agent生成计划以实现用户的目标,而这个计划的质量应该被评估。当一个Agent的能力有限,无法以令人满意的性能进行自我反思时,如何评估这个Agent的输出和推理步骤?包含了交叉反思的高级图形表示。如果一个Agent无法通过反思其输出来生成准确的结果或精确的计划步骤,用户可以指示Agent调用另一个专门用于反思的Agent。后者可以审查并评估原始Agent的输出和相关推理步骤,并提供改进建议。这个过程可以是迭代的,直到反思Agent确认计划为止。此外,可以查询多个Agent进行反思,以生成全面响应。推理确定性:Agent的输出和相应的方法由其他Agent进行评估和改进,以确保推理确定性和响应准确性。
可解释性:多个Agent可以被用来审查原始Agent的推理过程,向用户提供详尽的解释。
包容性:当查询多个Agent时,反思反馈包括不同的推理输出,这可以帮助形成一个全面的改进建议。
- 可扩展性:交叉反思支持可扩展的基于Agent的系统,因为反思Agent可以灵活更新,而不会破坏系统操作。
推理不确定性:整体响应质量和可靠性取决于其他反思Agent的性能。
公平性维护:当不同Agent参与反思过程时,一个关键问题是如何保持所有提供反馈的公平性。
复杂的责任归属:如果交叉反思反馈导致严重或有害的结果,当使用多个Agent时,责任归属过程可能变得复杂。
- 开销:i) Agent之间的交互将有通信开销。ii) 用户可能需要支付使用反思Agent的费用。
XAgent:在XAgent中,工具Agent可以将反馈和反思发送给计划Agent,以指示任务是否完成,或指出需要改进的地方。
Yao等人:探索Agent通过彼此通信学习的能力。思考Agent可以向执行Agent提供建议,后者负责决策。
Qian等人:基于Agent开发了一个虚拟软件开发公司,其中测试Agent可以检测错误并向编程Agent报告。
- Talebirad和Nadir:分析了Agent之间的互Agent反馈,包括彼此的批评,这可以帮助Agent调整他们的策略。
4.11 人工反思(Human Reflection)
Agent收集来自人类的反馈以优化计划,有效符合人类偏好。Agent创建计划和策略,将用户的目标和需求分解为一系列任务。这些任务将由其他工具和Agent完成。如何确保充分且正确地捕获并整合人类偏好到推理过程和生成的计划中?展示了人类反思的高级图形表示。当用户prompt他/她的目标和指定的约束时,Agent首先创建一个包含一系列中间步骤的计划。构建的计划及其推理过程可以呈现给用户进行审查,或发送给其他人类专家以验证其可行性和有用性。用户或专家可以提供评论或建议,指出哪些步骤可以更新或替换。计划将经过迭代评估和改进,直到获得用户/专家的批准。4.12 基于投票的合作(Voting-based Cooperation)
Agent可以通过基于投票的合作自由提供意见并通过投票达成共识。在复合人工智能系统中,可以利用多个Agent。Agent需要在拥有各自视角的同时,就同一任务进行合作。如何正确地完成Agent的决策,以确保不同Agent之间的公平性?上图展示了Agent如何通过投票合作来最终确定决策。具体来说,一个Agent可以首先针对用户的prompt生成一个候选响应,然后举行一个投票,在其中不同的反思建议被呈现为选择项。其他Agent被请求根据它们的能力和经验提交它们的投票,以选择最合适的反馈。在这种情况下,Agent以集中的方式进行通信,原始Agent将充当协调者。投票结果将被正式确定并发送回原始Agent,后者可以根据需要完善响应后再回答用户。Hamilton:Hamilton利用九个Agent模拟法庭,Agent需要对收到的案件进行投票。每个案件都由占优势的投票结果决定。
ChatEval:Agent可以通过投票对用户的prompt达成共识,而投票结果可以通过计算多数票或平均分数来汇总。
Yang等人:探索基于GPT-4和LLaMA-2的Agent选民与人类选民在24个城市项目上的一致性。结果表明,Agent选民倾向于有统一的选择,而人类选民有多样化的偏好。
- Li等人:逐步查询基础模型以生成N个样本,并利用多个Agent通过多数投票选择最终响应。
4.13 基于角色的合作(Role-based Cooperation)
根据Agent的角色分配任务,并根据角色做出决策。Agent被赋予不同的角色,并根据他们的角色来最终确定决策。在复合人工智能系统中,可以利用多个Agent。Agent需要在拥有各自视角的同时,就同一任务进行合作。Agent如何能够考虑他们的特殊性,在某些任务上进行合作?上图展示了基于角色的合作的高级图形表示,其中Agent以分层方案进行协调。具体来说,作为规划者的Agent可以通过将用户的目标分解为任务链来生成多步骤计划。随后,作为分配者的Agent可以协调任务分配,即一些任务可以由分配者本身完成,而其他任务可以根据他们的能力和专业知识委托给特定的作为工作者的Agent。此外,如果没有可用的Agent,可以调用作为创造者的Agent来创建一个具有特定角色的新Agent,通过提供必要的资源、明确的目标和初始指导,以确保任务和责任的无缝过渡。请注意,可以定义并分配更精细的角色给Agent。 分工:Agent可以根据他们在现实世界中的角色,模拟分工,这使得可以观察社会现象。
容错性:由于利用了多个Agent,系统可以通过用同一角色的其他Agent替换不活动的Agent来继续操作。
可扩展性:可以随时雇佣或创建具有新角色的Agent,以完善任务工作流程并扩展整个系统的能力。
- 可问责性:由于Agent的责任根据他们预期的角色被明确归因,因此便于问责。
开销:Agent之间的合作将增加通信开销,而具有不同角色的Agent服务可能有不同的价格。XAgent:XAgent由三个主要部分组成:任务生成的规划Agent、任务分配的调度Agent和任务完成的工具Agent。
MetaGPT:MetaGPT利用扮演不同角色(例如,建筑师、项目经理、工程师)的各种Agent执行标准化操作程序。
MedAgents:Agent被赋予各种领域专家的角色(例如,心脏病学、外科、胃肠病学),以提供专业的分析并协作处理医疗问题。
- Li等人:提出了选择性反思调整,其中教师Agent对数据质量的反思与学生Agent的数据选择相协同。
4.14 基于辩论的合作(Debate-based Cooperation)
Agent接收其他Agent的反馈,并在与其他Agent的辩论中调整思想和行为,直到达成共识。Agent从其他Agent那里接收反馈,并在与其他Agent的辩论中调整思想和行为,直到达成共识。复合人工智能系统可以整合多个Agent,以提供更全面的服务。所包含的Agent需要在拥有各自视角的同时,就同一任务进行合作。如何利用多个Agent创建精炼的响应,同时促进Agent的进化?上图展示了基于辩论的合作的高级图形表示。用户可以向Agent发送查询,然后Agent将问题分享给其他Agent。在共享问题的基础上,每个Agent生成自己的初始响应,随后开始Agent之间的辩论。Agent将以分散的方式将初始响应传播给彼此进行验证,同时提供指导和潜在的规划方向,以基于包容和集体成果构建更全面的响应。此外,Agent可能在某些情况下使用共享记忆,或允许彼此访问各自的记忆以促进辩论。这个辩论过程可以是迭代的,以提高所有参与Agent的性能。基于辩论的合作可以根据预定的辩论轮数结束,或者Agent将继续程序,直到获得共识答案。 crewAI:crewAI提供了一个多Agent协同框架,多个Agent可以就给定主题进行讨论。
Liang等人:利用多Agent辩论来解决“思维退化”问题。在辩论中,一个Agent需要说服另一个Agent并纠正错误。
Du等人:使用多个Agent讨论给定的用户输入,实验结果表明,Agent在多轮辩论后可以达成共识答案。
- Chen等人:探索多Agent系统中的谈判过程,每个Agent可以感知其他Agent的结果,并调整自己的策略。
4.15 多模态护栏(Multimodal Guardrails)
控制基础模型的输入和输出,以满足特定要求,如用户需求、道德标准和法律。多模态护栏可以控制基础模型的输入和输出,以满足特定要求,如用户需求、道德标准和法律。Agent由基础模型和其他组件组成。当用户向Agent提示特定目标时,基础模型被查询以实现目标。如何防止基础模型受到对抗性输入的影响,或对用户和其他组件生成有害或不期望的输出?上图展示了多模态护栏的简化图形表示。护栏可以作为基础模型和复合人工智能系统中所有其他组件之间的中间层。当用户发送提示或其他组件(例如,内存)向基础模型传输任何消息时,护栏首先验证信息是否满足特定的预定义要求,只有有效信息才会传递给基础模型。例如,应谨慎处理或删除个人身份信息以保护隐私。护栏可以依靠预定义的示例或以“无参考”方式评估内容。同样地,当基础模型创建结果时,护栏需要确保响应不包含对用户的偏见或不相关信息,或满足其他系统组件的特定要求。请注意,可以实施一组护栏,每个护栏负责专门的交互,例如,从数据存储库检索信息、验证用户输入、调用外部API等。同时,护栏能够处理多模态数据,如文本、音频、视频,以提供全面的监控和控制。鲁棒性:护栏通过过滤不适当的上下文信息来保护基础模型的鲁棒性。
安全性:护栏作为基础模型结果的验证者,确保生成的响应不会对Agent用户造成伤害。
标准一致性:护栏可以根据组织政策和策略、道德标准和法律要求进行配置,以调节基础模型的行为。
- 适应性:护栏可以在各种基础模型和Agent中实施,并部署具有定制要求。
4.16 工具/Agent注册表(Tool/Agent Registry)
维护统一且方便的来源以选择多样的Agent和工具。工具/Agent注册表维护了一个统一且方便的来源,用于选择多样化的Agent和工具。在Agent内部,任务执行者可能需要与其他Agent合作或利用外部工具以扩展能力。存在多样化的Agent和工具,Agent如何高效地选择适当的外部Agent和工具?上图展示了Agent如何通过工具/Agent注册表搜索外部Agent和工具。用户向Agent提示目标,Agent然后将目标分解为细粒度的任务。Agent可以查询工具/Agent注册表,这是收集和分类各种工具和Agent的主要入口点,根据一系列指标(例如,能力、价格、上下文窗口)。基于返回的信息,Agent可以雇用并分配任务给相应的工具和Agent。请注意,注册表可以以不同方式实现,例如,具有特定知识库的协调Agent、基于区块链的智能合约等,注册表可以扩展为工具/Agent服务交易的市场。 可发现性:注册表为用户提供了目录,以发现具有不同能力的Agent和工具。
效率:注册表提供了直观的清单,列出了工具和Agent的属性(例如,性能、价格),节省了比较时间。
工具适当性:鉴于任务要求和条件,用户和Agent可以按照提供的属性选择最合适的工具/Agent。
- 可扩展性:注册表仅存储有关工具和Agent的某些元数据,因此数据结构简单且轻量级,确保了注册表的可扩展性。
GPTStore:GPTStore提供了一个目录,用于搜索基于ChatGPT的Agent。
TPTU:TPTU整合了一套工具,以扩展AIAgent的能力。
VOYAGER:VOYAGER可以存储动作程序,因此逐步建立可重用的技能库。
- OpenAgents:特别开发的Agent用于管理插件的API调用。
4.17 Agent评估器(Agent Evaluator)
Agent评估器可以执行测试,根据多种需求和指标来评估Agent。在Agent中,基础模型和一系列组件协调进行推理并生成对用户提示的响应。上图展示了Agent评估器的简化图形表示。开发者可以在设计时和运行时部署评估器,以评估Agent的响应和推理过程。具体来说,开发者需要构建评估流程,例如,定义基于特定场景的要求、指标和预期的Agent输出。给定特定上下文,Agent评估器准备上下文特定的测试用例(要么从外部资源搜索,要么自己生成),并分别对Agent组件进行评估。评估结果提供有价值的反馈,如边界情况、近乎失误等,而开发者可以进一步微调Agent或采用相应的风险缓解解决方案,并根据结果升级评估器。Inspect:英国人工智能安全研究所设计了一个大型语言模型的评估框架,提供了一系列内置组件,包括提示工程、工具使用等。
DeepEval:DeepEval包含14个评估指标,并支持LlamaIndex、Hugging Face等Agent开发框架。
Promptfoo:Promptfoo可以提供高效的评估服务,具有缓存、并发和实时重载功能,并还可以根据用户定义的指标实现自动化评分。
- Ragas:Ragas通过测试数据集生成和利用LLM辅助评估指标,促进对RAG管道的评估。
Agent评估器可以配置并部署,以在设计时和运行时评估其他面向模式的Agent组件的性能。5. 不足
上述文章提出的架构模式目录,仍有以下不足之处:
在后续的《AI Agent架构模式》系列文章中,可以考虑将之前整理的10+种多Agent协作(架构)模式作为示例,呈现给读者。
6 参考资料
Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle. "Agent Design Pattern Catalogue: A Collection of Architectural Patterns for Foundation Model based Agents," arXiv:2405.10467