本页面从概念上简要介绍了 Agent Framework,并说明了开发有效代理的关键构建块。
什么是代理?
生成式 AI 代理如同一个智能计算机程序,可充当独立助理。它会被赋予一个目标,可以了解周围的世界(通过数据或信息),并可以使用各种工具来实现该目标,而无需进行持续的人工监督。它甚至可以规划后续步骤,以便更接近其目标。
从技术角度而言,生成式 AI 代理是一种软件抽象化,它通过观察环境、推理最佳行动方案并使用可用工具执行操作,自主地追求既定目标。它在执行每个步骤时可以独立于直接人工指令而运行,并且可以主动确定后续操作以实现最终目标。这得益于生成式 AI 模型,这些模型可为代理提供推理和决策制定能力。
代理不是什么?
下面列出了一些看似代理但实际上并非代理的常见陷阱:
硬编码“If-Then”聊天机器人(反模式):
使用 LLM 构建的聊天机器人,您可以精心地预先定义所有可能的用户输入和 LLM 回答。即使您使用函数调用,如果逻辑完全是硬编码的,它也不是代理。它是一个复杂的决策树,而不是推理系统。
示例:如果用户说出“book a flight”,则调用函数 book_flight()
。这不是代理,而是基于规则的系统。
过度依赖 ReAct 提示(潜在反模式):
ReAct(推理 + 行动)提示是一种技术,您可以通过构造提示来鼓励 LLM 逐步思考,然后采取行动。这更接近代理行为,但如果您(开发者)仍需要针对每种可能的场景手动编写 ReAct 提示,则可能会成为反模式。代理应能够生成自己的 ReAct 样式推理,而不仅仅是遵循预先编写的模板。行动部分仅限于简单的函数调用,没有更高级别的规划或自适应。
不采取行动的思维链 (CoT)(反模式):
使用 CoT 提示让 LLM 解释其推理是有价值的,但如果 LLM 不根据该推理采取行动,则不是代理。它只是一个更透明的 LLM,而不是一个自主实体。
代理与 LLM
单个提示:
向 LLM 询问:“Write a summary of the history of the Roman Empire。”这是单次互动。Gemini 会处理提示并生成回答。没有对过去互动的记忆,没有长期目标,也没有与外部工具的互动。它纯粹是输入-输出。
提示链:
然后,您可以继续说:“Now, list the major causes of the Empire's decline。”这是提示链。您作为人类,通过引导对话和分解任务来提供类似代理的行为。Gemini 仍只是单独针对每个提示进行回答,没有更全面地理解整体目标(除非您明确反复说明)。您是代理,而 Gemini 不是。
代理:
使用 LLM 的代理则完全不同。
假设有一个“罗马历史研究代理”,其目标是:
“编写一份关于罗马帝国的全面报告,包括其历史、关键人物、文化影响和衰落原因。该报告应每周更新一次,并纳入来自学术来源的新信息。”
主要差异:
- 持久性目标:代理具有持续的长期目标,而不仅仅是单轮任务。
- 规划:代理可能会将此分解为:
- 使用 Gemini 进行初步研究(总结历史记录,确定关键人物)。
- 搜索学术数据库(使用单独的工具)。
- 综合来自多个来源的信息。
- 生成报告。
- 安排每周任务以重复执行第 2-4 步。
- 工具使用:代理积极使用 Gemini 以外的工具(例如搜索 API、数据库)。
- 自主性:代理独立运行,决定要收集哪些信息以及如何呈现这些信息。
- 记忆:代理会保留持续的记忆(可能在数据库中)以整理发现结果,并自行改进提示。
关键点在于,在单个提示/提示链场景中,您是编排者。在代理场景中,代理本身便是编排者,并使用 Gemini 作为其工具之一。
区分代理工作负载与典型 LLM 工作负载
代理与典型 LLM 工作负载之间的最关键区别在于,代理具有以目标为导向的自主行为,并通过迭代优化和规划来实现目标。问问自己以下问题:
- 持久性目标
- 除了回答个别提示外,系统是否还有明确定义的长期目标?
- 自主操作
- 系统能否在无需人工操作员对每个操作提供明确分步说明的情况下执行操作(使用工具、制定决策)?
- 规划和推理
- 系统是否表现出可进行规划(将复杂目标分解为较小的步骤)和推理(根据对情况的理解制定决策)的证据?
- 迭代优化
- 系统是否会学习并改进其方法?这不需要是机器学习。可以是根据观察结果进行自我提示改进。
- 有状态性
- 系统是否会维护和使用状态信息来继续朝着目标前进?
如果您对上述所有问题的回答都为“是”,则表示您可能在使用 AI 代理。如果对任何问题的回答为“否”,则表示您可能拥有较复杂的 LLM 应用,但不是成熟的代理。代理的定义是这些因素的组合,而不仅仅是单独的某个因素。代理不仅仅是执行操作,还要决定所执行的操作以及原因,并调整其方法以实现既定目标。
代理的基本组件:
- 模型:语言模型 (LM) 充当中心决策者,利用基于指令的推理和逻辑框架。
- 工具:工具可弥合代理的内部功能与外部世界之间的差距,从而实现更广泛的可能性。它们可实现与外部数据和服务的互动。
- 编排层:此层用于控制代理如何获取信息、执行内部推理,以及使用该推理来告知其后续操作或决策。
代理与函数调用
LLM 的函数调用是朝着代理行为发展的巨大飞跃,但它并不等同于完整的代理。
LLM + 函数调用:您可以定义 LLM 可以调用的函数(例如,get_weather(location)
、search_wikipedia(topic)
)。当 LLM 回答指明需要使用函数时,您的代码会执行该函数并将结果提供给 LLM。这使模型可以访问外部数据或执行操作。
LLM + 代理:
代理基于函数调用而构建。函数调用是代理可以使用的机制,但代理会添加以下内容:
- 战略性决策制定:代理会根据其总体目标和计划决定何时以及为何调用函数。它不仅仅是响应单个提示。
- 多步推理:代理可以根据其内部推理过程将多个函数调用和 Gemini 互动链接在一起。它不仅限于对每个提示进行单个函数调用。
- 错误处理和自适应:优秀的代理会处理函数调用失败或返回意外结果的情况。它可以相应地调整其计划。
- 状态管理:代理会维护一个在多次互动中保留的内部状态(记忆功能),从而可跟踪进度并制定更明智的决策。
可以将函数调用视为向 LLM 赋予与世界互动的能力。代理可为 LLM 提供智能和自主权,以便有效地利用该能力来实现复杂目标。
LLM 流水线和链
本子部分将深入探讨如何使用流水线和链在代理中构建和组织 LLM。我们将讨论连接 LLM 调用、工具互动和其他代理组件以实现复杂任务的不同模式。预计会说明与代理设计相关的常见流水线和链架构。
构建代理时的反模式
本部分将重点介绍开发代理时应避免的常见错误和陷阱。我们将识别并介绍“反模式”,这些是可能会影响代理性能、可维护性或可伸缩性的设计选择或实现策略。了解这些反模式有助于开发者构建更强大、更有效的代理。
多步骤代理与多代理 - 您应该选择哪一种?
本部分将对照比较两种不同的代理复杂性方法:多步骤代理(按一系列步骤执行任务的代理)和多代理系统(由多个互动的代理组成的系统)。我们将讨论每种方法的优缺点,并根据应用场景和所需的代理行为提供有关何时选择其中一种方法而不是另一种方法的指导。
何时使用多代理流程?
在扩展多代理系统的基础上,本部分将专门探讨使用多代理“流程”会变得有利的场景。我们将研究可受益于在多个代理之间进行协作、委托或分布式问题解决的应用场景。目标是说明多代理流程在复杂代理系统中的实际应用和优势。
具有多个工具的代理与多代理?
本部分将介绍在为单个代理配备多个工具与创建多代理系统之间的设计选择。我们将分析在哪些情况下只需增加单个代理的工具集就足够了,以及在哪些情况下将任务和功能分布到多个代理会更有效。这有助于开发者根据复杂性和功能要求确定最佳架构。
具有预定义流程的代理与自主代理?
在这里,我们将区分具有预定义结构化工作流(“流程”)的代理与在运行中表现出更大灵活性和决策能力的更自主的代理。我们将讨论控制和适应能力之间的权衡,以及每种类型的代理最适合哪些不同的应用。
短期记忆和长期记忆
本部分将说明 Agent Framework 中的短期记忆和长期记忆的概念。我们将讨论代理如何管理对话上下文(短期记忆)以及如何在多个会话间保留知识或数据(长期记忆)。了解这些记忆机制对于构建能够维护状态并随着时间推移而学习的代理至关重要。
单步规划与多步规划
我们将探讨代理的规划功能,并将单步规划(制定即时决策)与多步规划(制定策略并将复杂任务分解为序列)进行对比。本部分将讨论每种规划方法的优势和复杂性,以及它们会如何影响代理行为和问题解决能力。
单个工具与多个工具与 AgentTools
本部分将概括比较代理的不同工具配置。我们将研究单个工具的使用、配备多个工具的代理以及专用的“AgentTools”(调用其他代理的工具)。目标是明确每种工具类型和配置的用途和使用场景。
工具与记忆功能
本部分将讨论代理设计中工具与记忆功能之间的相互作用和关系。我们将探讨代理如何利用记忆功能来告知工具使用情况、存储工具输出以及随着时间的推移优化工具选择。了解这种互动是构建代理的关键,可有效利用工具和记忆功能来提升性能。
代理测试和质量保证
本部分将重点介绍代理的测试和质量保证 (QA) 的关键方面。我们将讨论严格测试代理行为、工具集成和整体系统性能的策略和方法。目标是提供有关在部署前确保代理的可靠性和正确性的指南。
代理评估
本部分将在测试的基础上,专门讨论代理评估。我们将深入探讨如何根据定义的指标和基准来系统性地衡量和评估代理性能。我们将讨论评估框架、准确率和效率等指标,以及如何利用评估来改进代理设计。
多代理
本部分将更深入地探究框架中的多代理系统的概念。它将整合并扩展之前提到的多代理概念,全面概述其架构、优势和挑战。这将作为理解和设计多代理应用的中心资源。
流
本部分将专门说明代理框架中的“流程”。其中将详细介绍不同类型的预定义流程(顺序、循环、自动等),以及它们如何管理代理行为以及与子代理的互动。预计会对流程机制和自定义选项进行清晰的结构化说明。
通信
本部分将探讨 Agent Framework 中的通信,尤其是多代理系统中的通信。我们将讨论代理如何交换信息、协调操作以及进行协作来实现共同目标。重点将说明用于在代理之间进行有效通信的机制和模式。
规划
本部分将更深入地探讨代理中的规划。它将介绍不同的规划算法、分解复杂任务的策略,以及代理如何使用规划来指导其操作和工具使用。预计会对与代理开发相关的规划方法进行技术性较强的讨论。
会话和状态
本部分将全面介绍 Agent Framework 中的会话和状态管理。它将详细介绍如何创建和维护会话、如何使用状态变量来存储和访问信息,以及会话数据的生命周期。了解会话和状态对于构建可管理上下文并在互动中保持连续性的代理至关重要。
回调
最后,本部分将专门详细说明 Agent Framework 中的回调。它将介绍不同类型的回调(代理前/后、模型前/后、工具前/后)、它们的用途,以及开发者如何使用它们在处理的各个阶段自定义和扩展代理行为。预计会提供有关如何利用回调进行高级代理自定义的详尽指南。