2AGI.NET | 探索 AI 无限潜力,2AGI 为您带来最前沿资讯。
扫码加入 2AGI 技术社区!
本文深入探讨了生成式 AI 智能体的核心组件、工作原理、关键技术及其广泛应用。文章从智能体的定义出发,详细介绍了其模型、工具和编排层的协同作用,以及认知架构的运作机制。同时,文章还讨论了如何通过定向学习提升模型性能,并展望了智能体在未来的发展趋势,特别是 Google 在该领域的探索和应用。
Google 的 AI 智能体白皮书详细探讨了生成式 AI 智能体的构建、应用及其对企业未来的影响。智能体通过结合推理、逻辑和实时数据访问,能够自主地规划和执行复杂任务,从而扩展了传统语言模型的功能。
内容概要
人类在处理混乱的模式识别任务方面非常出色。然而,他们通常依赖工具——比如书籍、Google 搜索或计算器——来补充他们的先验知识,然后再得出结论。就像人类一样,生成式 AI 模型也可以通过训练来使用工具,以获取实时信息或建议现实世界的行动。
例如,模型可以利用数据库检索工具来访问特定信息,比如客户的购买历史,从而生成量身定制的购物推荐。或者,根据用户的查询,模型可以进行各种 API 调用,向同事发送电子邮件回复,或代表您完成一笔金融交易。
要做到这一点,模型不仅必须能够访问一组外部工具,还需要能够以自主的方式计划和执行任何任务。这种推理、逻辑和外部信息访问能力的结合,都与生成式 AI 模型相关联,从而引出了智能体的概念,即一个扩展了生成式 AI 模型独立能力的程序。本白皮书将更详细地深入探讨所有这些方面及相关内容。
什么是 Agent
在最基本的形式中,生成式 AI 智能体可以被定义为一个应用程序,它通过观察世界并使用其可用的工具来尝试实现目标。智能体具有自主性,可以在没有人类干预的情况下独立行动,特别是当它们被赋予明确的目标或任务时。智能体也可以在实现目标的方法上采取主动。即使没有来自人类的明确指令集,智能体也能推理出下一步应该做什么以实现其最终目标。虽然人工智能中智能体的概念相当宽泛且强大,但本白皮书着重于探讨在本文发表之时,生成式 AI 模型能够构建的特定类型的智能体。
为了理解智能体的内部运作,让我们首先介绍驱动智能体行为、动作和决策的基础组件。这些组件的组合可以被描述为一种认知架构,通过混合和匹配这些组件可以实现许多这样的架构。专注于核心功能,智能体的认知架构中有三个基本组件,如图 1 所示。
定义:智能体是一个能够通过观察环境并利用工具实现预设目标的应用程序。它具有自主性,可以在没有人类干预的情况下行动。
核心组件拆解
1、模型 (The Model)
在代理的范围内,模型指的是将被用作代理过程的中央决策者的语言模型(LM)。代理使用的模型可以是一个或多个任意大小(小/大)的语言模型,它们能够遵循基于指令的推理和逻辑框架,如ReAct、思维链(Chain-of-Thought)或思维树(Tree-of-Thoughts)。
模型可以是通用的、多模态的,或者根据你特定代理架构的需求进行微调。为了获得最佳的生产结果,你应该利用最适合你期望的最终应用的模型,并且理想情况下,该模型已经在与你计划在认知架构中使用的工具相关的数据特征上进行了训练。
需要注意的是,模型通常没有针对代理的具体配置设置(例如工具选择、编排/推理设置)进行训练。然而,可以通过向模型提供展示代理能力的示例来进一步完善模型,包括代理在各种上下文中使用特定工具或推理步骤的实例。
2、工具 (The Tools)
基础模型尽管在文本和图像生成方面表现出色,但它们仍受限于无法与外部世界互动的能力。工具弥补了这一差距,使代理能够与外部数据和服务进行交互,从而解锁超出基础模型本身所能实现的更广泛的动作范围。工具可以有多种形式,并具有不同的复杂程度,但通常与常见的Web API方法如GET、POST、PATCH和DELETE保持一致。
例如,一个工具可以在数据库中更新客户信息,或者获取天气数据来影响代理向用户提供的旅行建议。有了工具,代理可以访问和处理现实世界的信息。这使它们能够支持更专业的系统,如检索增强生成(RAG),这大大扩展了代理的能力,超出了基础模型单独所能实现的范围。我们将在下面更详细地讨论工具,但最重要的是要理解,工具弥合了代理内部能力与外部世界之间的差距,解锁了更广泛的可能性。
3、编排层 (The Orchestration Layer)
编排层描述了一个循环过程,它规定了代理如何接收信息、进行一些内部推理,并利用该推理来指导其下一个动作或决策。通常,这个循环会持续进行,直到代理达到其目标或到达一个停止点。编排层的复杂性可以根据代理及其执行的任务而有很大差异。有些循环可能是简单的计算和决策规则,而其他一些循环可能包含链式逻辑、涉及额外的机器学习算法,或者实现其他概率推理技术。我们将在认知架构部分更详细地讨论代理编排层的实现。
智能体与模型有什么区别
简单来说,分为如下四点:
- 知识范围:模型局限于训练数据,而智能体可以通过工具连接到外部系统进行扩展。
- 推理方式:模型基于单次推理,智能体支持多轮推理并管理会话历史记录。
- 工具使用:模型无原生工具实现,智能体则原生支持工具。
- 逻辑层:模型无原生逻辑层,智能体具有原生的认知架构和推理框架。
架构认知:智能体如何运作
想象一下,在一个繁忙的厨房里有一位厨师。他们的目标是为餐厅的顾客制作美味的菜肴,这涉及到规划、执行和调整的循环过程。
- 他们收集信息,比如顾客的订单以及储藏室和冰箱里的食材.
- 他们进行一些内部推理,思考根据刚刚收集到的信息可以制作哪些菜肴和风味组合.
- 他们采取行动来制作菜肴:切蔬菜、调香料、煎肉.
在这一过程的每个阶段,厨师根据需要进行调整,随着食材的耗尽或顾客反馈的接收而完善他们的计划,并利用之前的结果集合来确定下一步的行动计划。这个信息接收、规划、执行和调整的循环过程描述了厨师用来实现其目标的独特认知架构。
正如厨师一样,代理可以通过迭代处理信息、做出明智的决策以及根据先前输出来完善下一步行动,来使用认知架构达到其最终目标。在代理认知架构的核心是编排层,它负责维护记忆、状态、推理和规划。
它利用快速发展的提示工程领域及其相关框架来指导推理和规划,使代理能够更有效地与环境互动并完成任务。关于语言模型的提示工程框架和任务规划的研究正在迅速发展,产生了一系列有希望的方法。虽然这不是一个详尽的列表,但这些是在本出版物时可用的最受欢迎的框架和推理技术之一:
1、ReAct,这是一种提示工程框架,为语言模型提供了一种思考过程策略,使其能够对用户查询进行推理和采取行动,无论是否提供上下文示例。ReAct提示已被证明优于多个最先进的基线,并提高了大型语言模型的人机交互性和可信度。
2、思维链(CoT),这是一种提示工程框架,通过中间步骤实现推理能力。CoT有各种子技术,包括自我一致性、主动提示和多模态CoT,每种技术都有其特定应用中的优势和劣势。
3、思维树(ToT),这是一种提示工程框架,非常适合于探索或战略性前瞻任务。它对思维链提示进行了概括,并允许模型探索各种思维链,这些思维链作为使用语言模型进行一般问题解决的中间步骤。
代理可以利用上述推理技术之一,或者许多其他技术,来为给定的用户请求选择下一个最佳动作。例如,让我们考虑一个被编程为使用ReAct框架来为用户查询选择正确动作和工具的代理。事件的顺序可能如下所示:
1、用户向代理发送查询
2、代理开始ReAct序列
3、代理向模型提供提示,要求其生成下一个ReAct步骤及其相应的输出。
4、ReAct循环结束,并将最终答案提供给用户
如上图所示,模型、工具和代理配置协同工作,根据用户的原始查询向用户提供一个切实、简洁的回应。虽然模型本可以基于其先前的知识猜测一个答案(幻觉),但它反而使用了一个工具(航班)来搜索实时的外部信息。这些额外的信息被提供给了模型,使其能够基于真实的数据做出更明智的决策,并将这些信息总结后反馈给用户。
总结来说,代理回应的质量可以直接与模型对这些各种任务的推理和行动能力相关联,包括选择正确工具的能力以及工具定义的完善程度。就像厨师用新鲜食材制作菜肴并关注顾客反馈一样,代理依靠合理的推理和可靠的信息来提供最佳结果。在下一节中,我们将深入探讨代理与新鲜数据连接的各种方式。
工具:我们通往外部世界的钥匙
尽管语言模型在处理信息方面表现出色,但它们缺乏直接感知和影响现实世界的能力。这限制了它们在需要与外部系统或数据交互的情况下的实用性。
这意味着,从某种意义上说,语言模型的好坏仅取决于其从训练数据中学到的内容。但无论我们向模型投入多少数据,它们仍然缺乏与外部世界互动的基本能力。那么,我们如何赋予模型与外部系统进行实时、上下文感知的交互能力呢?函数、扩展、数据存储和插件都是为模型提供这种关键能力的方式。
虽然它们有许多名称,但工具是连接我们基础模型与外部世界的桥梁。与外部系统和数据的这种联系使我们的代理能够执行更广泛的任务,并以更高的准确性和可靠性进行操作。例如,工具可以使代理调整智能家居设置、更新日历、从数据库中获取用户信息,或者根据一组特定指令发送电子邮件。
截至本出版日期,谷歌模型能够与三种主要工具类型进行交互:扩展、函数和数据存储。通过为代理配备工具,我们为它们解锁了巨大的潜力,使它们不仅能理解世界,还能对世界采取行动,为各种新应用和可能性打开了大门。
1、扩展 (Extensions):桥接 API 和智能体之间的鸿沟,使智能体能够无缝执行 API。
理解扩展的最简单方式是将其视为以标准化方式弥合API与代理之间的差距,使代理能够无缝执行API,无论其底层实现如何。假设你构建了一个旨在帮助用户预订航班的代理。你知道你想使用谷歌航班API来检索航班信息,但你不确定如何让代理调用这个API端点。
一种方法是实现自定义代码,该代码将接收用户查询,解析查询以提取相关信息,然后进行API调用。例如,在航班预订的用例中,用户可能会说“我想预订从奥斯汀到苏黎世的航班。”在这种情况下,我们的自定义代码解决方案需要在尝试进行API调用之前,从用户查询中提取“奥斯汀”和“苏黎世”作为相关实体。
但如果用户说“我想预订飞往苏黎世的航班”而从未提供出发城市怎么办?没有所需数据,API调用会失败,并且需要实现更多代码来捕获像这样的边缘和特殊案例。这种方法不可扩展,并且在任何超出已实现自定义代码范围的情况中都容易出错。
一种更具弹性的方法是使用扩展。扩展通过以下方式弥合代理与API之间的差距:
- 使用示例教代理如何使用API端点。
- 教代理成功调用API端点所需哪些参数或参数。
扩展可以独立于代理制作,但应作为代理配置的一部分提供。代理在运行时使用模型和示例来决定哪个扩展(如果有的话)适合解决用户的查询。这突显了扩展的一个关键优势,即它们的内置示例类型,使代理能够动态选择最适合任务的扩展。
你可以将此想象成软件开发人员在解决和为用户问题制定解决方案时决定使用哪些API端点的方式。如果用户想要预订航班,开发人员可能会使用谷歌航班API。如果用户想知道相对于他们位置最近的咖啡店在哪里,开发人员可能会使用谷歌地图API。
同样地,代理/模型堆栈使用一组已知的扩展来决定哪一个最适合用户的查询。如果你想看到扩展的实际运作,你可以在Gemini应用程序中尝试它们,方法是前往设置 > 扩展,然后启用你想要测试的任何扩展。例如,你可以启用谷歌航班扩展,然后询问Gemini“显示下周五从奥斯汀飞往苏黎世的航班。”
2、函数 (Functions):自包含的代码模块,执行特定任务并可复用,通常在客户端执行。
在软件工程领域,函数被定义为自包含的代码模块,用于完成特定任务,并且可以根据需要重用。当软件开发人员编写程序时,他们通常会创建许多函数来执行各种任务。他们还会定义何时调用function_a
与function_b
的逻辑,以及预期的输入和输出。
在代理的世界中,函数的工作方式非常相似,但我们可以用模型来替代软件开发人员。模型可以采用一组已知的函数,并根据其规范决定何时使用每个函数以及函数需要哪些参数。函数与扩展有几个不同之处,最显著的是:
- 模型输出函数及其参数,但不进行实时API调用。
- 函数在客户端执行,而扩展在代理端执行。
再次使用我们的谷歌航班示例,一个简单的函数设置可能如图所示。
请注意,这里的主要区别是函数和代理都不直接与谷歌航班API进行交互。那么API调用是如何实际发生的呢?
对于函数来说,调用实际API端点的逻辑和执行被从代理卸载并返回到客户端应用程序,如下图所示。这为开发人员提供了对应用程序中数据流的更细粒度的控制。开发人员可能会选择使用函数而不是扩展的原因有很多,但有几个常见的用例是:
- API调用需要在应用程序堆栈的另一层进行,而不是直接在代理架构流程中(例如中间件系统、前端框架等).
- 安全或身份验证限制阻止代理直接调用API(例如API未暴露到互联网,或代理基础设施无法访问).
- 时间或操作顺序的约束阻止代理实时进行API调用。(例如批量操作、人工审核等)
- 需要对API响应应用额外的数据转换逻辑,这是代理无法执行的。例如,考虑一个不提供用于限制返回结果数量的过滤机制的API端点。在客户端使用函数为开发人员提供了进行这些转换的额外机会.
- 开发人员希望在不为API端点部署额外基础设施的情况下迭代代理开发(即函数调用可以充当API的“桩”)
3、数据存储 (Data Stores):提供对动态和最新信息的访问,确保模型的响应始终基于事实和相关性。
想象一下,语言模型就像一个庞大的图书馆,包含其训练数据。但与不断获取新卷的图书馆不同,这个图书馆是静态的,只保留了最初训练时的知识。这带来了一个挑战,因为现实世界中的知识是不断发展的。数据存储通过提供更动态和最新的信息来解决这一限制,并确保模型的回应始终基于事实和相关性。
考虑一个常见的情况,开发人员可能需要向模型提供少量额外的数据,也许是电子表格或PDF的形式。
数据存储允许开发人员以原始格式向代理提供额外的数据,消除了耗时的数据转换、模型重新训练或微调的需要。数据存储将传入的文档转换成一组向量数据库嵌入,代理可以使用这些嵌入来提取其需要补充其下一个动作或对用户回应的信息。
总结来说,扩展、函数和数据存储构成了代理在运行时可以使用的几种不同工具类型。每种工具都有其特定用途,可以根据代理开发者的决定单独使用或一起使用。
通过针对性学习提升模型性能
有效使用模型的一个关键方面是它们在生成输出时选择正确工具的能力,尤其是在大规模生产环境中使用工具时。虽然一般性训练有助于模型发展这种技能,但现实世界中的场景通常需要超出训练数据之外的知识。可以将其想象为基础烹饪技能与精通特定菜系之间的差异。两者都需要基础的烹饪知识,但后者需要针对性学习以获得更精细的结果。
为了帮助模型获得这种特定的知识,存在几种方法:
- 上下文学习:这种方法在推理时为通用模型提供提示、工具和少量示例,使其能够“即时”学习如何以及何时为特定任务使用这些工具。ReAct框架是自然语言中这种方法的一个例子.
- 基于检索的上下文学习:这种技术通过从外部存储中检索最相关信息、工具和相关示例,动态填充模型提示。一个例子是Vertex AI扩展中的“示例存储”,或者是之前提到的数据存储RAG架构.
- 基于微调的学习:这种方法涉及在推理之前使用更大规模的特定示例数据集来训练模型。这有助于模型在接收到任何用户查询之前理解何时以及如何应用某些工具.
为了提供更多关于每种针对性学习方法的见解,让我们重新审视我们的烹饪类比。
- 想象一下,厨师从顾客那里收到了一个特定的食谱(提示)、一些关键食材(相关工具)和一些示例菜肴(少量示例)。基于这些有限的信息和厨师对烹饪的一般知识,他们需要“即时”弄清楚如何准备与食谱和顾客偏好最接近的菜肴。这就是上下文学习。
- 现在让我们想象一下,我们的厨师在一个设备齐全的厨房里,厨房里有一个装满各种食材和食谱书(示例和工具)的储藏室(外部数据存储)。厨师现在可以从储藏室中动态选择食材和食谱书,并更好地与顾客的食谱和偏好保持一致。这使厨师能够利用现有和新知识,制作出更有信息量和更精细的菜肴。这就是基于检索的上下文学习。
- 最后,让我们想象一下,我们让厨师回到学校学习一种新的菜系或一组菜系(在更大规模的特定示例数据集上进行预训练)。这使厨师能够以更深入的理解来处理未来未见过的顾客食谱。如果希望厨师在特定菜系(知识领域)中出类拔萃,这种方法是完美的。这就是基于微调的学习。
每种方法在速度、成本和延迟方面都有其独特的优缺点。然而,通过在代理框架中结合这些技术,我们可以利用各自的优点并最小化缺点,从而实现更健壮和适应性更强的解决方案。
总结
智能体通过利用工具和先进的认知架构,扩展了语言模型的能力,使其能够自主地规划和执行复杂任务。随着工具的复杂性和推理能力的增强,智能体将在各个行业和问题领域发挥越来越重要的作用。通过不断实验和改进,智能体将为现实世界创造更大的价值。
扫码获取文件下载地址!