0Pricing
AI Agents · Lezione

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

  1. Strumenti idempotenti ed effetti collaterali
  2. Retry con exponential backoff
  3. Timeout e circuit breaker
  4. Convalidare gli output degli strumenti (Pydantic)
← Torna a AI Agents