Mendasari agen RMI ADK dalam keahlian domain dengan keterampilan

Ringkasan

Model bahasa besar memiliki pengetahuan umum yang luas, tetapi tidak mengetahui metrik, skema database, atau formula penghitungan spesifik domain Anda. Tanpa konteks ini, model akan menebak, yang menyebabkan SQL salah dan analisis cacat.

Agen ADK RMI mengatasi batasan ini melalui keterampilan. Pertimbangkan pengguna yang bertanya "bagaimana kondisi lalu lintas di Storrow Drive kemarin?". Untuk menjawab, agen harus mengetahui bahwa RMI menyatakan kemacetan sebagai Indeks Waktu Tempuh (TTI), rasio duration_in_seconds live terhadap static_duration_in_seconds lancar dalam tabel historical_travel_time. Agen tanpa keterampilan mungkin membuat kolom average_speed (laporan RMI hanya mencantumkan kecepatan kategoris, bukan km/j) atau menerapkan formula yang salah, sehingga menghasilkan jawaban yang meyakinkan, tetapi salah.

Meskipun agen memerlukan pengetahuan domain ini, memasukkan setiap definisi metrik, skema tabel, dan peringatan SQL ke dalam satu perintah sistem tidak efisien.

Batasan perintah sistem besar

Menempatkan semua aturan dan skema domain ke dalam satu perintah sistem menyebabkan beberapa masalah:

  • Biaya lebih tinggi dan respons lebih lambat: Mengirimkan perintah yang sangat besar di setiap giliran akan membuang-buang token dan meningkatkan latensi, bahkan untuk pertanyaan yang tidak memerlukan aturan tersebut.
  • Pemahaman perintah yang lebih buruk: Saat perintah menjadi lebih panjang dengan kasus ekstrem, model cenderung mengabaikan atau melupakan aturan tertentu.
  • Pemeliharaan yang lebih sulit: Menggabungkan semuanya ke dalam satu perintah akan menyulitkan untuk memperbarui atau menguji setiap aturan tanpa merusak aturan lainnya.

Keahlian

Keahlian Agen mengatur pengetahuan domain ke dalam folder modular yang hanya dimuat oleh agen saat diperlukan. Setiap keterampilan adalah direktori yang berisi file SKILL.md dengan petunjuk Markdown dan header YAML.

Daripada memuat semuanya di awal, agen hanya menyimpan deskripsi singkat description setiap keterampilan dalam perintah dasarnya. Saat pengguna mengajukan pertanyaan yang relevan dengan keterampilan, agen akan memuat petunjuk lengkap untuk giliran tersebut. Cara ini membuat perintah tetap singkat dan menghemat ruang konteks untuk histori percakapan yang sebenarnya.

Keahlian juga memberikan pemisahan masalah yang jelas: Anda dapat menulis, menguji, dan memperbarui kapabilitas individual secara terpisah tanpa risiko efek samping yang tidak diinginkan di seluruh domain yang tidak terkait. Agen produksi biasanya menggunakan beberapa keahlian yang terfokus, bukan satu perintah besar.

Anatomi keahlian

File SKILL.md memiliki dua bagian: header YAML untuk perutean dan isi Markdown untuk petunjuk.

1. Header 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.
---

Model menggunakan description untuk memutuskan apakah akan memuat skill. Karena model hanya melihat deskripsi ini sebelum memutuskan untuk memuat skill, pastikan deskripsi tersebut mencantumkan topik yang dibahas, frasa pengguna umum, dan kapan harus memicunya dengan jelas.

2. Isi Markdown

Isi memberikan panduan khusus domain yang diikuti model setelah dimuat. Isi materi keterampilan metrik RMI mencakup formula TTI yang tepat (duration_in_seconds / static_duration_in_seconds), template SQL BigQuery yang terverifikasi untuk setiap metrik, dan frasa pemicu yang memetakan maksud pengguna ke metrik yang tepat. Memberikan petunjuk terstruktur dan terverifikasi membuat model tetap memiliki dasar dan mencegahnya menebak detail skema atau formula.

Mendaftarkan skill dengan ADK

Kelompokkan keterampilan ke dalam SkillToolset dan tambahkan ke daftar alat agen:

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

Di sini, TRAFFIC_METRICS_SKILL_DIR mengarah ke direktori yang berisi keterampilan perujukan metrik traffic.

Menggabungkan alat dengan keterampilan

Karena keterampilan adalah petunjuk berbasis teks, hanya mengandalkan model untuk menafsirkan dan menjalankan logika yang kompleks dapat menyebabkan inkonsistensi. Melampirkan alat yang dapat dieksekusi ke skill memberikan determinisme: kode menangani kalkulasi, validasi, dan interaksi API yang ketat, sementara skill menginstruksikan model tentang kapan dan cara menggunakannya.

Alat penggabungan juga menghindari pembengkakan konteks global. Daripada menampilkan setiap alat khusus di awal, alat akan dimuat hanya saat keterampilan domain yang sesuai aktif.

Anda dapat melampirkan alat tertentu langsung ke keahlian di header YAML-nya:

metadata:
  adk_additional_tools:
    - calculate_custom_metric

Hal ini memastikan model menerima skema alat dan petunjuk penggunaannya secara bersamaan tepat pada waktunya, sehingga set alat dasar tetap ramping.

Contoh: Merujuk kueri kemacetan

  1. Pengguna bertanya "Seberapa padat lalu lintas di Storrow Drive saat jam sibuk sore?"
  2. Perintah sistem dasar hanya mengiklankan nama dan deskripsi setiap keahlian, sehingga agen melihat bahwa rmi-traffic-metrics-grounding mencakup "kemacetan" dan memanggil load_skill untuk menarik petunjuk lengkapnya untuk kueri ini.
  3. Setelah skill dimuat, agen menerapkan definisi TTI dan template SQL terverifikasi yang diberikannya, menghitung rasio terhadap historical_travel_time, bukan menebak formula.

Karena isi keahlian hanya diambil saat kueri memerlukannya, keahlian yang tidak pernah digunakan agen tidak pernah masuk ke dalam konteks, sehingga perintah sistem dasar tetap kecil.

Poin-poin penting

  • Dasar dengan panduan domain: Berikan petunjuk, batasan, dan logika bisnis yang eksplisit, bukan mengandalkan asumsi model umum.
  • Gunakan keterampilan modular: Pisahkan pengetahuan menjadi keterampilan yang terfokus, bukan satu perintah sistem besar untuk menghemat token, mengurangi latensi, dan meningkatkan akurasi.
  • Tulis deskripsi yang jelas: Sertakan frasa pemicu dan kata kunci tertentu dalam deskripsi setiap skill agar agen memuatnya dengan andal.
  • Sertakan contoh konkret: Tambahkan contoh terverifikasi dan alur kerja referensi ke isi keterampilan untuk menjaga output tetap konsisten dan akurat.
  • Menggabungkan alat untuk determinisme: Lampirkan alat yang dapat dieksekusi ke kemampuan untuk menangani validasi dan eksekusi yang ketat sekaligus menjaga agar set alat dasar tetap ramping.

Langkah berikutnya

Kontributor

Nathaniel Thomas | Software Engineering Intern, Google Maps Platform