ADK 工具的限制¶
ADK 的某些内置工具存在特定的联用限制,这可能会影响你在智能体工作流中集成它们的方式。本页详细说明了这些局限性及其推荐的解决方法。
针对 ADK Python v1.15.0 及更低版本的搜索工具
下文所述的限制主要适用于 ADK Python v1.15.0 及更低版本在使用 Google 搜索和 Vertex AI 搜索工具时的场景。从 ADK Python v1.16.0 及更高版本开始,框架已提供内置机制消除了这些限制。
通常情况下,你可以在一个智能体中同时使用多个工具。但是,为了确保模型稳定性,在较低版本中,以下特定的内置工具不能在同一个智能体对象中与其他工具(无论是内置还是自定义)共存。它们必须单独使用:
- 使用 Gemini API 的代码执行
- 使用 Gemini API 的 Google 搜索
- Vertex AI 搜索
错误示例¶
以下这种尝试在单个智能体中整合多个互斥工具的做法是不受支持的:
解决方法 #1: 使用 AgentTool 模式¶
ADK 已支持PythonJava
解决此类限制的最有效方法是采用“智能体即工具”模式。你可以创建专门的子智能体来封装这些受限工具,然后将子智能体作为工具交给父智能体管理。
from google.adk.tools.agent_tool import AgentTool
from google.adk.agents import Agent
from google.adk.tools import google_search
from google.adk.code_executors import BuiltInCodeExecutor
# 专门负责搜索的智能体
search_agent = Agent(
model='gemini-2.0-flash',
name='SearchAgent',
tools=[google_search],
)
# 专门负责代码执行的智能体
coding_agent = Agent(
model='gemini-2.0-flash',
name='CodeAgent',
code_executor=BuiltInCodeExecutor(),
)
# 根智能体通过 AgentTool 统一调度
root_agent = Agent(
name="RootAgent",
model="gemini-2.0-flash",
tools=[AgentTool(agent=search_agent), AgentTool(agent=coding_agent)],
)
// 定义核心逻辑
LlmAgent searchAgent = LlmAgent.builder()
.name("SearchAgent")
.tools(new GoogleSearchTool())
.build();
LlmAgent codingAgent = LlmAgent.builder()
.name("CodeAgent")
.tools(new BuiltInCodeExecutionTool())
.build();
// 在根智能体中使用 AgentTool.create() 包装
BaseAgent rootAgent = LlmAgent.builder()
.name("RootAgent")
.tools(
AgentTool.create(searchAgent),
AgentTool.create(codingAgent)
)
.build();
解决方法 #2: 开启 bypass_multi_tools_limit 标志¶
ADK 已支持PythonJava
在 ADK Python 中,对于 GoogleSearchTool 和 VertexAiSearchTool,你可以显式设置 bypass_multi_tools_limit=True 来绕过此限制。你可以参考 built_in_multi_tools 示例了解详细配置。
关于子智能体 (Sub-agent) 的局限性
请注意,内置工具通常不能在受控的“子智能体”中直接使用(除非是上述已通过解决方法处理的情况)。
以下场景在当前架构下是不受支持的: