Outils idempotents et effets de bord
Un agent peut effectuer une nouvelle tentative : concevez les outils pour que deux appels ne facturent pas deux fois et n’envoient pas deux e-mails.
Outils idempotents et effets de bord est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi l’idempotence est importante
Une boucle d’agent peut effectuer une nouvelle tentative. Si un outil envoie un courriel ou débite une carte bancaire, une nouvelle tentative duplique l’action. L’idempotence fait de « refaire X » une opération sans effet lorsque X a déjà eu lieu.
Qu’est-ce que l’idempotence ?
Une opération est idempotente si l’appeler N fois produit le même effet que de l’appeler une seule fois. Exemples :
- « Définir le statut de l’utilisateur sur actif » — idempotente (le redéfinir sur actif ne fait rien)
- « Incrémenter le compteur de 1 » — NOT idempotente (chaque appel ajoute 1 supplémentaire)
Clés d’idempotence
Pour les opérations non idempotentes (paiements, courriels), utilisez des clés d’idempotence :
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
)Générer les clés à partir de l’intention
Utilisez une empreinte de (tool_name, arguments, run_id) afin que les nouvelles tentatives identiques réutilisent la même clé :
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'))
Inventaire des effets de bord
Répertoriez les outils qui ont des effets de bord :
- SEND courriel / SMS
- CHARGE / remboursement
- CREATE / DELETE lignes de base de données
- POST vers des API externes qui modifient l’état
Les outils en lecture seule sont intrinsèquement idempotents. Concentrez-vous sur les écritures.
Encapsuler les outils à effets de bord
Ajoutez une couche d’idempotence dans l’implémentation de l’outil :
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'}Confirmer avant d’agir
Pour les actions à forts enjeux, ajoutez une étape de confirmation :
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))
Outils en deux phases
Divisez les outils en phases « brouillon » et « validation » :
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))Actions compensatoires
Si vous ne pouvez pas éviter un effet de bord, définissez un outil d’« annulation » :
def refund_payment(payment_id):
return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.Journaux d’audit
Chaque outil à effets de bord MUST journaliser : qui l’a déclenché, quels arguments ont été utilisés, à quel moment et quel a été le résultat. Utilisez des journaux structurés que vous pourrez interroger ultérieurement.
Budget d’effets de bord par exécution
Limitez les effets de bord par exécution, comme filet de sécurité :
if state.side_effect_count >= 5:
return {'error': 'Side-effect budget exhausted for this run.'}Mode simulation
Utile pendant le développement : les outils journalisent ce qu’ils WOULD faire, mais ne l’effectuent pas réellement :
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)
Définition
Que signifie « idempotent » pour un outil ?
Récapitulatif
Identifiez les effets de bord. Utilisez des clés d’idempotence. Concevez des outils en deux phases et des actions compensatoires. Auditez tout. Utilisez le mode simulation en développement.
Questions Fréquemment Posées
La leçon « Outils idempotents et effets de bord » est-elle gratuite ?
Oui — le texte complet de « Outils idempotents et effets de bord » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Outils idempotents et effets de bord » ?
Un agent peut effectuer une nouvelle tentative : concevez les outils pour que deux appels ne facturent pas deux fois et n’envoient pas deux e-mails. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Outils idempotents et effets de bord » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Outils idempotents et effets de bord
- Nouvelles tentatives avec temporisation exponentielle
- Délais d’expiration et disjoncteurs
- Valider les sorties des outils (Pydantic)