Registro de habilidades de Vertex AI

El Registro de habilidades es el servicio del pilar Build de Gemini Enterprise Agent Platform que almacena paquetes SKILL.md versionados como archivos zip en aiplatform.googleapis.com. ADK-Rust se integra con él únicamente para consumir: los agentes descubren, descargan y cargan habilidades administradas de forma centralizada, mientras que el aprovisionamiento (crear, actualizar, eliminar, publicar) permanece en las herramientas de la plataforma.

Nota: API del Registro de habilidades es v1beta1 (Preview) y se ofrece únicamente desde extremos regionales de https://{location}-aiplatform.googleapis.com en us-central1, europe-west4 y us-east5. Es distinto del Registro de agentes, un servicio independiente del pilar Govern para catalogar agentes.

Configuración

Habilita la función en adk-skill (y en adk-cli para los comandos):

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

La autenticación utiliza Application Default Credentials (gcloud auth application-default login). La configuración proviene de GOOGLE_CLOUD_PROJECT y GOOGLE_CLOUD_LOCATION, o de valores explícitos.

Lo que hace el cliente — y lo que no hace

OperaciónSuperficie
Obtener una habilidad (con carga útil)SkillRegistryClient::get_skill
Enumerar habilidadesSkillRegistryClient::list_skills
Búsqueda semánticaSkillRegistryClient::search_skills
Listar / obtener revisioneslist_skill_revisions, get_skill_revision
Descargar, verificar, extraerfetch_skill_content, fetch_skill_revision_content
Crear / actualizar / eliminarNo implementado — las herramientas de la plataforma gestionan el ciclo de vida

Cada payload descargado se verifica mediante SHA-256 contra el resumen del registro y se extrae con una validación de archivos zip en profundidad de defensa (recuento de entradas, recorrido de rutas, enlaces simbólicos, nombres duplicados, tamaño, proporción de compresión y límites de profundidad) antes de utilizar cualquier byte.

Cargar las habilidades del registro en un agente

load_skill_index_from_registry produce un SkillIndex estándar, por lo que la inyección, la selección y la coordinación funcionan exactamente igual que con las habilidades del sistema de archivos:

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(())
}

Los SkillDocument respaldados por el registro se crean mediante el mismo analizador y mecanismo de hashing que las habilidades del sistema de archivos; contienen un path virtual de {resource name}/SKILL.md y no tienen una marca de tiempo last_modified.

La herramienta de agente search_skills

SkillSearchTool expone la búsqueda del registro a los agentes LLM. Es de solo lectura y segura para la concurrencia, por lo que participa en el envío paralelo de herramientas:

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)))
}

La entrada es {"query": string, "top_k"?: integer}; la salida es un arreglo de objetos JSON de {name, skillName, description}, con la mejor coincidencia en primer lugar (el API no devuelve puntuaciones).

CLI

El binario adk-rust incorpora dos subcomandos de solo lectura detrás de la funcionalidad 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

Ambos comandos leen las opciones --project/--location y recurren a GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION. Las habilidades descargadas se colocan en la estructura estándar de habilidades (SKILL.md junto con su references/), por lo que skills list, skills match y el descubrimiento de habilidades del agente las detectan inmediatamente. No existe ningún comando push; la publicación se realiza mediante las herramientas de la plataforma.