Registre des compétences Vertex AI

Le registre des compétences est le service du pilier Build de Gemini Enterprise Agent Platform qui stocke les packages SKILL.md versionnés sous forme d’archives zip sur aiplatform.googleapis.com. ADK-Rust s’y intègre en mode consommation uniquement : les agents découvrent, téléchargent et chargent des compétences gouvernées de manière centralisée, tandis que le provisionnement (création, mise à jour, suppression, publication) reste assuré par les outils de la plateforme.

Remarque : le API du registre des compétences est en v1beta1 (Preview), fourni uniquement depuis des points de terminaison https://{location}-aiplatform.googleapis.com régionaux dans us-central1, europe-west4 et us-east5. Il est distinct du registre des agents, un service séparé du pilier Govern destiné à cataloguer les agents.

Configuration

Activez la fonctionnalité sur adk-skill (et sur adk-cli pour les commandes) :

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

L’authentification utilise les identifiants par défaut de l’application (gcloud auth application-default login). La configuration provient de GOOGLE_CLOUD_PROJECT et GOOGLE_CLOUD_LOCATION, ou de valeurs explicites.

Ce que fait le client — et ce qu’il ne fait pas

OpérationSurface
Obtenir une compétence (avec charge utile)SkillRegistryClient::get_skill
Répertorier les compétencesSkillRegistryClient::list_skills
Recherche sémantiqueSkillRegistryClient::search_skills
Répertorier / récupérer les révisionslist_skill_revisions, get_skill_revision
Télécharger, vérifier, extrairefetch_skill_content, fetch_skill_revision_content
Créer / mettre à jour / supprimerNon implémenté — les outils de la plateforme gèrent le cycle de vie

Chaque charge utile téléchargée est vérifiée par SHA-256 par rapport à l’empreinte du registre, puis extraite avec une validation zip en profondeur (nombre d’entrées, traversée de chemins, liens symboliques, noms en double, taille, ratio de compression et limites de profondeur) avant que le moindre octet ne soit utilisé.

Charger les compétences du registre dans un agent

load_skill_index_from_registry produit un SkillIndex standard, de sorte que l’injection, la sélection et la coordination fonctionnent exactement comme avec les compétences du système de fichiers :

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

Les SkillDocuments adossées au registre sont créées par le même analyseur et le même mécanisme de hachage que les compétences du système de fichiers ; elles contiennent un path virtuel de {resource name}/SKILL.md et aucun horodatage last_modified.

L’outil d’agent search_skills

SkillSearchTool expose la recherche dans le registre aux agents LLM. Il est en lecture seule et sûr en contexte concurrent, ce qui lui permet de participer à la distribution parallèle des outils :

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

L’entrée est un {"query": string, "top_k"?: integer} ; la sortie est un tableau de JSON composé d’objets {name, skillName, description}, avec le meilleur résultat en premier (le API ne renvoie aucun score).

CLI

Le binaire adk-rust acquiert deux sous-commandes en lecture seule derrière la fonctionnalité 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

Les deux commandes lisent les options --project/--location, en utilisant GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION comme solution de repli. Les compétences récupérées sont placées dans la structure standard des compétences (SKILL.md ainsi que son references/), de sorte que skills list, skills match et la découverte des compétences par l’agent les prennent immédiatement en compte. Il n’existe aucune commande push — la publication passe par les outils de la plateforme.