Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Agen AI Anda memanggil alat: API HTTP, server MCP, dan layanan lainnya. Alat-alat tersebut mengalami timeout, terkena batas rate limit, mengembalikan kesalahan, dan mengirim data dalam bentuk yang tidak Anda harapkan. Model memutuskan apa yang harus dilakukan selanjutnya berdasarkan apa yang dikembalikan kode Anda kepadanya. Jika kode Anda meneruskan kembali pengecualian, string kosong, atau tidak mengembalikan apa pun sama sekali setelah menunggu lama, agen berperilaku berbeda daripada jika mendapatkan kesalahan yang jelas.
Bagaimana kegagalan alat bisa terjadi
- Agen macet. Pemanggilan tool tanpa timeout membuat pengguna menunggu.
- Agen melakukan pengulangan. Model memanggil tool yang gagal lagi dan lagi, menggunakan token dan rate limit tool.
- Agen menyembunyikannya. Kode Anda menelan kesalahan, dan model menjawab seolah-olah alat berhasil.
- Agen mogok. Pengecualian yang tidak tertangani mengakhiri seluruh percakapan.
Cara menangani kegagalan alat
- Atur batas waktu pada setiap pemanggilan tool dan anggaran untuk seluruh putaran. Spesifikasi MCP mengatakan klien harus menerapkan batas waktu untuk panggilan alat.
- Coba lagi jika terjadi kesalahan sementara pada kode. Tangani respons 429 dan 503 dalam kode alat Anda, hormati
Retry-After, dan batasi jumlah upaya, sehingga model tidak perlu memutuskan kapan harus mencoba kembali. - Kembalikan hasil kegagalan ke model sebagai hasil yang jelas. MCP memisahkan kesalahan protokol, seperti alat yang tidak diketahui atau argumen yang tidak valid, dari kesalahan eksekusi alat, seperti kegagalan API. Ini melaporkan kesalahan eksekusi dalam hasil alat dengan
isError: true, sehingga model dapat melihat apa yang salah. Katakan apa yang gagal dan apakah mencoba lagi masuk akal. - Batasi jumlah panggilan alat per giliran. Setelah sejumlah kegagalan yang ditetapkan, hentikan dan beri tahu pengguna.
- Validasi hasil alat sebelum Anda meneruskannya ke model. Spesifikasi MCP mengatakan klien harus melakukan ini, dan harus memvalidasi hasil terstruktur terhadap skema output alat jika ada.
- Beri tahu pengguna apa yang tidak berfungsi. Jawaban yang dibangun pada panggilan alat yang gagal harus menyatakan hal tersebut.
Cara menguji penanganan kegagalan alat di agent Anda
| Approach | Apa yang Anda temukan | Yang Anda lewatkan |
|---|---|---|
| Uji unit pembungkus alat Anda dengan klien stub | Bagaimana kode Anda memetakan error yang Anda tulis | Apa yang dilakukan model dengannya, dan bagaimana alat nyata gagal |
| Rusak alat yang sebenarnya, misalnya hentikan server atau cabut kunci akses | Kegagalan nyata seperti itu | Pembatasan laju, respons lambat, dan data cacat, yang tidak bisa Anda picu sesuka hati |
| Tulis API palsu atau server MCP | Respons apa pun yang Anda buat | Anda harus mengarahkan agen Anda ke yang palsu, dan agen itu menyimpang dari alat yang sebenarnya |
| Mencegat trafik alat nyata agen dan memicu kegagalan | Apa yang dilakukan agen dan model yang sedang berjalan dengan kesalahan, latensi, dan data buruk dari alat nyata | Kode Anda secara terpisah. Gunakan pengujian unit untuk itu. |
Output model dapat bervariasi di antara eksekusi, jadi jalankan setiap skenario kegagalan lebih dari sekali.
Coba ini di aplikasi Anda
Dev Proxy berada di antara agen Anda dan alatnya dan menyuntikkan kegagalan, tanpa perubahan pada kode agen Anda.
Untuk alat yang memanggil API HTTP, gabungkan kesalahan acak, latensi, dan periksa apakah agen Anda menunggu selama yang diminta API:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
},
{
"name": "LatencyPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "latencyPlugin"
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi"
}
],
"urlsToWatch": [
"https://api.contoso.com/*"
],
"latencyPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/latencyplugin.schema.json",
"minMs": 2000,
"maxMs": 10000
},
"errorsContosoApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json",
"rate": 50
}
}
Tentukan kesalahan di errors-contoso-api.json, seperti yang dijelaskan di Uji aplikasi saya dengan kesalahan acak. Atur Retry-After ke @dynamic pada respons 429 Anda. RetryAfterPlugin hanya memeriksa hal-hal tersebut.
Untuk server MCP yang menggunakan STDIO, mulai server melalui devproxy stdio dengan konfigurasi yang mengaktifkan MockStdioResponsePlugin, seperti yang ditunjukkan dalam stdio contoh konfigurasi. Simpan sebagai devproxyrc-stdio.json. Kemudian masukkan ini stdio-mocks.json untuk mengembalikan kesalahan eksekusi alat untuk setiap permintaan tools/call:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/mockstdioresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"bodyFragment": "tools/call"
},
"response": {
"stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Failed to fetch weather data: API rate limit exceeded\"}],\"isError\":true}}\n"
}
}
]
}
devproxy stdio --config-file devproxyrc-stdio.json npx -y @modelcontextprotocol/server-filesystem
Agar agen Anda menggunakannya, ubah perintah dalam konfigurasi server MCP agen Anda sehingga memulai server melalui devproxy stdio. Gunakan properti nth pada tiruan untuk hanya gagal dalam panggilan tertentu, dan tambahkan LatencyPlugin untuk memperlambat respons server.
Untuk menguji apa yang dilakukan agen Anda ketika model itu sendiri gagal, LanguageModelFailurePlugin membuat model berhalusinasi, mengabaikan instruksi, atau menjawab dalam format yang salah. Lihat Uji aplikasi saya dengan kegagalan model bahasa.
Untuk menginstal Dev Proxy, lihat Menyiapkan Dev Proxy.