Panoramica
I modelli linguistici di grandi dimensioni hanno una vasta conoscenza generale, ma non conoscono le metriche specifiche, gli schemi di database o le formule di calcolo del tuo dominio. Senza questo contesto, il modello fa delle ipotesi, il che porta a SQL errati e analisi difettose.
L'agente ADK RMI risolve questa limitazione tramite le skill. Considera un utente che
chiede "quanto era congestionata Storrow Drive ieri?". Per rispondere, l'agente deve
sapere che RMI esprime la congestione come Indice del tempo di percorrenza (TTI), il rapporto
tra duration_in_seconds in tempo reale e static_duration_in_seconds a flusso libero nella
historical_travel_time tabella. Un agente senza skill potrebbe invece inventare una colonna average_speed (RMI segnala solo la velocità categorica, mai in km/h) o applicare la formula errata, producendo una risposta sicura ma errata.
Sebbene l'agente abbia bisogno di questa conoscenza del dominio, inserire ogni definizione di metrica, schema di tabella e avvertenza SQL in un singolo prompt di sistema è inefficiente.
Limitazioni dei prompt di sistema di grandi dimensioni
L'inserimento di tutte le regole e gli schemi di dominio in un singolo prompt di sistema causa diversi problemi:
- Costi più elevati e risposte più lente: l'invio di un prompt enorme a ogni turno spreca token e aumenta la latenza, anche per le domande che non richiedono queste regole.
- Seguito delle istruzioni peggiore: man mano che un prompt diventa più lungo con i casi limite, il modello diventa più propenso a ignorare o dimenticare regole specifiche.
- Manutenzione più difficile: la combinazione di tutto in un unico prompt rende difficile aggiornare o testare le singole regole senza interromperne altre.
Skill
Le skill dell'agente organizzano la conoscenza del dominio in cartelle modulari che l'agente carica solo quando necessario. Ogni skill è una directory contenente un file SKILL.md con istruzioni Markdown e un'intestazione YAML.
Anziché caricare tutto in anticipo, l'agente mantiene solo la breve description di ogni skill nel prompt di base. Quando un utente pone una domanda pertinente a una skill, l'agente carica le istruzioni complete per quel turno. In questo modo i prompt rimangono piccoli e lo spazio di contesto viene salvato per la cronologia delle conversazioni effettiva.
Le skill forniscono anche una chiara separazione delle responsabilità: puoi scrivere, testare e aggiornare le singole funzionalità in isolamento senza rischiare effetti collaterali indesiderati in domini non correlati. Un agente di produzione in genere utilizza più skill mirate anziché un prompt enorme.
Struttura di una skill
Un file SKILL.md è composto da due parti: un'intestazione YAML per il routing e un corpo Markdown per le istruzioni.
1. Intestazione YAML
---
name: rmi-traffic-metrics-grounding
description: >
Standard traffic performance metrics computable from RMI BigQuery
tables. Covers congestion severity (TTI), delay, travel time
reliability (LOTTR, BTI, PTI, CoV), congestion frequency, speed
breakdowns, and network-wide congestion rates. Use when the user asks
about traffic conditions, congestion, reliability, delay, or network
health.
---
Il modello utilizza la description per decidere se caricare la skill. Poiché il modello vede solo questa descrizione prima di decidere di caricare la skill, assicurati che elenchi chiaramente gli argomenti trattati, la fraseologia tipica dell'utente e quando attivarla.
2. Corpo Markdown
Il corpo fornisce le indicazioni specifiche del dominio che il modello segue una volta caricato.
Il corpo della skill delle metriche RMI include la formula TTI esatta (duration_in_seconds / static_duration_in_seconds), un modello SQL BigQuery verificato per ogni metrica e frasi di attivazione che mappano l'user intent alla metrica corretta. Fornire istruzioni strutturate e verificate mantiene il modello basato su dati concreti e impedisce di indovinare i dettagli dello schema o della formula.
Registra le skill con ADK
Raggruppa le skill in un SkillToolset e aggiungile all'elenco degli strumenti dell'agente:
from google.adk import skills
from google.adk.tools import skill_toolset
rmi_skill_toolset = skill_toolset.SkillToolset(
skills=[
# TRAFFIC_METRICS_SKILL_DIR points to the skill's SKILL.md folder.
skills.load_skill_from_dir(TRAFFIC_METRICS_SKILL_DIR),
],
)
# root_agent = llm_agent.Agent(..., tools=[*bq_tools, rmi_skill_toolset])
Qui, TRAFFIC_METRICS_SKILL_DIR punta alla directory contenente la skill di base delle metriche del traffico.
Raggruppa gli strumenti con le skill
Poiché le skill sono istruzioni basate su testo, affidarsi esclusivamente al modello per interpretare ed eseguire una logica complessa può portare a incoerenze. L'allegato di strumenti eseguibili a una skill fornisce determinismo: il codice gestisce calcoli, convalide e interazioni API rigorosi, mentre la skill indica al modello quando e come utilizzarli.
Il raggruppamento degli strumenti evita anche l'aumento del contesto globale. Anziché esporre in anticipo ogni strumento specializzato, gli strumenti vengono caricati solo quando la skill di dominio corrispondente è attiva.
Puoi allegare strumenti specifici direttamente a una skill nella relativa intestazione YAML:
metadata:
adk_additional_tools:
- calculate_custom_metric
In questo modo, il modello riceve lo schema dello strumento e le relative istruzioni per l'uso appena in tempo, mantenendo snello il set di strumenti di base.
Esempio: basare una query di congestione
- L'utente chiede "Quanto è congestionata Storrow Drive durante l'ora di punta serale?"
- Il prompt di sistema di base pubblicizza solo il nome e la descrizione di ogni skill, quindi l'agente vede che
rmi-traffic-metrics-groundingcopre la "congestione" e chiamaload_skillper recuperare le istruzioni complete per questa query. - Con la skill caricata, l'agente applica la definizione TTI e il modello SQL verificato che fornisce, calcolando il rapporto rispetto a
historical_travel_timeanziché indovinare una formula.
Poiché il corpo di una skill viene recuperato solo quando una query ne ha bisogno, le skill che l'agente non utilizza mai non entrano nel contesto, mantenendo piccolo il prompt di sistema di base.
Concetti chiave
- Basati sulle indicazioni del dominio: fornisci istruzioni, vincoli e logica di business espliciti anziché affidarti a ipotesi generali del modello.
- Utilizza skill modulari: dividi la conoscenza in skill mirate anziché in un unico prompt di sistema enorme per risparmiare token, ridurre la latenza e migliorare l'accuratezza.
- Scrivi descrizioni chiare: includi frasi e parole chiave di attivazione specifiche nella descrizione di ogni skill in modo che l'agente la carichi in modo affidabile.
- Includi esempi concreti: aggiungi esempi verificati e flussi di lavoro di riferimento ai corpi delle skill per mantenere gli output coerenti e accurati.
- Raggruppa gli strumenti per il determinismo: allega strumenti eseguibili alle skill per gestire la convalida e l'esecuzione rigorose mantenendo snello il set di strumenti di base.
Passaggi successivi
- Esplora i pattern di skill avanzati: leggi la Guida per gli sviluppatori alla creazione di agenti ADK con skill per scoprire di più sulle skill ADK.
Collaboratori
Nathaniel Thomas | Software Engineering Intern, Google Maps Platform