Agent Registry — 发现、注册和远程调用
Agent Registry 是 Gemini Enterprise Agent Platform 的治理支柱:一个限定项目范围的代理、MCP 服务器和端点目录。ADK-Rust 以三种方式参与其中。
| 能力 | 功能 | Crate |
|---|---|---|
搜索并解析已注册的代理(AgentRegistryClient、AgentSearchTool) | vertex-agent-registry | adk-tool |
| 注册自托管代理、MCP 服务器以及来自 CLI 的端点 | vertex-agent-registry | adk-cli |
调用已注册的 Agent Engine 作为子代理 (RemoteReasoningEngineAgent) | vertex-remote-engine | adk-server |
注意: 这些功能与
adk-server上的本地 YAMLagent-registry功能无关,并且 Agent Registry(agents/MCP servers/endpoints)与 Skill Registry(SKILL.md packages — 参见docs/official_docs/skills/skill-registry.md)是不同的平台服务。
自动注册与手动注册
Agent Engine 部署会自行注册:创建引擎(例如使用 adk-rust deploy agent-engine)会将其添加到注册表,并使条目生命周期保持同步。不要再次注册它——手动条目会在不同的 URN 命名空间下产生重复项。
其他所有对象都支持手动注册,CLI 涵盖的正是这一点:
# A self-hosted adk-server agent, described by its A2A agent card
adk-rust registry register-agent --service-id my-agent --card agent-card.json
# An external MCP server (you supply the tools/list payload; no introspection)
adk-rust registry register-mcp --service-id my-mcp --tool-spec tools-list.json \
--url https://mcp.example.com/rpc
# A bare governed endpoint
adk-rust registry register-endpoint --service-id my-api --url https://api.example.com/v1
# Discovery
adk-rust registry search "travel planner" --type agent
所有命令都使用 --project/--location(回退到 GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION),并且具有幂等性:重新注册现有服务 ID 时,只会更新发生变化的字段;如果没有任何变化,则不会执行写入。手动条目不会进行生命周期同步——更新或移除它们由你负责。us/eu 多区域不支持手动注册;请使用某个区域或 global。
从代理中发现其他代理
AgentSearchTool 将 LlmAgent 注册表搜索作为普通的只读工具提供:
use adk_tool::{AgentRegistryClient, AgentRegistryConfig, AgentSearchTool};
use std::sync::Arc;
# fn build() -> adk_core::Result<()> {
let registry = AgentRegistryClient::new_with_adc(
AgentRegistryConfig::new("my-project", "us-central1"),
)?;
let search_tool = Arc::new(AgentSearchTool::new(Arc::new(registry)));
# let _ = search_tool;
# Ok(())
# }
该工具会返回代理、MCP 服务器或端点的 {urn, displayName, description, skills, endpoint} 摘要。
委托给已部署的引擎
RemoteReasoningEngineAgent 可将任何已部署的 Agent Engine 作为普通子代理使用——它会通过 reasoningEngines:streamQuery 转发本轮请求,并将远程事件作为 ADK 事件传递:
use adk_server::agent_engine::remote::RemoteReasoningEngineAgent;
# async fn build() -> adk_core::Result<()> {
let remote = RemoteReasoningEngineAgent::builder("specialist")
.resource_name("projects/my-project/locations/us-central1/reasoningEngines/4242")
.build()
.await?;
# let _ = remote;
# Ok(())
# }
也可以通过注册表 URN(.urn(...) 加上 .registry(...))访问引擎;资源名称会根据条目的运行时引用进行解析。默认类方法为 streaming_agent_run_with_events;对于非 ADK 引擎,会一次性回退到 stream_query。
请参阅 examples/agent_orchestrator,了解完整模式——在一个编排器中结合注册表搜索与远程委派。
启用所有功能
[dependencies]
adk-rust = { version = "2.1.0", features = ["minimal", "gemini-agent-platform"] }
gemini-agent-platform 元功能包含 vertex-agent-registry 和 vertex-remote-engine,以及所有其他平台集成。