𝗘𝗷𝗲𝗻 𝗔𝗜 𝗔𝗻𝗱𝗮 𝗔𝗸𝗮𝗻 𝗠𝗲𝗹𝗮𝗸𝘂𝗸𝗮𝗻 𝗖𝗮𝗷 𝗕𝗲𝗿𝗴𝗮𝗻𝗱𝗮 𝗝𝗶𝗸𝗮 𝗥𝗲𝘀𝗽𝗼𝗻𝘀 𝗛𝗶𝗹𝗮𝗻𝗴
Jika ejen AI anda memanggil alat untuk mengecas kad dan rangkaian memutuskan respons, ejen anda akan gagal dengan teruk. Ia mengecas pelanggan dua kali tanpa menyedarinya.
Wang telah pun dipindahkan. Ejen tidak pernah mendengar "ok". Ia melakukan apa yang dilakukan oleh setiap gelung cubaan semula (retry loop): ia mencuba lagi. Ia menggunakan prom yang sama dan hujah (arguments) yang sama. Ini menyebabkan caj kedua.
Cubaan semula (retry) bukanlah satu peristiwa rangkaian. Ia adalah satu keputusan tentang kesan sampingan (side effect) yang mungkin telah pun berlaku.
Alat cubaan semula standard seperti backoff dan jitter menjadikan cubaan semula lebih teratur. Ia tidak melakukan apa-apa untuk menghentikan caj berganda.
Anda memerlukan lejar idempotensi (idempotency ledger). Ini menggunakan kunci unik untuk memastikan sesuatu tindakan berlaku paling banyak sekali sahaja.
Terdapat dua cara panggilan alat gagal:
- Permintaan telah hilang. Tindakan tidak pernah berlaku. Mencuba semula adalah selamat.
- Respons telah hilang. Tindakan telah pun berlaku. Mencuba semula menyebabkan pertindihan.
Bagi ejen, kedua-duanya kelihatan serupa. Kedua-duanya kelihatan seperti tamat masa (timeout) atau sambungan terputus.
Jika sesuatu alat mempunyai kesan sampingan seperti pembayaran, e-mel, atau bayaran balik (refund), anda tidak boleh bergantung kepada cubaan semula yang mudah. Anda mesti menggunakan kunci idempotensi (idempotency key).
Cara untuk memperbaikinya:
- Tandakan alat anda. Kenal pasti alat mana yang mempunyai kesan sampingan yang tidak boleh dibatalkan.
- Gunakan kunci deterministik. Cipta kunci yang stabil berdasarkan ID aliran kerja (workflow ID), langkah, dan hujah (arguments). Lakukan ini sebelum LLM boleh mengubah hujah tersebut.
- Gunakan kunci penyedia. Jika anda menggunakan Stripe, hantarkan kunci idempotensi mereka. Penyedia mesti mengenali pengulangan tersebut untuk menghentikan caj.
- Bina lejar untuk alat anda sendiri. Untuk kesan sampingan yang anda uruskan, gunakan jadual pangkalan data dengan kekangan unik (unique constraint). Ini memastikan sistem anda merekodkan hasil sebelum ia mencuba lagi.
Jangan keliru antara "sekurang-kurangnya sekali" (at-least-once) dengan "tepat sekali" (exactly-once). Dalam sistem teragih (distributed systems), anda mendapat "tepat sekali" dengan menggabungkan penghantaran "paling banyak sekali" (at-most-once) dengan cubaan semula "sekurang-kurangnya sekali" dan lejar penyahduplikasian (deduplication ledger).
Berhenti melayan operasi tulis (writes) seperti operasi baca (reads). Mencuba semula operasi baca adalah percuma. Mencuba semula operasi tulis melibatkan kos.
Sumber: https://dev.to/0012303/your-ai-agent-will-double-charge-on-a-lost-response-5eed
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi