Google ADK Agent工具选择指南:选对利器,智能飙升!

6 阅读12分钟

Google ADK通过函数工具、内置工具、第三方工具和MCP工具四类,赋予AI代理连接外部系统的能力。代理可执行代码、调用API、检索信息,从文本生成器转变为自主行动者,提升实际应用价值。

译自:How To Choose the Right Tool for Your Google ADK Agent

作者:Janakiram MSV

AI 代理连接到外部系统的能力定义了它们的实际用途。如果没有工具,代理仅限于根据其训练数据生成文本。有了工具,代理就变成了一个自主的行动者,能够检索实时信息、执行代码、调用 API 并与企业系统交互。Google 的 代理开发工具包(ADK)提供了一个全面的工具集成框架,用于确定代理如何扩展其超越语言模型的能力。

对于构建 代理应用的开发者来说,了解 ADK 的工具架构至关重要。这些模式反映了熟悉的软件开发概念:函数接口、插件系统和标准化协议。本文将使用 Python 开发、API 设计和应用架构中的类比,探讨 ADK 支持的四类工具。目标是阐明何时使用每种工具类型以及它们如何与代理运行时交互。

Google 代理开发工具包中的工具有哪些?

工具是代理调用以执行文本生成之外操作的可执行函数。当代理确定需要外部数据或功能时,它会选择一个合适的工具,传递所需的参数并处理返回的结果。这种交互遵循您在调用应用程序中的任何函数或 API 时使用的相同请求-响应模式。

将工具视为您的应用程序所依赖的外部库和服务。

将工具视为您的应用程序所依赖的外部库和服务。就像 Python 应用程序可能导入数据库客户端进行持久化、缓存库进行性能优化或 HTTP 客户端进行外部 API 调用一样,ADK 代理调用工具来扩展其功能。代理充当编排逻辑,而工具则充当处理特定功能的专用模块。

ADK 根据工具的来源和集成模式将工具分为四大类:函数工具、内置工具、第三方工具和 MCP 工具。每个类别服务于不同的用例并需要不同的集成方法。

1. 函数工具:构建自定义能力

函数工具是开发者定义的函数,通过自定义逻辑扩展代理能力。这些是使用 ADK 工具接口装饰的 Python 函数,允许代理在执行期间发现和调用它们。函数工具代表了最灵活的集成模式——您控制实现、输入、输出和行为。

这里的类比很简单:函数工具就像您为任何 Python 应用程序编写的实用函数或辅助模块。就像您可能创建一个专用模块来处理发票处理、地理定位查找或专有业务逻辑一样,函数工具封装了您的代理需要但其他地方不存在的特定功能。

考虑一个需要使用专有公式计算自定义风险指标的金融分析代理。没有外部服务提供此功能。您将计算逻辑实现为函数工具,通过清晰的参数定义和描述将其暴露给代理,代理在需要风险分析时调用它。代理通过其文档字符串和类型提示了解工具的功能——这与开发者通过文档和 IDE 自动完成了解函数功能的方式类似。

函数工具与代理在同一个进程中运行,这使得它们对于敏感操作来说既快速又安全。没有网络开销,没有外部认证,也没有第三方依赖。这使得函数工具成为以下场景的理想选择:

  • 专有业务逻辑:无法对外暴露或依赖于您组织独有内部算法的操作。
  • 数据转换:特定于您的领域且需要自定义实现的计算和处理。
  • 内部系统集成:直接库调用内部系统而无需网络暴露。
  • 安全操作:需要访问本地资源或不应通过网络传输的凭据的任务。

函数工具是您的自定义模块——专门构建、严格控制并直接导入到您的代理运行时中。

2. 内置工具:利用平台提供的能力

ADK 包含一套内置工具,提供开箱即用的通用功能。这些工具处理常见需求——如网络搜索、代码执行和检索增强生成(RAG)——无需自定义实现。Google 维护这些工具,确保其可靠性、性能以及与底层平台服务的集成。

在开发术语中,内置工具类似于标准库模块或 PyPI 中维护良好的包。就像您可能使用 Python 的 json 模块而不是编写自己的解析器,或利用 requests 而不是从头开始构建 HTTP 处理一样,内置工具提供了生产就绪的功能,而无需开发开销。

当前的内置工具集包括:

内置工具能力开发类比
Google Search实时网络搜索和信息检索一个托管的 API 客户端,已为您处理身份验证
Code Execution用于动态计算的沙盒化 Python 执行一个安全的 exec() 环境,具有隔离和资源限制
Vertex AI Search跨结构化和非结构化数据的企业搜索一个内置全文搜索的索引数据库

内置工具旨在提高即时生产力。您通过配置而不是代码启用它们,并且它们与代理运行时无缝集成。权衡是灵活性——您接受工具提供的行为,没有自定义选项。

对于需要搜索或代码执行等标准能力的代理,内置工具消除了开发工作和维护负担。对于特殊要求,您可以在其上叠加自定义函数工具。

3. 第三方工具:集成外部生态系统

ADK 支持与外部框架(最显著的是 LangChain)的工具集成。这种互操作性允许开发者使用现有工具库,而无需为 ADK 接口重写它们。如果您的组织已经投资了 LangChain 工具或希望访问其庞大的生态系统,ADK 提供了一个桥接两个框架的适配器层。

这种模式反映了软件开发中常见的适配器和包装器模式。当两个库具有不兼容的接口时,您会编写一个适配器来在它们之间进行转换。ADK 的第三方工具支持遵循类似的原则——一个转换层,使外部工具能够在不进行原生重新实现的情况下参与代理运行时。

集成通过包装函数实现,这些函数将 LangChain 的工具接口适配到 ADK 的期望。代理与这些工具的交互方式与原生函数工具相同;适配在后台进行。这种方法有几个优点:

  • 广泛的工具库访问:立即访问 LangChain 庞大的预构建工具集合,涵盖数据库、API 和外部服务。
  • 投资保护:保护对基于 LangChain 的开发的现有投资,而无需重写。
  • 渐进式迁移路径:逐步从 LangChain 迁移到 ADK,根据需要转换工具,而不是一次性全部转换。
  • 社区维护的工具:受益于通过社区贡献独立于 ADK 发展的工具。

第三方工具集成在将现有代理迁移到 ADK 或当特定功能存在于外部库但不存在于 ADK 的内置集中时最有价值。权衡包括额外的抽象层以及框架之间潜在的版本兼容性考虑。

4. MCP 工具:互操作性的标准化集成

模型上下文协议(MCP)工具代表了 ADK 对 AI 工具互操作性新兴标准的支持。MCP 定义了一个协议,用于 AI 代理如何在不同平台之间发现工具、进行身份验证和调用工具。ADK 代理可以连接到任何符合 MCP 的服务器,并使用其工具,而无需自定义集成代码。

MCP 工具为 AI 代理带来了与 REST 为 Web API 带来的相同的标准化——一个实现生态系统范围互操作性的通用接口。

对于开发者来说,MCP 的重要性通过与 API 标准化的比较变得清晰。在 REST 约定广泛传播之前,每个 Web 服务都需要自定义集成逻辑。在 REST 之后,开发者可以预测如何与任何兼容的 API 交互。MCP 旨在为 AI 工具实现相同的目标:任何兼容的代理框架都可以使用相同的模式调用任何兼容的工具服务器。

该架构涉及三个组件:

  • MCP 服务器:托管一个或多个工具,并通过标准协议暴露它们。服务器可以是本地进程、远程服务或云托管端点。
  • MCP 客户端:内置于 ADK 中,客户端处理远程工具的发现和调用。它管理连接生命周期、身份验证和响应处理。
  • 传输层:通常是通过 HTTP 的服务器发送事件(SSE),用于客户端和服务器之间的实时通信。

当 ADK 代理连接到 MCP 服务器时,它通过协议的内省机制发现可用的工具。每个工具的名称、描述和参数模式都可供代理使用。在执行期间,代理通过 MCP 客户端调用工具,该客户端处理序列化、传输和响应处理。

这种模式类似于插件架构,其中主机应用程序在运行时发现并加载扩展。代理不需要知道 MCP 服务器的实现细节——只需要知道它遵循标准协议即可。这使得:

  • 动态工具发现:可以在 MCP 服务器上添加、删除或更新工具,而无需更改代理代码。
  • 位置灵活性:连接到托管在任何地方的工具,包括本地进程、远程服务器或云服务。
  • 厂商中立性:开发和使用工具,不受框架锁定。
  • 生态系统增长:共享标准鼓励跨组织共享和重用工具。

MCP 工具对于企业环境特别有价值,其中工具可能由不同的团队或外部供应商维护。协议标准化确保了无论谁实现服务器,行为都保持一致。

如何根据您的需求选择合适的 ADK 工具

选择正确的工具类别取决于您的具体要求。以下决策框架将常见场景映射到适当的工具类型:

需求推荐工具类型理由
专有业务逻辑函数工具完全控制,无外部依赖
网络搜索或代码执行内置工具生产就绪,零实现工作
现有 LangChain 投资第三方工具保留现有工作,渐进式迁移
跨平台互操作性MCP 工具标准化、厂商中立集成
动态工具发现MCP 工具运行时灵活性,解耦部署
高安全性操作函数工具进程本地执行,无网络暴露

在实践中,生产代理通常会结合多种工具类型。一个企业代理可能使用内置工具进行搜索,使用函数工具进行专有计算,并使用 MCP 工具与外部企业系统集成。ADK 的运行时透明地处理这种异构性——代理根据功能而不是实现类型选择工具。

了解 ADK 中的工具调用流程

了解代理如何选择和调用工具有助于明确运行时行为。无论工具类别如何,该流程都遵循一致的模式:

  1. 提示处理:代理收到用户请求,并确定需要外部能力来完成它。
  2. 工具选择:根据工具描述和当前任务,代理从可用选项中选择合适的工具。
  3. 参数构建:代理从对话上下文和用户输入中提取或生成所需的参数。
  4. 调用:ADK 的运行时执行工具——对于函数工具是本地执行,对于 MCP 工具是远程执行,或通过适配器执行第三方工具。
  5. 结果处理:工具的输出返回给代理,以便纳入其响应或进行进一步处理。
  6. 迭代:如果需要,代理可能会根据中间结果调用其他工具,将功能串联起来。

这个循环在单个用户交互中可能会执行多次。一个回答复杂问题的代理可能会首先搜索网络获取当前信息,然后执行代码分析结果,然后查询内部数据库获取上下文——每一步都调用不同的工具。

代理有效串联工具的能力取决于清晰的工具描述。当您定义函数工具时,文档字符串和参数注解直接影响代理何时以及如何使用它。模糊的描述会导致不正确的工具选择;精确的描述能够实现可靠的自动化。

下一步

工具将 AI 代理从文本生成器转变为能够与世界交互的自主行动者。ADK 的工具架构提供了灵活性,可以集成来自多个来源的功能——自定义代码、平台服务、外部框架和标准化协议。

对于构建代理应用的开发者来说,这些模式是熟悉的。函数工具的行为就像您导入的自定义模块。内置工具类似于包含“电池”的维护良好的库。第三方集成反映了实现跨框架兼容性的适配器模式。MCP 工具带来了推动整个行业 API 生态系统增长的标准化。

了解这些类别有助于在设计代理系统时做出明智的架构决策。正确的工具类型取决于控制要求、现有投资和互操作性需求。大多数生产系统将结合多种类型,利用每个类别的优势。

在接下来的文章中,我将根据支持的类别探讨 ADK 的工具调用机制。敬请关注!