Penyadapan alat lanjutan untuk agen ADK RMI

Ringkasan

Saat menangani set data besar, meneruskan data mentah secara langsung melalui model akan menimbulkan masalah: memperlambat respons, meningkatkan biaya token, dan menimbulkan kesalahan penalaran. Data RMI dapat mencakup jutaan baris, sehingga membiarkan agen membuat kueri dalam jumlah yang tidak terbatas dan menyerap semuanya untuk analisis akan mahal dalam token dan memperbesar jendela konteks, sehingga menurunkan performa agen pada setiap giliran berikutnya.

Misalnya, kueri pada tabel historical_travel_time RMI dapat menampilkan ribuan baris segmen jalan. Menempatkan seluruh kumpulan hasil kembali ke histori percakapan akan memperlambat setiap giliran berikutnya, meningkatkan biaya, dan mengalihkan perhatian model dari mensintesis jawaban akhir.

Petunjuk perintah saja tidak dapat menyelesaikan masalah ini. Satu-satunya pendekatan yang andal adalah mencegat panggilan alat dan merutekan payload data besar di luar jendela konteks model.

Callback alat ADK

ADK menyediakan hook callback untuk mencegat eksekusi alat. Untuk menangani set hasil yang besar, gunakan after_tool_callback:

  • before_tool_callback(tool, args, tool_context): Berjalan setelah model memilih alat, tetapi sebelum alat dijalankan.
  • after_tool_callback(tool, args, tool_context, tool_response): Berjalan setelah alat selesai, tetapi sebelum hasil dikembalikan ke model. Gunakan untuk mengubah respons alat.

Callback menerima objek tool_context dengan akses ke sesi state. Hal ini memungkinkan Anda menyimpan set data besar di memori latar belakang di seluruh giliran percakapan tanpa memasukkannya ke dalam perintah model.

# root_agent = llm_agent.Agent(
#     ...,
#     after_tool_callback=stash_and_truncate_results,
# )

Pemangkasan dan penyimpanan pasca-eksekusi

Tujuan: Menunjukkan sampel kecil hasil kueri kepada model untuk pengambilan keputusan, sekaligus menyimpan set data lengkap untuk output akhir.

Untuk agen RMI, after_tool_callback mencegat hasil execute_sql, menyimpan daftar lengkap baris dalam status sesi, dan menampilkan sampel singkat beserta jumlah total baris:

def stash_and_truncate_results(tool, args, tool_context, tool_response):
  if tool.name == "execute_sql" and "rows" in tool_response:
    rows = tool_response["rows"]
    tool_context.state["last_sql_result"] = rows      # keep everything
    tool_response["total_rows_fetched"] = len(rows)
    tool_response["rows"] = rows[:SAMPLE_LIMIT]        # show a sample
    tool_response["message"] = (
        f"Showing {SAMPLE_LIMIT} of {len(rows)} rows. "
        "Full result stashed in background state."
    )
  return tool_response

Menampilkan contoh akan mengurangi token input di semua giliran mendatang, sehingga menurunkan biaya dan waktu respons. Cara ini juga mencegah hasil kueri yang besar memenuhi jendela konteks dan merusak kemampuan model untuk mengikuti petunjuk.

Pastikan perintah agen Anda menjelaskan secara eksplisit bahwa alat menampilkan sampel berdasarkan desain. Tanpa konteks ini, model dapat menjadi bingung dengan data parsial, membuang-buang token komputasi dan penalaran untuk mencoba merekonsiliasi data yang hilang atau meluncurkan panggilan alat yang berlebihan untuk mengambil data lainnya.

Contoh: Menangani kumpulan hasil yang besar

  1. Pengguna bertanya "What are routes that have delay ratios over 2 right now?" (Rute mana yang saat ini memiliki rasio keterlambatan di atas 2?)
  2. Kueri agen terhadap historical_travel_time menampilkan ribuan baris.
  3. after_tool_callback menyimpan hasil lengkap dalam status sesi dan hanya menampilkan sampel kecil ditambah jumlah total baris.
  4. Model akan menalar contoh tersebut untuk menyusun ringkasannya.
  5. Aplikasi atau alat hilir membaca set data lengkap langsung dari status sesi untuk merender tabel lengkap atau mengekspor untuk pengguna.
Penyadapan Alat Agen RMI

Poin-poin penting

  • Menjaga payload besar agar tidak masuk ke perintah: Simpan set data besar dalam status sesi, bukan mengirimkannya bolak-balik melalui histori perintah.
  • Memangkas output alat yang besar: Gunakan after_tool_callback untuk menampilkan sampel kecil ke model sambil menyimpan hasil lengkap dalam status sesi.
  • Memberi tahu model tentang sampel: Tambahkan aturan perintah yang menjelaskan bahwa hasil diambil sampelnya untuk mencegah kebingungan model, token penalaran yang terbuang, dan panggilan alat yang berlebihan.

Langkah berikutnya

  • Referensi callback ADK: Baca panduan Callback ADK resmi untuk mengetahui detail tentang intersepsi tingkat model, agen, dan alat.

Kontributor

Nathaniel Thomas | Software Engineering Intern, Google Maps Platform