Vertex AI 技能注册表

技能注册表是 Gemini Enterprise Agent Platform 构建支柱服务,用于将版本化的 SKILL.md 软件包以 zip 压缩包的形式存储在 aiplatform.googleapis.com 上。ADK-Rust 以仅消费方式与其集成:代理发现、下载并加载由中央统一管理的技能,而配置(创建、更新、删除、发布)则仍由平台工具负责。

**注意:**技能注册表 API 为 v1beta1(预览版),仅通过位于 us-central1europe-west4us-east5 中的区域性 https://{location}-aiplatform.googleapis.com 端点提供。它不同于代理注册表,后者是用于对代理进行编目管理的独立 Govern 支柱服务。

设置

adk-skill 上启用此功能(并在 adk-cli 上启用命令所需的功能):

[dependencies]
adk-skill = { version = "2.1.0", features = ["vertex-skill-registry"] }

身份验证使用应用默认凭据(Application Default Credentials,gcloud auth application-default login)。配置来自 GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION,也可以使用显式值。

客户端执行和不执行的操作

操作接口
获取技能(带有效载荷)SkillRegistryClient::get_skill
列出技能SkillRegistryClient::list_skills
语义搜索SkillRegistryClient::search_skills
列出 / 获取修订版本list_skill_revisionsget_skill_revision
下载、验证、提取fetch_skill_contentfetch_skill_revision_content
创建 / 更新 / 删除尚未实现 — 平台工具负责生命周期

每个下载的有效载荷都会根据注册表的摘要进行 SHA-256 验证,并在使用任何字节之前,通过纵深防御式 ZIP 验证进行解压(包括条目数量、路径遍历、符号链接、重复名称、大小、压缩比和深度限制)。

将注册表技能加载到 agent 中

load_skill_index_from_registry 生成标准的 SkillIndex,因此注入、选择和协调的工作方式与文件系统技能完全相同:

use adk_skill::registry::{
    RegistrySkillFilter, SkillRegistryClient, SkillRegistryConfig,
    load_skill_index_from_registry, merge_skill_indexes,
};
use adk_skill::load_skill_index;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = SkillRegistryClient::new_with_adc(SkillRegistryConfig::from_env()?)?;

    // Select by semantic search…
    let remote = load_skill_index_from_registry(
        &client,
        RegistrySkillFilter::by_query("quarterly reporting").with_top_k(5),
    )
    .await?;

    // …or by explicit names, optionally pinned to a revision.
    let pinned = load_skill_index_from_registry(
        &client,
        RegistrySkillFilter::by_names(["report-writer"]).with_revision("3"),
    )
    .await?;

    // Merge with project-local skills — local wins on name collision,
    // matching the project-local-over-global precedence of
    // load_skill_index_with_extras.
    let local = load_skill_index(".")?;
    let merged = merge_skill_indexes(local, remote);
    println!("{} skill(s) available ({} pinned)", merged.len(), pinned.len());
    Ok(())
}

基于注册表的 SkillDocuments 通过与文件系统技能相同的解析器和哈希处理构建;它们携带一个由 {resource name}/SKILL.md 组成的虚拟 path,且没有 last_modified 时间戳。

search_skills agent 工具

SkillSearchTool 向 LLM agents 提供注册表搜索功能。它是只读且并发安全的,因此可以参与并行工具调度:

use adk_skill::registry::{SkillRegistryClient, SkillRegistryConfig, SkillSearchTool};
use std::sync::Arc;

fn build_tool() -> adk_core::Result<SkillSearchTool> {
    let client = SkillRegistryClient::new_with_adc(SkillRegistryConfig::from_env()?)?;
    Ok(SkillSearchTool::new(Arc::new(client)))
}

输入为 {"query": string, "top_k"?: integer};输出为一个 JSON 数组,其中包含 {name, skillName, description} 对象,最佳匹配项排在最前(API 不返回分数)。

CLI

adk-rust 二进制文件在 vertex-skill-registry 特性后新增了两个只读子命令:

[dependencies]
adk-cli = { version = "2.1.0", features = ["vertex-skill-registry"] }
# Semantic search (best match first)
adk-rust skills search "quarterly reporting" --top-k 5

# Materialize a skill package under .skills/<skill-id>/
adk-rust skills pull report-writer

# Pin a revision and choose the target directory
adk-rust skills pull report-writer --revision 3 --dir vendored-skills

两个命令都会读取 --project/--location 标志,并在未提供时回退到 GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION。拉取的技能会放置在标准技能布局中(SKILL.md 及其 references/),因此 skills listskills match 和 agent 技能发现机制会立即将其识别。不存在 push 命令——发布通过平台工具完成。

Vertex AI 技能注册表 - ADK-Rust 文档 | ADK-Rust