支持私有云部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


谷歌 AI Agent 白皮书(3)--工具

发布日期:2025-03-24 07:54:33 浏览次数: 1588 来源:哆啦的AI产品实践录
推荐语

谷歌AI Agent如何突破限制,实现与现实世界交互?

核心内容:
1. 语言模型与现实世界交互的局限
2. 工具(Functions、Extensions、Data Stores、Plugins)如何增强模型能力
3. Google模型支持的三种主要工具类型与应用场景

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

尽管语言模型擅长处理信息,但它们缺乏直接感知和影响现实世界的能力。这限制了它们在需要与外部系统或数据交互的场景中的实用性。这意味着,在某种意义上,语言模型的能力仅限于其从训练数据中学到的内容。但无论我们向模型输入多少数据,它们仍然缺乏与外界交互的基础能力。那么,我们如何让模型具备与外部系统实时、上下文感知的交互能力?函数(Functions)、扩展(Extensions)、数据存储(Data Stores)和插件(Plugins)都是为模型提供这一关键能力的途径。

尽管这些技术有不同名称,工具(tools)才是建立基础模型与外部世界之间桥梁的核心。这种与外部系统和数据的连接,使智能体能够执行更广泛的任务,并提高准确性与可靠性。例如,工具可使智能体完成以下操作:

  • 调节智能家居设置

  • 更新日历

  • 从数据库获取用户信息

  • 根据特定指令发送电子邮件

截至本文发布时,Google模型支持交互的主要工具类型有三种:

  1. 扩展(Extensions)

  2. 函数(Functions)

  3. 数据存储(Data Stores)

通过为智能体配备工具,我们不仅释放其理解世界的潜力,更赋予其改造世界的能力,从而开启无数新应用场景与可能性。

扩展(Extensions)

理解扩展(Extensions)的最简单方式,是将其视为以标准化方法连接API与智能体的桥梁,使得智能体能够无缝执行API,而无需关心其底层实现细节。例如:假设您构建了一个以帮助用户预订航班为目标的智能体。您确定需使用Google Flights API获取航班信息,但不确定如何让智能体调用此API端点。

一种可能的解决方案是编写自定义代码,其流程如下:

  1. 接收用户查询

  2. 解析查询以提取关键信息

  3. 执行API调用

例如,在航班预订场景中,用户可能提出请求:“我想预订从奥斯汀(Austin)到苏黎世(Zurich)的航班。”在此情况下,自定义代码需从查询中提取“奥斯汀”(出发城市)和“苏黎世”(目的地城市)作为关键实体,再发起API调用。

但如果用户说“我想预订去苏黎世的航班”且未提供出发城市,会发生什么?

  • API调用将因缺少必要数据而失败

  • 开发者需编写更多代码来处理此类边缘与极端情况(edge and corner cases)

这种方法存在严重缺陷:

  1. 不可扩展:每发现一个新问题都需修改代码

  2. 脆弱性:任何超出预设逻辑的场景都会导致系统崩溃

更稳健的方法是使用扩展(Extension)。扩展通过以下两个步骤连接智能体(agent)与API:

  1. 通过示例教导智能体如何使用API端点

  2. 明确告知智能体成功调用API端点所需的参数(arguments/parameters)

扩展(Extensions) 可独立于智能体(agent)开发,但需作为智能体配置的一部分提供。在运行时,智能体利用模型(model)和示例(examples)决定应选择哪个扩展(Extension)(如果有的话)来解决用户查询。这凸显了扩展的一个关键优势:其内置的示例类型(built-in example types),使智能体能够动态选择最适合当前任务的扩展。

类比理解:这如同软件开发者在解决用户问题时决定使用哪些API端点。例如:

  • 若用户需预订航班,开发者可能调用Google Flights API

  • 若用户需查找附近的咖啡店,开发者可能调用Google Maps API

同理,智能体/模型堆栈(agent/model stack) 通过一组已知的扩展(Extensions),选择最适合用户查询的选项。


实操演示: 若想体验扩展功能,可在Gemini应用中按以下路径操作:

  1. 前往 Settings(设置) > Extensions(扩展)

  2. 启用需测试的扩展(例如勾选 Google Flights扩展

  3. 向Gemini提问:“显示下周五从奥斯汀(Austin)到苏黎世(Zurich)的航班”

示例拓展

为简化扩展(Extensions)的使用,Google提供了若干开箱即用(out of the box)的扩展,这些扩展可快速导入项目并仅需最少配置即可使用。例如,代码片段1中的Code Interpreter扩展允许您根据自然语言描述生成并运行Python代码。

总结而言,扩展(Extensions)为智能体(Agents)提供了以下能力:

  1. 多维度交互外部世界

    感知(Perceive):通过API/数据库获取实时数据

    交互(Interact):执行外部系统操作(如发送邮件、更新日历)

    影响(Influence):触发现实世界动作(如控制智能设备)

  2. 选择与调用机制

    指引依据:通过示例(Examples)定义扩展的适用场景与参数规范

    配置集成:所有示例均作为扩展配置(Extension Configuration)的一部分,确保智能体在运行时能动态匹配最优扩展

技术价值:将开放世界的复杂性抽象为可编程接口,使智能体突破训练数据限制,实现环境感知-决策-行动闭环

Functions函数

在软件工程领域,函数(Functions)被定义为可完成特定任务并能按需复用的自包含代码模块。当软件开发者编写程序时,通常会创建多个函数来执行不同任务,同时定义以下逻辑:

  • 何时调用function_a而非function_b

  • 函数的预期输入与输出

在智能体领域,函数的工作方式非常相似,但决策主体从开发者变为模型(Model)

  • 模型可根据预定义函数规范(specification),决定何时使用特定函数及其所需参数

函数与扩展(Extensions)的主要区别

模型会输出函数及其参数,但不会直接执行实时API调用。

函数在客户端(client-side)执行,而扩展在代理端(agent-side)执行。

仍以Google Flights为例,函数的简单配置可能如图7(Figure 7)所示。

关键区别:函数(Function)与智能体(agent)均不直接与Google Flights API交互。那么API调用实际如何发生?

对于函数,调用实际API端点的逻辑和执行过程会从智能体到客户端应用程序(client-side application),如图8(Figure 8)和图9(Figure 9)所示。这为开发者提供了对应用数据流的更精细控制

开发者选择函数而非扩展(Extensions)的常见原因

  • API调用需在应用栈的其他层级执行,脱离智能体架构的直接流程(例如中间件系统、前端框架等)

  • 安全或认证限制阻止智能体直接调用API(例如API未暴露在互联网,或智能体基础设施无法访问)

  • 时序或操作顺序限制使智能体无法实时调用API(例如批量操作、人工审核流程等)

  • 需对API响应应用额外数据转换逻辑,而智能体无法执行此类操作

    • 示例:若API端点未提供结果数量限制的过滤机制,开发者可在客户端通过函数添加此类处理

  • 开发者希望迭代智能体开发,而无需为API端点部署额外基础设施(即函数调用可模拟API“桩”功能)

尽管这两种方法在内部架构上的差异如图8所示般微妙,但额外的控制权及与外部基础设施的解耦依赖,使得函数调用(Function Calling)成为开发者青睐的选择。

用例

开发者可利用模型调用函数(Function Calling),以处理面向终端用户的复杂客户端执行流程——尤其当开发者不希望语言模型直接管理API执行(如扩展/Extensions的场景)时。

以下以旅行礼宾代理(travel concierge agent)为例说明:该代理旨在与计划度假旅行的用户交互,目标是为其中间件(middleware)应用生成城市列表,以便下载旅行规划所需的图片、数据等。

用户输入示例“我想和家人一起滑雪旅行,但不确定去哪里。”

模型的典型响应

好的,以下是一些适合家庭滑雪旅行的城市推荐:  
• 美国科罗拉多州克雷斯特德比特(Crested Butte)  
• 加拿大不列颠哥伦比亚省惠斯勒(Whistler)  
• 瑞士采尔马特(Zermatt)  

此输出虽包含所需数据(城市名称),但格式不利于解析

函数调用的优化方案: 通过函数调用,可训练模型将输出格式化为结构化数据(如JSON),便于其他系统处理。针对同一用户输入,函数可能输出如代码片段5(Snippet 5)所示的JSON格式

此JSON有效载荷由模型生成,随后发送至我们的客户端服务器(Client-side server),我们可用它做我们想做的任何事。在此特定案例中,我们将调用Google Places API,通过模型提供的城市查询图片,再将结果以格式化的富媒体内容(formatted rich content)返回给用户。请参考图9(Figure 9)的序列图(sequence diagram),该图逐步展示了上述交互过程。

图9(Figure 9)示例的结果是:模型被用于“填补空白”,为客户端UI(Client side UI)调用Google Places API提供所需参数。客户端UI使用模型在返回函数中提供的参数管理实际API调用。这仅是函数调用(Function Calling)的一个用例,其他常见场景包括: 

• 您希望语言模型建议可在代码中使用的函数,但不想在代码中包含凭证。由于函数调用不会执行函数本身,因此无需在代码中随函数信息附带凭证。

• 您需要运行耗时超过数秒的异步操作。此类场景适合函数调用,因其本质为异步操作。 

• 您希望在与生成函数调用及参数的系统不同的设备上运行函数。

关于函数的关键要点是:它们旨在让开发者不仅对API调用执行,更对应用整体的数据流拥有更高控制权。在图9示例中,开发者选择不将API信息返回给智能体,因其与智能体后续行动无关。但根据应用架构,将外部API调用数据返回智能体以影响其未来推理、逻辑与行动选择可能更合理。最终,由应用开发者根据具体需求决定最佳方案。

Function sample code函数示例代码

为实现滑雪度假场景的上述输出,我们将逐步构建各个组件以适配gemini-1.5-flash-001模型:

首先,定义一个简单的Python方法

接下来,我们将实例化模型、构建工具(Tool),然后将用户查询与工具传入模型。执行以下代码将产生如代码片段底部所示的输出。

总结而言,函数(Functions)提供了一种直观的框架,为应用开发者赋能以下能力:

  1. 数据流与系统执行的精细控制

    可精确管理API调用时机、参数格式与结果处理流程

  2. 智能体/模型的核心价值聚焦

    利用模型生成关键输入(如参数填充、结构化数据生成),避免其直接操作外部系统

  3. 架构灵活性

    选择性闭环控制:开发者可决定是否将外部API返回的数据回传至智能体,以影响后续推理与行动

    按需解耦:根据应用架构需求,动态调整智能体在数据流中的参与程度

数据存储

比喻理解:将语言模型视为一座庞大的图书馆,其馆藏即其训练数据。但与持续购入新书的图书馆不同,这座图书馆的藏书静止不变,仅包含初始训练时的知识。这带来一个挑战:现实世界的知识在不断演进。

数据存储(Data Stores)通过以下方式突破此限制:

接入动态更新信息:连接实时数据源(如数据库、API流)。

保障回答的可靠性:确保模型的回答保持事实性与相关性。

典型应用场景示例:

当开发者需为模型提供少量新增数据时(例如电子表格或PDF文档),数据存储可高效完成此任务。

数据存储(Data Stores)使开发者能够以原始格式向智能体(agent)提供额外数据,从而省去以下耗时步骤的需求:

  • 数据转换(如格式标准化)

  • 模型重新训练(retraining)

  • 微调(fine-tuning)

其核心机制为:数据存储将输入文档转换为向量数据库嵌入(vector database embeddings),智能体利用这些嵌入提取所需信息,以补充其后续行动或对用户的响应

实现与应用

在生成式AI智能体(Generative AI agents)的语境中,数据存储(Data Stores)通常被实现为开发者希望智能体在运行时访问的向量数据库(vector database)。尽管此处不深入探讨向量数据库,但其核心机制是:以向量嵌入(vector embeddings)形式存储数据——即数据的高维向量/数学表示。

近年来,数据存储在语言模型中最典型的应用案例是检索增强生成(Retrieval Augmented Generation, RAG)类应用。这类应用通过让模型访问多种格式的数据,扩展其知识广度与深度(超越基础训练数据),支持的数据类型包括: 

• 网站内容

• 结构化数据:PDF、Word文档、CSV、电子表格等 

• 非结构化数据:HTML、PDF、TXT等

如图13(Figure 13)所示,用户请求与智能体响应循环的底层流程通常按以下步骤建模:

  1. 生成查询嵌入用户查询(query)发送至嵌入模型(embedding model),生成对应的查询嵌入(query embeddings)

  2. 向量数据库匹配使用SCaNN等匹配算法,将查询嵌入与向量数据库(vector database)中的内容进行相似度匹配

  3. 检索关联内容从向量数据库中以文本格式检索匹配内容,回传至智能体(agent)

  4. 响应生成与决策智能体同时接收用户原始查询检索内容,据此生成响应或执行操作

  5. 返回最终结果向用户返回最终响应

最终结果是一个应用程序,其使智能体(agent)能够通过以下流程响应用户:

  1. 向量搜索匹配:将用户查询与已知数据存储(data store)进行向量搜索匹配

  2. 原始内容检索:从数据存储中检索原始内容(如文档段落)

  3. 编排层与模型处理:将检索内容传递至编排层(orchestration layer)和模型进行后续处理

后续动作可能是:

  • 向用户提供最终答案

  • 执行额外向量搜索以进一步优化结果

示例交互:采用RAG(检索增强生成)ReAct推理/规划(ReAct reasoning/planning)的智能体交互流程可参见图14(Figure 14)。

工具概览

总结而言,扩展(Extensions)函数(Functions)数据存储(Data Stores)构成了智能体(Agents)在运行时(runtime)可用的几种工具类型。每类工具均有其独特用途,且可由智能体开发者(agent developer)自行决定独立使用或组合使用。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询