Alat Idempoten dan Efek Samping
Agen mungkin melakukan percobaan ulang—rancang alat agar pemanggilan dua kali tidak menggandakan tagihan atau pengiriman surel.
Alat Idempoten dan Efek Samping adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Mengapa Idempotensi Penting
Perulangan agen mungkin melakukan percobaan ulang. Jika sebuah alat mengirim email atau menagih kartu kredit, percobaan ulang akan menggandakan tindakan tersebut. Idempotensi membuat "lakukan X lagi" tidak menghasilkan apa-apa jika X sudah terjadi.
Apa Itu Idempotensi
Sebuah operasi bersifat idempoten jika memanggilnya N kali menghasilkan efek yang sama seperti memanggilnya sekali. Contoh:
- "Atur status pengguna menjadi aktif" — idempoten (mengaturnya kembali menjadi aktif tidak melakukan apa-apa)
- "Tambah penghitung sebanyak 1" — NOT idempoten (setiap panggilan menambahkan 1 lagi)
Kunci Idempotensi
Untuk operasi yang tidak idempoten (pembayaran, email), gunakan kunci idempotensi:
import uuid
def create_payment(amount, idempotency_key):
# Stripe accepts this header — returns the existing payment if key was used
return stripe.Charge.create(
amount=amount,
currency='usd',
source=token,
idempotency_key=idempotency_key
)Buat Kunci dari Maksud
Gunakan hash dari (nama alat, argumen, id eksekusi) agar percobaan ulang yang identik menggunakan kembali kunci yang sama:
import hashlib, json
def intent_key(tool_name, args, run_id):
payload = json.dumps([tool_name, args, run_id], sort_keys=True)
return hashlib.sha256(payload.encode()).hexdigest()
print(intent_key('transfer_money', {'to': 'acc2', 'amount': 100}, 'run-1'))
Inventarisasi Efek Samping
Daftarkan alat yang memiliki efek samping:
- SEND email / SMS
- CHARGE / refund
- CREATE / DELETE baris basis data
- POST ke API eksternal yang mengubah keadaan
Alat baca-saja secara inheren bersifat idempoten. Fokuslah pada operasi tulis.
Bungkus Alat yang Memiliki Efek Samping
Tambahkan lapisan idempotensi dalam implementasi alat:
def send_email(to, subject, body, run_id):
key = intent_key('send_email', {'to': to, 'subject': subject, 'body': body}, run_id)
if redis.set(f'sent:{key}', 1, nx=True, ex=86400):
smtp.send(to, subject, body)
return {'sent': True}
return {'sent': False, 'reason': 'already-sent'}Konfirmasi Sebelum Bertindak
Untuk tindakan yang berisiko tinggi, tambahkan langkah konfirmasi:
def transfer_money(from_acc, to_acc, amount, confirmed=False):
if not confirmed:
return {'pending': True, 'msg': 'Call again with confirmed=True to proceed.'}
return {'pending': False, 'msg': f'Transferred {amount} from {from_acc} to {to_acc}.'}
print(transfer_money('acc1', 'acc2', 100))
print(transfer_money('acc1', 'acc2', 100, confirmed=True))
Alat Dua Fase
Pisahkan alat menjadi fase "draf" dan "komit":
def draft_email(to, subject, body):
draft_id = save_draft(to, subject, body)
return {'draft_id': draft_id, 'preview': body[:200]}
def send_draft(draft_id):
return smtp.send(load_draft(draft_id))Tindakan Kompensasi
Jika Anda tidak dapat menghindari efek samping, tentukan alat "undo":
def refund_payment(payment_id):
return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.Log Audit
Setiap alat yang memiliki efek samping MUST mencatat: siapa yang memicunya, argumen apa yang digunakan, kapan dijalankan, dan hasilnya. Gunakan log terstruktur yang dapat Anda kueri nanti.
Batas Efek Samping per Eksekusi
Batasi efek samping per eksekusi sebagai pengaman:
if state.side_effect_count >= 5:
return {'error': 'Side-effect budget exhausted for this run.'}Mode Simulasi
Berguna selama pengembangan: alat mencatat tindakan yang WOULD dilakukan, tetapi tidak benar-benar menjalankannya:
import os
os.environ['DRY_RUN'] = '1'
DRY_RUN = os.getenv('DRY_RUN') == '1'
def send_email(to, subject, body):
if DRY_RUN:
print(f'would send email to {to}')
return {'sent': False, 'dry_run': True}
print(f'sending email to {to}')
return {'sent': True, 'dry_run': False}
result = send_email('user@example.com', 'Hi', 'Hello there')
print(result)
Definisi
Apa arti "idempoten" bagi sebuah alat?
Ringkasan
Identifikasi efek samping. Gunakan kunci idempotensi. Bangun alat dua fase dan tindakan kompensasi. Audit semuanya. Gunakan simulasi selama pengembangan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Alat Idempoten dan Efek Samping” gratis?
Ya — teks lengkap “Alat Idempoten dan Efek Samping” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Alat Idempoten dan Efek Samping”?
Agen mungkin melakukan percobaan ulang—rancang alat agar pemanggilan dua kali tidak menggandakan tagihan atau pengiriman surel. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Alat Idempoten dan Efek Samping” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Alat Idempoten dan Efek Samping
- Percobaan Ulang dengan Jeda Eksponensial
- Batas Waktu dan Pemutus Sirkuit
- Memvalidasi Keluaran Alat (Pydantic)