Jika Anda memiliki fungsi yang dapat diakses oleh kode klien, tetapi tidak dapat diakses oleh alat yang dihosting, seperti OpenAPI atau MCP, Anda dapat menggunakan alat fungsi klien. Alat fungsi klien selalu dijalankan di sisi klien, bukan oleh agen.
Cara kerjanya
Saat agen memicu alat fungsi klien:
- Blokir Sesi: Sesi percakapan secara efektif "diblokir" di sisi server.
- Eksekusi Klien: Aplikasi klien Anda harus mengidentifikasi panggilan alat dan menjalankan logika yang sesuai di lingkungan lokal Anda.
- Memberikan Respons: Setelah eksekusi selesai, aplikasi
klien Anda harus memberikan respons kembali ke agen menggunakan
kolom
toolResponses.
Agen menunggu respons ini sebelum melanjutkan percakapan.
Konfigurasi
Saat membuat alat fungsi klien, Anda menentukan cara agen memahami dan berinteraksi dengan kode sisi klien Anda:
- Name: ID unik untuk alat (misalnya:
open_settings). - Deskripsi: Deskripsi singkat tentang tujuan alat. Model agen menggunakan deskripsi ini untuk memutuskan kapan harus memanggil fungsi.
- Skema Input/Output: Ditentukan dalam format OpenAPI. Hal ini menentukan struktur data yang dikirim dan diharapkan diterima oleh agen.
Kasus penggunaan
Alat fungsi klien sangat cocok untuk:
- Tindakan UI/UX: Memicu perubahan pada antarmuka aplikasi Anda (misalnya, "Buka layar dukungan").
- Data Perangkat Lokal: Mengakses informasi yang hanya tersedia dalam konteks aplikasi (misalnya, "Dapatkan level baterai saat ini").
- API Pribadi: Berintegrasi dengan layanan yang hanya dapat dijangkau dari lingkungan sisi klien.
Contoh
Contoh berikut adalah respons sesi yang menunjukkan bahwa aplikasi klien harus memanggil fungsi:
"outputs": [
{
"toolCalls": {
"toolCalls": [
{
"id": "<execution id>",
"tool": "<client function tool's resource name>",
"args": {
"zip_code": "92031"
},
"displayName": "get_nearest_store"
}
]
},
"turnCompleted": true,
}
]
Contoh berikut adalah sesi berikutnya yang dijalankan dengan output alat yang dilampirkan ke permintaan. Aplikasi klien harus mengisi kolom tersebut,
dan memasukkan nilai id, tool, dan display_name yang sama seperti di pesan
sebelumnya.
"inputs": [
{
"toolResponses": {
"toolResponses": [
{
"displayName": "get_nearest_store",
"id": "<execution id>",
"tool": "<client function tool's resource name>",
"response": {
"name": "Alibaba",
"address": "43 Alpha Road, Mountain View, CA 92039, USA"
},
}
]
}
}
]