在agent的范围内,模型指的是将作为agent流程的集中决策者使用的语言模型(LM)。
agent
使用的模型可以是一个或多个LM,其大小可以是任何规模(小/大),能够遵循基于指令的推
理和逻辑框架,如ReAct、思维链(Chain-of-Thought)或思维树(Tree-of-Thoughts)。
生成式AI Agent扩展了语言模型的功能,利用工具获取实时信息、建议现实世界行动,并自主规划和执行复杂任务。Agent可以利用一个或多个语言模型来决定何时以及如何进行状态转换,并使用外部工具完成模型自身难以或无法完成的各种复杂任务。
Agent的核心是编排层,它是一种认知架构,用于构建推理、规划、决策并指导其行动。各种推理技术,例如 ReAct、思维链和思维树,为编排层提供了接收信息、执行内部推理以及生成明智决策或响应的框架。
工具(如扩展程序、函数和数据存储)充当Agent通往外部世界的钥匙,使其能够与外部系统交互并获取训练数据之外的知识。扩展程序在Agent和外部API之间架起桥梁,支持执行 API 调用和检索实时信息。函数通过分工提供更细致的开发者控制,允许Agent生成可在客户端执行的函数参数。数据存储为Agent提供对结构化或非结构化数据的访问,从而实现数据驱动的应用程序。
特性模型Agent知识范围受限于训练数据通过工具连接外部系统扩展知识推理模式基于用户查询进行单次推理/预测,缺乏会话历史或持续上下文管理管理会话历史(例如聊天记录),允许多轮推理/预测,并根据用户查询和编排层中的决策进行调整工具支持无原生工具实现原生支持工具实现逻辑层无原生逻辑层。
A
gents与模型的区别
用户需通过简单问题或推理框架(CoT、ReAct 等)构建提示来指导模型预测具有原生认知架构,使用推理框架(如 CoT、ReAct)或其他预构建Agent框架(如LangChain)。
Agent如同一位忙碌的厨师,其目标是为顾客制作美味佳肴。他们需要经历计划、执行和调整的循环:
Agent利用认知架构,通过迭代处理信息、做出明智的决策以及根据先前输出改进后续行动来实现其最终目标。
图2:
在编排层采用ReAct推理的实例agent
Agent认知架构的核心是编排层,负责维护记忆、状态、推理和规划。它使用快速发展的提示工程领域和相关框架来指导推理和规划,使Agent能够更有效地与其环境交互并完成任务。
虽然语言模型擅长处理信息,但它们缺乏直接感知和影响现实世界的能力。工具弥合了这一差距,使Agent能够与外部数据和服务交互,并解锁模型本身无法实现的更广泛的行动。
工具有多种形式,复杂程度各不相同,但通常与常见的 Web API 方法(如 GET、POST、PATCH 和 DELETE)一致。例如,工具可以更新数据库中的客户信息,或获取天气数据以影响Agent向用户提供的旅行建议。
截至本文发布之日,Google 模型能够与三种主要工具类型进行交互:扩展程序、函数和数据存储。通过为Agent配备工具,我们释放了它们理解世界并采取行动的巨大潜力,为无数新的应用和可能性打开了大门。
扩展程序以标准化方式弥合了 API 和Agent之间的差距,使Agent能够无缝执行 API,而无需考虑其底层实现。例如,在航班预订用例中,用户可能会说“我想预订从奥斯汀飞往苏黎世的航班”。在这种情况下,自定义代码解决方案需要从用户查询中提取“奥斯汀”和“苏黎世”作为相关实体,然后尝试进行 API 调用。
图3
:
agents如何与外部API进行交互
但是,如果用户说“我想预订飞往苏黎世的航班”而从未提供出发城市,该怎么办?如果没有所需数据,API 调用将失败,并且需要实现更多代码来捕获此类边缘情况和极端情况。这种方法不可扩展,并且很容易在任何超出已实现自定义代码的场景中崩溃。
扩展程序通过以下方式弥合了Agent和 API 之间的差距:
-
使用示例教导Agent如何使用 API 端点。
-
教导Agent成功调用 API 端点所需的参数。
图5
:
Agents、扩展和API之间的1对多关系
扩展程序可以独立于Agent制作,但应作为Agent配置的一部分提供。Agent在运行时使用模型和示例来决定哪个扩展程序(如果有)适合解决用户的查询。这突出了扩展程序的一个关键优势,即其内置示例类型,它允许Agent动态地选择最适合该任务的扩展程序。
在软件工程领域,函数被定义为自包含的代码模块,它们完成特定的任务,并且可以根据需要重复使用。当软件开发人员编写程序时,他们通常会创建许多函数来执行各种任务。他们还将定义何时调用 function_a 与 function_b 的逻辑,以及预期的输入和输出。
函数在Agent世界中的工作方式非常相似,但我们可以用模型替换软件开发人员。模型可以获取一组已知函数,并根据其规范决定何时使用每个函数以及函数需要哪些参数。函数与扩展程序的区别主要体现在以下几个方面:
图7
:
函数如何与外部API进行交互
使用函数的一个关键点是,它们旨在让开发人员能够更好地控制 API 调用的执行,以及整个应用程序中的整个数据流。在示例中,开发人员选择不将 API 信息返回给Agent,因为它与Agent可能采取的未来行动无关。
但是,根据应用程序的架构,将外部 API 调用数据返回给Agent可能是有意义的,以便影响未来的推理、逻辑和行动选择。最终,由应用程序开发人员来选择最适合特定应用程序的方法。
数据存储通过提供对更动态和最新信息的访问来解决这一限制,并确保模型的响应基于事实和相关性。
数据存储允许开发人员以其原始格式向Agent提供额外的数据,从而无需进行耗时的数据转换、模型再训练或微调。数据存储将传入的文档转换为一组向量数据库嵌入,Agent可以使用这些嵌入来提取补充其下一步操作或对用户响应所需的信息。
图11
:
数据存储将agents与各种类型的新实时数据源连接起来
在生成式 AI Agent的上下文中,数据存储通常被实现为开发人员希望Agent在运行时访问的向量数据库。虽然我们不会在这里深入介绍向量数据库,但要理解的关键点是,它们以向量嵌入的形式存储数据,向量嵌入是一种提供的数据的高维向量或数学表示。
Agent工具类型:
扩展、函数和数据存储构的区别
总的来说,扩展、函数和数据存储构成了agent在运行时可以使用的几种不同工具类型。每种工具都有其特定用途,并且可以根据agent开发者的意愿,选择一起使用或单独使用。
有效使用模型的一个关键方面是它们在生成输出时选择正确工具的能力,尤其是在生产中大规模使用工具时。虽然通用训练有助于模型发展这种技能,但现实世界的场景通常需要超出训练数据的知识。
为了帮助模型获得这种特定知识,存在几种方法:
上下文学习:
此方法在推理时为广义模型提供提示、工具和少样本示例,使其能够“动态”学习如何以及何时将这些工具用于特定任务。ReAct 框架是这种方法在自然语言中的一个例子。
基于检索的上下文学习:
此技术通过从外部内存中检索最相关的信息、工具和相关示例来动态填充模型提示。Vertex AI 扩展程序中的“示例存储”或前面提到的数据存储 RAG 架构就是一个例子。
基于微调的学习:
此方法涉及在推理之前使用更大的特定示例数据集来训练模型。这有助于模型在接收任何用户查询之前了解何时以及如何应用某些工具。
为了提供Agent实际运行的可执行示例,我们将使用 LangChain 和 LangGraph 库构建一个快速原型。这些流行的开源库允许用户通过将逻辑、推理和工具调用的序列“链接”在一起来构建客户Agent,以回答用户的查询。
虽然这是一个相当简单的Agent示例,但它展示了模型、编排和工具等基本组件如何协同工作以实现特定目标。在最后一节中,我们将探讨这些组件如何在 Google 规模的托管产品(如 Vertex AI Agent和 Generative Playbooks)中组合在一起。
十、使用Vertex AI Agent的生产应用程序
虽然本白皮书探讨了Agent的核心组件,但构建生产级应用程序需要将它们与其他工具(如用户界面、评估框架和持续改进机制)集成在一起。
Google 的 Vertex AI 平台通过提供一个完全托管的环境(包含前面介绍的所有基本元素)来简化此过程。使用自然语言界面,开发人员可以快速定义其Agent的关键元素(目标、任务说明、工具、用于任务委托的子Agent以及示例),以轻松构建所需的系统行为。
图15:
基于Vefiex AI平台构建的端到端agent架构示例
此外,该平台还配备了一套开发工具,允许进行测试、评估、测量Agent性能、调试以及改进已开发Agent的整体质量。这使得开发人员能够专注于构建和改进其Agent,而平台本身则负责管理基础设施、部署和维护的复杂性。
Agent的未来充满了令人兴奋的进步,我们才刚刚开始触及可能的表面。随着工具变得越来越复杂,推理能力得到增强,Agent将能够解决越来越复杂的问题。此外,“Agent链接”的战略方法将继续获得发展势头。
通过将专门的Agent(每个Agent都擅长于特定领域或任务)组合在一起,我们可以创建一种“Agent专家混合”方法,能够在各个行业和问题领域提供卓越的结果。
重要的是要记住,构建复杂的Agent架构需要迭代方法。实验和改进是为特定业务案例和组织需求找到解决方案的关键。由于构成其架构基础的基本模型的生成性质,没有两个Agent是完全相同的。
但是,通过利用每个基本组件的优势,我们可以创建有影响力的应用程序,扩展语言模型的功能并推动现实世界的价值。