Vertex AI Skill Registry
Skill Registry는 버전이 지정된 SKILL.md 패키지를 zip 아카이브로
aiplatform.googleapis.com에 저장하는 Gemini Enterprise Agent Platform Build 축
서비스입니다. ADK-Rust는 이 서비스와 소비 전용 방식으로 통합됩니다.
즉, agent는 중앙에서 관리되는 skill을 검색하고 다운로드하며 로드하지만,
프로비저닝(create, update, delete, publish)은 플랫폼 도구에서 계속
담당합니다.
참고: Skill Registry API는 **v1beta1 (Preview)**이며,
us-central1,europe-west4,us-east5에서만 제공되는 지역별https://{location}-aiplatform.googleapis.com엔드포인트를 통해 서비스됩니다. 이는 agent를 카탈로그화하는 Govern 축의 별도 서비스인 Agent Registry와는 다릅니다.
설정
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_PROJECT 및 GOOGLE_CLOUD_LOCATION에서 가져오거나 명시적인 값을 사용할 수 있습니다.
클라이언트가 수행하는 작업과 수행하지 않는 작업
| 작업 | 표면 |
|---|---|
| 스킬 가져오기(페이로드 포함) | SkillRegistryClient::get_skill |
| 스킬 목록 조회 | SkillRegistryClient::list_skills |
| 의미론적 검색 | SkillRegistryClient::search_skills |
| 개정 버전 나열 / 가져오기 | list_skill_revisions, get_skill_revision |
| 다운로드, 검증, 추출 | fetch_skill_content, fetch_skill_revision_content |
| 생성 / 업데이트 / 삭제 | 구현되지 않음 — 플랫폼 도구가 수명 주기를 관리 |
다운로드된 모든 페이로드는 레지스트리의 다이제스트와 대조하여 SHA-256 검증을 거치며, 어떤 바이트도 사용되기 전에 심층 방어 방식의 zip 검증(항목 수, 경로 순회, 심볼릭 링크, 중복 이름, 크기, 압축 비율 및 깊이 제한)을 거쳐 압축이 해제됩니다.
에이전트에 레지스트리 스킬 로드
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 에이전트 도구
SkillSearchTool은 LLM 에이전트에 레지스트리 검색 기능을 제공합니다. 읽기 전용이며
동시성에 안전하므로 병렬 도구 디스패치에 참여합니다.
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}이고, 출력은 {name, skillName, description} 객체의
JSON 배열이며 가장 일치하는 항목이 먼저 나옵니다(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 list,
skills match 및 에이전트 스킬 검색이 즉시 이를 찾아 사용합니다. push 명령은
없으며, 게시 작업은 플랫폼 도구를 통해 수행됩니다.