Registrando chamadas de ferramentas e entradas/saídas
Saiba o que capturar em cada etapa: nome da ferramenta, argumentos de entrada, saída, latência, erro e identificador do trecho pai.
Registrando chamadas de ferramentas e entradas/saídas é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 2 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.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
O que registrar por etapa
Para cada span, capture:
- Nome da etapa (llm_call, tool_call, retrieve)
- Entradas (mensagens, argumentos da ferramenta e consulta)
- Saídas (resposta e resultado da ferramenta)
- Metadados (modelo, latência, contagens de tokens e custo)
- Informações do erro, se houver falha
Auxiliar de span feito manualmente
Sem uma estrutura, um auxiliar mínimo:
from contextlib import contextmanager
import time, uuid
@contextmanager
def span(name, trace_id, parent_id=None):
span_id = str(uuid.uuid4())
start = time.time()
record = {'trace_id': trace_id, 'span_id': span_id, 'parent_id': parent_id, 'name': name, 'start': start}
try:
yield record
except Exception as e:
record['error'] = str(e)
raise
finally:
record['duration_ms'] = (time.time() - start) * 1000
save_span(record)Using It
trace_id = str(uuid.uuid4())
with span('llm_call_planner', trace_id) as s:
s['model'] = 'gpt-4o-mini'
s['messages_in'] = messages
response = client.chat.completions.create(model='gpt-4o-mini', messages=messages)
s['response'] = response.choices[0].message.content
s['tokens_in'] = response.usage.prompt_tokens
s['tokens_out'] = response.usage.completion_tokensAninhamento de span
Transmita parent_id para baixo para que os spans formem uma árvore:
with span('agent_step', trace_id) as parent:
with span('llm_call', trace_id, parent_id=parent['span_id']):
...
with span('tool_call:search', trace_id, parent_id=parent['span_id']):
...Registro de chamadas de ferramentas
Especificamente para chamadas de ferramentas, registre:
- Nome da ferramenta
- Argumentos (JSON)
- Resultado (JSON, possivelmente truncado)
- Latência
- Erro, se houver
Trunque cargas muito grandes
Alguns resultados de ferramentas são enormes (HTML de 200 KB). Trunque-os antes de armazenar:
def safe_payload(obj, max_chars=8000):
s = json.dumps(obj)
return s if len(s) <= max_chars else s[:max_chars] + '...[truncated]'Mascaramento de PII
Remova informações pessoais antes de armazenar:
import re
EMAIL_RE = re.compile(r'[\w\.-]+@[\w\.-]+')
def redact(text):
return EMAIL_RE.sub('[email]', text)
print(redact("Contact me at alice@example.com for details."))
Saída de registros estruturados
Emita um registro JSON por span — encaminhe para ELK, Loki, Datadog ou BigQuery:
import json
import sys
def save_span(record):
print(json.dumps(record), file=sys.stderr, flush=True)
demo_record = {'span': 'call_llm', 'duration_ms': 120, 'ok': True}
save_span(demo_record)
print("Logged span:", json.dumps(demo_record))
Correlacione com sessões de usuários
Inclua um session_id e um user_id em cada span para poder filtrar os rastros por usuário posteriormente.
Amostragem
Para agentes de alto volume, faça amostragem:
import random
def should_trace(user_id):
return random.random() < 0.10 # 10% of traces
# Always trace errors and slow runs.
random.seed(42)
sampled = sum(should_trace(i) for i in range(1000))
print(f"Traced {sampled} out of 1000 calls (~10% target)")
Reproduza a partir dos rastros
Salve as entradas completas (mensagens, ferramentas e argumentos) para poder executar novamente um trace com uma nova instrução e testar melhorias. Essa é a base do desenvolvimento orientado por avaliações.
Truncar cargas grandes?
Por que truncar saídas grandes de ferramentas nos registros?
Recapitulação
Cada etapa, cada entrada, cada saída — estruturadas, aninhadas e amostradas. Esse é o material bruto para todo o restante da observabilidade.
Perguntas Frequentes
A aula “Registrando chamadas de ferramentas e entradas/saídas” é grátis?
Sim — o texto completo de “Registrando chamadas de ferramentas e entradas/saídas” é 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 “Registrando chamadas de ferramentas e entradas/saídas”?
Saiba o que capturar em cada etapa: nome da ferramenta, argumentos de entrada, saída, latência, erro e identificador do trecho pai. 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 2 de 4.
Quanto tempo leva a aula “Registrando chamadas de ferramentas e entradas/saídas”?
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
- Por que o rastreamento é necessário para agentes
- Registrando chamadas de ferramentas e entradas/saídas
- Latência e custo por etapa
- Visualizando execuções de agentes (Langfuse, LangSmith)