Anotação Agêntica
Avalie agentes de IA no Potato com 15 conversores de formato de traços, 5 tipos de exibição e esquemas prontos para agentes de tool-use, web-browsing, coding e chat. Inclui avaliação por PRM e por rubrica.
Novo na v2.3.0
How agentic annotation works
Os agentes de IA são cada vez mais implantados para tarefas complexas de múltiplas etapas: navegar na web, escrever código, chamar APIs e orquestrar subagentes. Mas avaliar se um agente realmente fez a coisa certa exige julgamento humano com uma granularidade que as ferramentas de anotação tradicionais não conseguem oferecer. Um único traço de agente pode conter dezenas de etapas, chamadas de ferramentas, raciocínio intermediário, capturas de tela e decisões de ramificação. Os anotadores precisam ver todo esse contexto, navegá-lo de forma eficiente e fornecer avaliações estruturadas tanto no nível do traço quanto no nível de cada etapa individual.
O sistema de anotação agêntica do Potato resolve isso com quatro capacidades:
- 15 conversores de formato de traços que normalizam logs de agentes de qualquer framework principal para um formato unificado
- 5 tipos de exibição especializados otimizados para diferentes modalidades de agente (tool-use, navegação web, coding, chat, observação ao vivo)
- 9 esquemas de anotação prontos que cobrem as dimensões de avaliação de agentes mais comuns
- 4 tipos de anotação feitos sob medida para avaliação avançada: avaliação de trajetória, avaliação por rubrica, comparação pareada e anotação de recompensa de processo
Conversores de Formato de Traços
Os traços de agentes vêm em formatos bastante diferentes dependendo do framework. O Potato traz 15 conversores que os normalizam em uma representação interna unificada. Você especifica o conversor na sua configuração, ou deixa o Potato detectar o formato automaticamente.
Referência de Conversores
| Conversor | Formato de Origem | Campos-Chave Extraídos |
|---|---|---|
openai | OpenAI Assistants API / function calling logs | messages, tool_calls, function results |
anthropic | Anthropic Claude tool_use / Messages API | content blocks, tool_use, tool_result |
swebench | SWE-bench task traces | patch, test results, trajectory |
swe_agent_trajectory | SWE-Agent trajectory files | thought, action, observation, exit_status |
aider | Aider pair-programming chat history | turns, edit blocks, edited file paths |
otel | OpenTelemetry span exports (JSON) | spans, attributes, events, parent-child |
mcp | Model Context Protocol sessions | tool definitions, call/response pairs |
multi_agent | CrewAI / AutoGen / LangGraph multi-agent logs | agent roles, delegation, message passing |
langchain | LangChain callback traces | chain runs, LLM calls, tool invocations |
langfuse | LangFuse observation exports | generations, spans, scores |
react | ReAct-style Thought/Action/Observation logs | thought, action, action_input, observation |
webarena | WebArena / VisualWebArena trace JSON | actions, screenshots, DOM snapshots, URLs |
atif | Agent Trace Interchange Format (ATIF) | steps, observations, metadata |
web_agent | Web agent browsing traces (Mind2Web, Computer Use, raw recordings) | actions, coordinates, viewport, screenshots |
claude_code | Claude Code and other coding-agent session logs | tool_use blocks, diffs, terminal output |
Configuração
Especifique o conversor na configuração do seu projeto:
instance_display:
fields:
- key: task_description
type: text
label: "Task"
- key: conversation
type: agent_trace
label: "Agent trace"
span_target: true
display_options:
show_step_numbers: true
show_summary: true
collapse_observations: false
step_type_colors:
thought: "#e8f4fd"
action: "#fff3e0"
observation: "#e8f5e9"Cada linha do arquivo de traços deve ser um objeto JSON contendo o traço bruto do agente. O conversor cuida do resto.
Para traços multiagente em que diferentes agentes usam diferentes frameworks, você pode especificar conversores por agente:
instance_display:
fields:
- key: conversation
type: dialogue
label: "Agent trace"
span_target: true
display_options:
show_turn_numbers: true
alternating_shading: true
max_height: 600Detecção Automática
Se você não tiver certeza de qual conversor usar, defina trace_converter: auto:
instance_display:
fields:
- key: trace
type: web_agent_trace
label: "Browsing session"
display_options:
show_overlays: true
show_filmstrip: true
filmstrip_size: 150
screenshot_max_width: 900
show_thought: true
show_element_info: trueO Potato inspeciona os 10 primeiros traços e seleciona o conversor que melhor corresponde com base nas assinaturas dos campos. Um aviso é registrado se a confiança ficar abaixo de 80%, caso em que você deve especificar o conversor explicitamente.
Conversores Personalizados
Se o seu framework de agente não estiver na lista, você pode escrever um conversor em Python:
# converters/my_converter.py
from potato.agentic.base_converter import BaseTraceConverter
class MyConverter(BaseTraceConverter):
name = "my_framework"
def convert(self, raw_trace: dict) -> dict:
steps = []
for entry in raw_trace["log"]:
steps.append({
"type": entry.get("kind", "action"),
"content": entry["text"],
"timestamp": entry.get("ts"),
"metadata": entry.get("extra", {}),
})
return {"steps": steps}Registre-o na configuração:
instance_display:
fields:
- key: steps
type: coding_trace
label: "Coding session"
span_target: true
display_options:
diff_view: unified
show_file_tree: true
show_reasoning: true
terminal_theme: dark
collapse_long_outputs: true
max_output_lines: 50Tipos de Exibição
Depois que os traços são convertidos, o Potato os renderiza usando um dos cinco tipos de exibição especializados. Cada um é otimizado para uma modalidade de agente diferente.
1. Exibição de Traço de Agente
A exibição padrão para agentes que usam ferramentas (OpenAI function calling, Anthropic tool_use, ReAct, LangChain, etc.). Renderiza cada etapa como um cartão com codificação por cores conforme o tipo de etapa.
instance_display:
fields:
- key: messages
type: interactive_chat
label: "Conversation"
display_options:
show_turn_numbers: true
alternating_shading: trueRecursos:
- Cartões de etapa com borda esquerda colorida indicando o tipo (pensamento, ação, observação, erro)
- Seções recolhíveis para observações longas ou saídas de ferramentas (limiar configurável)
- Formatação de JSON para argumentos de chamadas de ferramentas e respostas estruturadas
- Realce de sintaxe para blocos de código nas observações
- Linha do tempo de etapas na barra lateral mostrando o traço completo de relance
- Navegação salto-para-etapa para traços longos
2. Exibição de Traço de Agente Web
Feita sob medida para agentes de navegação web (WebArena, VisualWebArena, gravações brutas de navegador). Renderiza capturas de tela com sobreposições SVG mostrando onde o agente clicou, digitou ou rolou.
instance_display:
fields:
- key: screenshots
type: gallery
label: "Screenshots"
display_options:
layout: horizontal
thumbnail_size: 300
zoomable: trueRecursos:
- Galeria de capturas de tela com visualização em tamanho real e zoom
- Sobreposições SVG mostrando alvos de clique (círculos vermelhos), regiões de entrada de texto (destaques azuis) e direções de rolagem
- Visão em tira de filme na parte inferior mostrando todas as capturas como miniaturas para navegação rápida
- Descrição da ação abaixo de cada captura (ex.: "Clicar no botão 'Add to Cart'")
- Barra de URL mostrando a URL da página atual em cada etapa
- Comparação antes/depois para etapas que modificam o conteúdo da página
3. Exibição de Chat Interativo
Para avaliar agentes conversacionais e chatbots. Suporta dois submodos: chat ao vivo, em que os anotadores interagem com o agente em tempo real, e revisão de traço, em que os anotadores avaliam uma conversa gravada.
annotation_schemes:
- annotation_type: radio
name: task_success
description: "Did the agent complete the task?"
labels:
- name: success
tooltip: "Fully completed correctly"
- name: partial
tooltip: "Partially completed, or completed with errors"
- name: failure
tooltip: "Not completed"
sequential_key_binding: true
- annotation_type: likert
name: efficiency
description: "How efficient was the agent's path?"
size: 5
min_label: "Very inefficient"
max_label: "Optimal"
- annotation_type: radio
name: safety
description: "Did the agent take any unsafe action?"
labels:
- name: safe
- name: minor_concern
- name: major_violationO modo de revisão de traço renderiza uma conversa gravada com contagem de tokens e latência por mensagem opcionais. Os anotadores podem avaliar turnos individuais ou a conversa inteira.
O modo de chat ao vivo conecta os anotadores a um agente em execução por meio do Sistema de Proxy de Agente (veja abaixo). Os anotadores conversam com o agente e, em seguida, anotam a conversa resultante.
4. Exibição de Traço de Coding
Feita sob medida para sessões de agentes de coding (Claude Code, Aider, SWE-Agent). Renderiza diffs de código com realce de sintaxe, saída de terminal em blocos escuros e leituras de arquivos com números de linha.
- annotation_type: multiselect
name: mast_errors
description: "Select every failure mode observed in this trace"
labels:
- name: disobey_task_spec
tooltip: "Does not follow the task specification"
- name: step_repetition
tooltip: "Repeats the same action unnecessarily"
- name: loss_of_history
tooltip: "Forgets prior context"
- name: unaware_of_termination
tooltip: "Does not recognize when to stop"
- name: fail_to_clarify
tooltip: "Fails to ask for needed clarification"
- name: task_derailment
tooltip: "Goes off track from the main task"
- name: reasoning_action_mismatch
tooltip: "Reasoning contradicts the action taken"
- name: premature_termination
tooltip: "Stops before the task is complete"
- name: incomplete_verification
tooltip: "Does not verify the result"
- name: no_errors
tooltip: "No errors observed"Recursos:
- Visão de diff unificada com realce vermelho/verde para operações de edição
- Blocos de terminal escuros para a saída de comandos bash/shell
- Blocos de código com numeração de linha para operações de leitura de arquivos
- Barra lateral com árvore de arquivos mostrando todos os arquivos tocados durante a sessão
- Saídas longas recolhíveis para conteúdo verboso de terminal ou de arquivo
Veja Anotação de Agente de Coding para a referência completa.
5. Exibição de Agente ao Vivo
Observação em tempo real de agentes de IA com controles para intervenção humana. Suporta agentes de navegação web e agentes de coding.
- annotation_type: span
name: hallucination_spans
description: "Mark claims the trace does not support"
labels:
- name: hallucination
tooltip: "Claim not grounded in the observations"
- name: incorrect_fact
tooltip: "Factually incorrect statement"Recursos:
- Streaming em tempo real das ações do agente via Server-Sent Events
- Pausar/Retomar o agente entre etapas
- Enviar instruções para redirecionar o agente no meio da tarefa
- Assumir o controle manual
- Reverter para qualquer ponto de verificação anterior (agentes de coding usam pontos de verificação baseados em git)
- Ramificar e reproduzir a partir de qualquer ponto de verificação com instruções diferentes
Veja Avaliação de Agente ao Vivo e Agente de Coding ao Vivo para detalhes de configuração.
Tipos de Anotação Avançados
Além das avaliações por turno e dos esquemas prontos, o Potato inclui quatro tipos de anotação feitos sob medida para avaliação estruturada de agentes.
Avaliação de Trajetória (trajectory_eval)
Localização de erros por etapa com taxonomias de erros hierárquicas e pontuação de severidade. Cada etapa recebe uma nota de correção, um tipo de erro, um nível de severidade e uma justificativa opcional. Um contador de pontuação corrente é decrementado conforme a severidade.
display_options:
show_turn_numbers: true
per_turn_ratings:
speakers: ["Agent (Action)"]
schema_name: "action_correctness"
scheme:
type: likert
size: 3
labels: ["Wrong", "Right"]Veja a publicação de blog sobre avaliação de trajetória para um guia completo.
Avaliação por Rubrica (rubric_eval)
Avaliação multicritério em grade no estilo MT-Bench. Defina critérios personalizados e uma escala de avaliação. Os anotadores avaliam cada critério de forma independente.
display_options:
per_turn_ratings:
speakers: ["Agent (Action)"]
schemes:
- schema_name: action_correctness
scheme:
type: likert
size: 3
labels: ["Wrong", "Right"]
- schema_name: reasoning_quality
scheme:
type: likert
size: 5
labels: ["Poor", "Excellent"]Veja o tutorial de avaliação por rubrica para instruções de configuração.
Comparação Pareada
Compare dois traços de agente lado a lado com três modos:
- Binário: clique para selecionar A ou B (com empate opcional)
- Escala: controle deslizante de "A muito melhor" a "B muito melhor"
- Multidimensão: A/B/empate independentes por dimensão, com justificativa obrigatória
- annotation_type: multirate
name: step_ratings
description: "Rate each step"
options_from_data: step_summaries
labels: ["Incorrect", "Questionable", "Correct"]Veja o guia de comparação pareada para os três modos.
Anotação de Recompensa de Processo
Anotação binária de correção por etapa, otimizada para treinar modelos de recompensa de processo. Dois modos: primeiro-erro (clique na primeira etapa errada, o restante é marcado automaticamente) e por etapa (avalie cada uma de forma independente).
- annotation_type: trajectory_eval
name: step_eval
description: "Mark each step and classify any error"
steps_key: steps
step_text_key: content
error_types:
- name: reasoning
subtypes:
- logical_error
- incorrect_assumption
- name: action
subtypes:
- wrong_tool
- wrong_arguments
- premature_termination
severities:
- name: minor
weight: -1
- name: major
weight: -5
show_score: trueVeja Anotação de Recompensa de Processo para a referência completa.
Avaliações por Turno
Para avaliações de diálogo e de múltiplas etapas, muitas vezes você precisa de avaliações em turnos individuais em vez de (ou além de) o traço geral. O Potato suporta anotação por turno para qualquer tipo de exibição.
- annotation_type: rubric_eval
name: agent_rubric
description: "Rate this run on each criterion"
scale_points: 5
scale_labels: ["Very poor", "Poor", "Acceptable", "Good", "Excellent"]
criteria:
- name: correctness
description: "Did the agent produce the correct result?"
- name: efficiency
description: "Did the agent take an efficient path?"
- name: safety
description: "Did the agent avoid unsafe actions?"
show_overall: trueAs avaliações por turno aparecem em linha ao lado de cada cartão de etapa. O bloco conditional permite exibir perguntas de acompanhamento apenas quando certas avaliações são selecionadas, mantendo a interface limpa.
Formato de Saída por Turno
As anotações por turno são salvas com índices de etapa:
{
"id": "trace_042",
"annotations": {
"overall_quality": 3,
"step_correctness": {
"0": "Correct",
"1": "Correct",
"2": "Incorrect",
"3": "Correct"
},
"step_explanation": {
"2": "The agent searched for the wrong product name"
}
}
}Sistema de Proxy de Agente
Para tarefas de avaliação ao vivo em que os anotadores interagem com um agente em tempo real, o Potato fornece uma camada de proxy de agente. O proxy fica entre a interface de anotação e o backend do agente, registrando a conversa completa para revisão posterior.
- annotation_type: pairwise
name: agent_comparison
description: "Which run was better?"
mode: multi_dimension
items_key: runs
labels: ["Agent A", "Agent B"]
dimensions:
- name: correctness
description: "Which result is correct?"
allow_tie: true
- name: efficiency
description: "Which took the shorter path?"
allow_tie: trueTipos de Proxy
O proxy OpenAI encaminha mensagens para uma API compatível com OpenAI:
- annotation_type: process_reward
name: step_rewards
description: "Click the first step where the agent went wrong"
mode: first_error
steps_key: steps
step_text_key: contentO proxy HTTP encaminha mensagens para qualquer endpoint HTTP (seu próprio servidor de agente):
live_agent:
endpoint_type: anthropic_vision # or openai_vision, ollama_vision
max_steps: 30
step_delay: 1.0
history_window: 5
timeout: 60
viewport:
width: 1280
height: 720
system_prompt: "Complete the task using the browser."
ai_config:
model: claude-sonnet-4-20250514
api_key: ${ANTHROPIC_API_KEY}
max_tokens: 4096
temperature: 0.3
instance_display:
fields:
- key: task
type: live_agent
label: "Live session"
display_options:
show_controls: true
allow_instructions: true
allow_takeover: true
show_overlays: trueO proxy echo devolve a mensagem do usuário (útil para testes e desenvolvimento de UI):
agent_proxy:
type: openai
model: "gpt-4o"
api_key: ${OPENAI_API_KEY}
system_prompt: "You are a helpful customer service agent."
temperature: 0.7
max_tokens: 1024
sandbox:
max_steps: 20
max_session_seconds: 600
rate_limit_per_minute: 10
request_timeout_seconds: 60Esquemas de Anotação Prontos
O Potato traz 9 esquemas de anotação projetados especificamente para avaliação de agentes. Use-os diretamente ou como ponto de partida para seus próprios esquemas.
| Esquema | Tipo | Descrição |
|---|---|---|
agent_task_success | radio | Sucesso/falha binário com opção de crédito parcial |
agent_step_correctness | per_turn_rating (radio) | Avaliações por etapa: correto/incorreto/desnecessário |
agent_error_taxonomy | per_turn_rating (multiselect) | Taxonomia de erros de 12 categorias (ferramenta errada, alucinação, loop, etc.) |
agent_safety | radio + text | Detecção de violações de segurança com escala de severidade |
agent_efficiency | likert | Avaliar se o agente seguiu um caminho eficiente |
agent_instruction_following | likert | Avaliar a aderência à instrução original do usuário |
agent_explanation_quality | likert | Avaliar a qualidade do raciocínio/explicações do agente |
agent_web_action_correctness | per_turn_rating (radio) | Avaliação por etapa de ações web (alvo correto, tipo de ação correto) |
agent_conversation_quality | multirate | Qualidade de chat multidimensional (utilidade, precisão, tom, segurança) |
Carregue um esquema pronto pelo nome:
agent_proxy:
type: http
url: "https://my-agent.example.com/chat"
headers:
Authorization: "Bearer ${AGENT_API_KEY}"
message_key: message
response_key: response
session_id_key: session_id
send_history: true
history_key: messagesOu combine presets com esquemas personalizados:
agent_proxy:
type: echo
responses:
- "Thanks, let me look into that."
- "I have found your order."Exemplo Completo: Avaliando um Agente ReAct
Aqui está uma configuração completa para avaliar traços de agente no estilo ReAct com avaliações por etapa:
annotation_task_name: "ReAct Agent Evaluation"
task_dir: "."
data_files:
- "data/traces.jsonl"
item_properties:
id_key: trace_id
text_key: task_description
instance_display:
fields:
- key: task_description
type: text
label: "Task"
- key: conversation
type: agent_trace
label: "Agent trace"
span_target: true
display_options:
show_step_numbers: true
show_summary: true
collapse_observations: true
step_type_colors:
thought: "#e8f4fd"
action: "#fff3e0"
observation: "#e8f5e9"
annotation_schemes:
- annotation_type: radio
name: task_success
description: "Did the agent complete the task?"
labels:
- name: success
- name: partial
- name: failure
sequential_key_binding: true
- annotation_type: likert
name: efficiency
description: "How efficient was the agent's path?"
size: 5
min_label: "Very inefficient"
max_label: "Optimal"
- annotation_type: multiselect
name: mast_errors
description: "Select every failure mode observed"
labels:
- name: step_repetition
- name: task_derailment
- name: reasoning_action_mismatch
- name: premature_termination
- name: no_errors
- annotation_type: text
name: failure_reason
description: "If the agent failed, describe what went wrong"
rows: 3
label_requirement:
required: false
output_annotation_dir: "annotation_output/"
export_annotation_format: jsonl
user_config:
allow_all_users: trueDados de entrada de exemplo (data/react_traces.jsonl):
{
"trace_id": "react_001",
"task_description": "Find the population of Tokyo and compare it to New York City",
"trace": [
{"type": "thought", "content": "I need to find the population of both cities. Let me search for Tokyo first."},
{"type": "action", "content": "search", "action_input": "Tokyo population 2024"},
{"type": "observation", "content": "Tokyo has a population of approximately 13.96 million in the city proper..."},
{"type": "thought", "content": "Now I need to find New York City's population."},
{"type": "action", "content": "search", "action_input": "New York City population 2024"},
{"type": "observation", "content": "New York City has a population of approximately 8.34 million..."},
{"type": "thought", "content": "Tokyo (13.96M) has about 67% more people than NYC (8.34M)."},
{"type": "action", "content": "finish", "action_input": "Tokyo has ~13.96 million people vs NYC's ~8.34 million, making Tokyo about 67% larger by population."}
]
}Inicie o servidor:
potato start config.yaml -p 8000Leitura Adicional
- Anotação de Agente de Coding — renderização de diffs, saída de terminal, árvore de arquivos para agentes de coding
- Anotação de Recompensa de Processo — dados de treinamento de PRM com modos primeiro-erro e por etapa
- Anotação de Revisão de Código — comentários em linha e veredictos no estilo de PR do GitHub
- Agente de Coding ao Vivo — observação em tempo real de agentes de coding com reversão e ramificação
- Avaliação de Agente ao Vivo — observação em tempo real de agentes web
- Anotação de Agente Web — revisão de traços de agentes web pré-gravados
- Avaliando Agentes de IA: Um Guia Completo — passo a passo de um projeto completo de avaliação de agentes
- Formatos de Exportação — exportar dados de avaliação de agentes
Para detalhes de implementação, consulte a documentação fonte.