Herramientas idempotentes y efectos secundarios
Un agente puede reintentar una operación; diseñe las herramientas para que llamarlas dos veces no duplique un cargo ni un correo electrónico.
Herramientas idempotentes y efectos secundarios es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
Por qué es importante la idempotencia
Un bucle de agente puede reintentar una operación. Si una herramienta envía un correo electrónico o realiza un cargo en una tarjeta de crédito, reintentarla duplica la acción. La idempotencia hace que "volver a hacer X" no produzca ningún efecto cuando X ya ha ocurrido.
¿Qué es la idempotencia?
Una operación es idempotente si llamarla N veces produce el mismo efecto que llamarla una sola vez. Ejemplos:
- "Establecer el estado del usuario como activo" — es idempotente (volver a establecerlo como activo no hace nada)
- "Incrementar el contador en 1" — NO es idempotente (cada llamada suma 1 adicional)
Claves de idempotencia
Para las operaciones no idempotentes (pagos, correos electrónicos), use claves de idempotencia:
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
)Genere claves a partir de la intención
Use un hash de (tool_name, arguments, run_id) para que los reintentos idénticos reutilicen la misma clave:
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 de efectos secundarios
Enumere qué herramientas tienen efectos secundarios:
- SEND correo electrónico / SMS
- CHARGE / reembolso
- CREATE / DELETE filas de la base de datos
- POST a API externas que modifican el estado
Las herramientas de solo lectura son inherentemente idempotentes. Céntrese en las escrituras.
Envuelva las herramientas con efectos secundarios
Añada una capa de idempotencia en la implementación de la herramienta:
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'}Confirme antes de actuar
Para acciones de alto riesgo, añada un paso de confirmación:
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))
Herramientas en dos fases
Divida las herramientas en fases de "borrador" y "confirmación":
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))Acciones compensatorias
Si no puede evitar un efecto secundario, defina una herramienta de "undo":
def refund_payment(payment_id):
return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.Registros de auditoría
Toda herramienta con efectos secundarios DEBE registrar: quién la activó, qué argumentos recibió, cuándo se ejecutó y cuál fue el resultado. Use registros estructurados que pueda consultar más adelante.
Presupuesto de efectos secundarios por ejecución
Limite los efectos secundarios por ejecución como medida de seguridad:
if state.side_effect_count >= 5:
return {'error': 'Side-effect budget exhausted for this run.'}Modo de simulación
Es útil durante el desarrollo: las herramientas registran lo que HARÍAN, pero no lo ejecutan 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)
Definición
¿Qué significa "idempotente" para una herramienta?
Repaso
Identifique los efectos secundarios. Use claves de idempotencia. Cree herramientas en dos fases y acciones compensatorias. Audítelo todo. Use el modo de simulación durante el desarrollo.
Aprende AI Agents con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 60
- Lecciones
- 239
Preguntas frecuentes
¿La lección «Herramientas idempotentes y efectos secundarios» es gratis?
Sí — el texto completo de «Herramientas idempotentes y efectos secundarios» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Herramientas idempotentes y efectos secundarios»?
Un agente puede reintentar una operación; diseñe las herramientas para que llamarlas dos veces no duplique un cargo ni un correo electrónico. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Herramientas idempotentes y efectos secundarios»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Herramientas idempotentes y efectos secundarios
- Reintentos con retroceso exponencial
- Tiempo de espera y disyuntores
- Validar salidas de herramientas (Pydantic)