Ferramentas idempotentes e efeitos colaterais
Um agente pode tentar novamente — projete as ferramentas para que chamá-las duas vezes não gere uma cobrança ou um e-mail duplicado.
Ferramentas idempotentes e efeitos colaterais é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.
Por que a idempotência é importante
Um loop de agente pode fazer novas tentativas. Se uma ferramenta envia um e-mail ou cobra um cartão de crédito, repetir a operação duplica a ação. A idempotência faz com que "fazer X novamente" não tenha efeito quando X já aconteceu.
O que é idempotência?
Uma operação é idempotente se chamá-la N vezes produzir o mesmo efeito que chamá-la uma única vez. Exemplos:
- "Definir o status do usuário como ativo" — idempotente (defini-lo novamente como ativo não faz nada)
- "Incrementar o contador em 1" — NOT idempotente (cada chamada adiciona mais 1)
Chaves de idempotência
Para operações não idempotentes (pagamentos, e-mails), use chaves de idempotência:
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
)Gerar chaves a partir da intenção
Use um hash de (nome_da_ferramenta, argumentos, id_da_execução) para que novas tentativas idênticas reutilizem a mesma chave:
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'))
Inventário de efeitos colaterais
Liste quais ferramentas têm efeitos colaterais:
- SEND e-mail / SMS
- CHARGE / reembolso
- CREATE / DELETE registros do banco de dados
- POST para APIs externas que alteram o estado
Ferramentas somente de leitura são inerentemente idempotentes. Concentre-se nas gravações.
Envolver ferramentas com efeitos colaterais
Adicione uma camada de idempotência à implementação da ferramenta:
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'}Confirmar antes de agir
Para ações de alto risco, adicione uma etapa de confirmação:
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))
Ferramentas em duas fases
Divida as ferramentas em fases de "rascunho" e "confirmação":
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))Ações compensatórias
Se não for possível evitar um efeito colateral, defina uma ferramenta de "desfazer":
def refund_payment(payment_id):
return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.Registros de auditoria
Toda ferramenta com efeitos colaterais MUST registrar: quem a acionou, quais argumentos foram usados, quando e qual foi o resultado. Use registros estruturados que possam ser consultados posteriormente.
Orçamento de efeitos colaterais por execução
Limite os efeitos colaterais por execução como uma rede de segurança:
if state.side_effect_count >= 5:
return {'error': 'Side-effect budget exhausted for this run.'}Modo de simulação
Útil durante o desenvolvimento: as ferramentas registram o que WOULD fazer, mas não fazem isso de fato:
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)
Definição
O que significa "idempotente" para uma ferramenta?
Recapitulação
Identifique os efeitos colaterais. Use chaves de idempotência. Crie ferramentas em duas fases e ações compensatórias. Audite tudo. Use a simulação durante o desenvolvimento.
Perguntas Frequentes
A aula “Ferramentas idempotentes e efeitos colaterais” é grátis?
Sim — o texto completo de “Ferramentas idempotentes e efeitos colaterais” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.
O que vou aprender em “Ferramentas idempotentes e efeitos colaterais”?
Um agente pode tentar novamente — projete as ferramentas para que chamá-las duas vezes não gere uma cobrança ou um e-mail duplicado. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar AI Agents?
Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Ferramentas idempotentes e efeitos colaterais”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de AI Agents?
Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Ferramentas idempotentes e efeitos colaterais
- Novas tentativas com recuo exponencial
- Limites de tempo e disjuntores
- Validando saídas de ferramentas (Pydantic)