Strumenti idempotenti ed effetti collaterali
Un agente può riprovare: progetti gli strumenti in modo che chiamarli due volte non comporti un doppio addebito o una doppia e-mail.
Strumenti idempotenti ed effetti collaterali è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.
Perché l'idempotenza è importante
Un ciclo dell'agente può riprovare. Se uno strumento invia un'e-mail o addebita una carta di credito, riprovare duplica l'azione. L'idempotenza fa sì che "eseguire di nuovo X" non abbia effetto quando X è già stato eseguito.
Che cos'è l'idempotenza?
Un'operazione è idempotente se chiamarla N volte produce lo stesso effetto di chiamarla una sola volta. Esempi:
- "Imposta lo stato dell'utente su attivo" — idempotente (reimpostarlo su attivo non produce alcun effetto)
- "Incrementa il contatore di 1" — NON idempotente (ogni chiamata aggiunge un ulteriore 1)
Chiavi di idempotenza
Per le operazioni non idempotenti (pagamenti, e-mail), utilizzi chiavi di idempotenza:
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
)Generare chiavi dall'intento
Utilizzi un hash di (tool_name, arguments, run_id) in modo che i tentativi identici riutilizzino la stessa chiave:
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'))
Inventario degli effetti collaterali
Elencare gli strumenti che producono effetti collaterali:
- SEND e-mail / SMS
- CHARGE / refund
- CREATE / DELETE righe del database
- POST verso API esterne che modificano lo stato
Gli strumenti di sola lettura sono intrinsecamente idempotenti. Si concentri sulle operazioni di scrittura.
Avvolgere gli strumenti con effetti collaterali
Aggiunga un livello di idempotenza nell'implementazione dello strumento:
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'}Confermare prima di agire
Per le azioni ad alto impatto, aggiunga un passaggio di conferma:
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))
Strumenti in due fasi
Divida gli strumenti in fasi di "bozza" e "conferma":
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))Azioni compensative
Se non può evitare un effetto collaterale, definisca uno strumento di "annullamento":
def refund_payment(payment_id):
return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.Log di audit
Ogni strumento con effetti collaterali DEVE registrare: chi lo ha attivato, quali argomenti ha ricevuto, quando è stato eseguito e il risultato. Utilizzi log strutturati che possa interrogare in seguito.
Budget degli effetti collaterali per esecuzione
Limiti gli effetti collaterali per ogni esecuzione come misura di sicurezza:
if state.side_effect_count >= 5:
return {'error': 'Side-effect budget exhausted for this run.'}Modalità dry-run
Utile durante lo sviluppo: gli strumenti registrano ciò che FAREBBERO, ma non lo eseguono realmente:
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)
Definizione
Che cosa significa "idempotente" per uno strumento?
Riepilogo
Identifichi gli effetti collaterali. Utilizzi chiavi di idempotenza. Costruisca strumenti in due fasi e azioni compensative. Sottoponga tutto ad audit. Utilizzi il dry-run durante lo sviluppo.
Domande Frequenti
La lezione «Strumenti idempotenti ed effetti collaterali» è gratuita?
Sì — il testo completo di «Strumenti idempotenti ed effetti collaterali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.
Cosa imparerò in «Strumenti idempotenti ed effetti collaterali»?
Un agente può riprovare: progetti gli strumenti in modo che chiamarli due volte non comporti un doppio addebito o una doppia e-mail. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Agents?
Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Strumenti idempotenti ed effetti collaterali»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Agents?
Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Strumenti idempotenti ed effetti collaterali
- Retry con exponential backoff
- Timeout e circuit breaker
- Convalidare gli output degli strumenti (Pydantic)