Presentamos la anotación de agentes de coding: evalúa trazas de Claude Code, Aider y SWE-Agent
Potato ya admite la anotación de agentes de coding con renderizado de diffs, salida de terminal y esquemas de recompensa de proceso. Importa trazas de Claude Code, Aider y SWE-Agent.
Por qué importa anotar agentes de coding
Los agentes de coding como Claude Code, Aider y SWE-Agent han mejorado rápido, y ahora hace falta poder calificar su trabajo. Una sola ejecución es una trayectoria desordenada: ediciones de código, comandos de terminal, lecturas de archivos y pasos de razonamiento encadenados. Para entrenar un agente mejor necesitas realimentación humana sobre esas ejecuciones, y las herramientas de anotación con las que contaba la mayoría de equipos nunca se pensaron para este tipo de datos.
Una interfaz de anotación de texto plano no puede renderizar un diff unificado, dar formato a la salida de terminal ni manejar la estructura anidada de la traza de un agente. Así que los laboratorios acaban escribiendo sus propias interfaces de evaluación, repitiendo el mismo trabajo y quedándose con conjuntos de datos que no se entienden entre sí.
Potato ahora gestiona la anotación de agentes de coding directamente, con componentes de renderizado pensados para trazas, esquemas de anotación para este tipo de evaluación y exportaciones que alimentan el entrenamiento sin pasos intermedios. Para la referencia completa de la funcionalidad, consulta la documentación de anotación de agentes de coding y la guía general de evaluación de agentes.
CodingTraceDisplay: un visor de trazas
Casi toda la experiencia de anotación pasa por el componente CodingTraceDisplay, que renderiza cada paso de la trayectoria del agente con la visualización que corresponde a ese tipo de paso.
Así se ve la interfaz de anotación de agentes de coding en Potato:
El CodingTraceDisplay renderiza diffs de código, salida de terminal y lecturas de archivos con el formato adecuado
Vista de diff unificado
Las ediciones de código se renderizan como diffs unificados con resaltado en rojo y verde para las líneas eliminadas y añadidas. La vista de diff incluye números de línea, cabeceras con la ruta del archivo y líneas de contexto alrededor de los cambios. Reproduce la experiencia conocida de los pull requests de GitHub, que casi todos los desarrolladores ya manejan.
# The diff rendering is automatic when your trace data includes tool_use
# steps with file edit operations. No special config is needed.
coding_agent:
display:
diff_style: "unified" # "unified" or "split" side-by-side
context_lines: 3 # Lines of context around changes
syntax_highlighting: true # Language-aware highlighting
collapse_large_diffs: true # Auto-collapse diffs > 100 lines
large_diff_threshold: 100Bloques oscuros de terminal
Los comandos de bash y su salida se renderizan en bloques oscuros de terminal con tipografía monoespaciada, soporte de colores ANSI y salida desplazable para resultados largos. Los bloques de terminal muestran el comando ejecutado, el directorio de trabajo y el código de salida.
coding_agent:
display:
terminal_theme: "dark" # "dark" or "light"
max_terminal_height: 400 # pixels, scrollable beyond this
show_exit_codes: true
show_working_directory: true
ansi_colors: true # Render ANSI escape sequencesBloques de código con números de línea
Las lecturas de archivos se muestran como bloques de código con resaltado de sintaxis y números de línea. Cuando el agente lee un rango concreto de líneas, solo se muestran esas líneas conservando su numeración original, lo que facilita cotejarlas con el archivo real.
Barra lateral con árbol de archivos
Una barra lateral plegable muestra todos los archivos tocados durante la trayectoria, organizados en árbol. Cada archivo lleva un icono que indica si se creó, modificó, leyó o borró. Al hacer clic en un archivo del árbol, la vista se desplaza a su primera aparición en la traza.
coding_agent:
display:
file_tree:
enabled: true
position: "left" # "left" or "right"
show_change_icons: true # Icons for created/modified/deleted
group_by: "directory" # "directory" or "chronological"Salidas plegables
Las salidas largas de cualquier tipo de paso pueden plegarse para que la traza siga siendo legible. Los anotadores pueden desplegar pasos concretos cuando lo necesiten o usar los controles «Expand All» / «Collapse All». Los bloques de razonamiento del agente vienen plegados por defecto, pero quedan disponibles para revisarlos.
coding_agent:
display:
collapsible:
auto_collapse_thinking: true
auto_collapse_long_output: true
long_output_threshold: 50 # lines
default_expanded_types: # These step types start expanded
- "file_edit"
- "bash_command"Esquema de modelo de recompensa de proceso (PRM)
Los modelos de recompensa de proceso asignan crédito a nivel de paso en lugar de evaluar solo el resultado final. Potato admite dos modos de anotación PRM pensados para distintos equilibrios entre velocidad y precisión.
Modo de primer error
En el modo de primer error, el anotador recorre la trayectoria y hace clic en el primer paso en el que el agente se equivoca. Todos los pasos anteriores al clic se marcan automáticamente como correctos, y todos los posteriores (incluido el paso señalado) se marcan como incorrectos. Esto acelera mucho la anotación, porque el anotador solo tiene que identificar un punto.
annotation_schemes:
- annotation_type: process_reward
name: prm_first_error
mode: "first_error"
description: "Click the first step where the agent makes an error"Modo por paso
En el modo por paso, cada paso recibe una valoración independiente. Produce datos de entrenamiento más detallados, pero lleva más tiempo por traza. Los anotadores califican cada paso como correcto, incorrecto o parcialmente correcto.
annotation_schemes:
- annotation_type: process_reward
name: prm_per_step
mode: "per_step"Esquema de revisión de código
La interfaz de revisión de código ofrece controles de anotación al estilo de los PR de GitHub:
Los anotadores pueden hacer clic en las líneas del diff para añadir comentarios en línea, valorar archivos y emitir un veredicto de aprobación o rechazo
El esquema de revisión de código lleva la anotación al estilo de los PR de GitHub a las trazas de agente. Los anotadores pueden dejar comentarios en línea sobre líneas concretas de los diffs, valorar archivos individuales y dar un veredicto global.
annotation_schemes:
- annotation_type: code_review
name: agent_review
comment_categories:
enabled: true
categories: # Optional categorization for comments
- "Bug"
- "Style"
- "Logic Error"
- "Unnecessary Change"
- "Missing Error Handling"
file_rating_dimensions:
enabled: true
scale: [1, 2, 3, 4, 5]
labels: ["Poor", "Below Average", "Acceptable", "Good", "Excellent"]
verdict_options:
enabled: true
options:
- value: "approve"
text: "Approve"
description: "Changes are correct and complete"
- value: "request_changes"
text: "Request Changes"
description: "Changes need fixes before merging"
- value: "comment"
text: "Comment"
description: "General feedback, no strong opinion"Conversores de trazas: importa desde cualquier agente
Potato incluye conversores para los tres formatos de agente de coding más extendidos. Los conversores normalizan cada formato a la representación interna de trazas estructuradas de Potato.
Claude Code (API de mensajes de Anthropic)
Las trazas de Claude Code usan el formato de la API de mensajes de Anthropic, con bloques de contenido tool_use y tool_result. El conversor extrae de las llamadas a herramientas las ediciones de archivos, los comandos de bash y las lecturas de archivos, y conserva el texto de razonamiento del asistente.
# Convert Claude Code traces to Potato format
potato convert-traces \
--format claude_code \
--input ./claude_traces/ \
--output ./potato_data/traces.jsonlAider (chat en Markdown con bloques de edición)
Aider produce registros de chat en Markdown con bloques de edición SEARCH/REPLACE. El conversor analiza esos bloques para reconstruir las ediciones de archivos y extrae los comandos de shell de los bloques de código delimitados.
# Convert Aider chat logs
potato convert-traces \
--format aider \
--input ./aider_logs/ \
--output ./potato_data/traces.jsonlSWE-Agent (pensamiento/acción/observación)
SWE-Agent usa un formato de bucle pensamiento/acción/observación. El conversor asigna las acciones a los tipos de paso correspondientes (edición, bash, lectura) y conserva el razonamiento en cadena del agente como bloques de pensamiento plegables.
# Convert SWE-Agent trajectories
potato convert-traces \
--format swe_agent \
--input ./swe_agent_trajectories/ \
--output ./potato_data/traces.jsonlDetección automática
Si tienes trazas de varios agentes, Potato puede detectar el formato automáticamente a partir de la estructura de cada archivo:
# Auto-detect format for mixed trace directories
potato convert-traces \
--format auto \
--input ./mixed_traces/ \
--output ./potato_data/traces.jsonlExportaciones para el pipeline de entrenamiento
Las trazas anotadas pueden exportarse en formatos listos para entrenar modelos.
Formato PRM
Etiquetas de recompensa a nivel de paso para entrenar modelos de recompensa de proceso:
# Exported PRM format (one line per trace)
{
"trace_id": "trace_001",
"steps": [
{"step_idx": 0, "content": "Read file src/main.py", "label": "correct"},
{"step_idx": 1, "content": "Edit src/main.py: fix import", "label": "correct"},
{"step_idx": 2, "content": "Run tests", "label": "correct"},
{"step_idx": 3, "content": "Edit src/utils.py: wrong fix", "label": "incorrect"},
{"step_idx": 4, "content": "Run tests again", "label": "incorrect"}
],
"first_error_step": 3
}Pares de preferencia para DPO/RLHF
Combinado con anotaciones de comparación por pares, Potato genera pares de preferencia aptos para entrenamiento con Direct Preference Optimization o RLHF:
# Exported preference pair format
{
"prompt": "Fix the failing test in src/test_utils.py",
"chosen": {"trace_id": "trace_001", "steps": [...]},
"rejected": {"trace_id": "trace_002", "steps": [...]},
"preference_strength": 0.85
}Resultados compatibles con SWE-bench
Exporta las anotaciones en un formato compatible con el harness de evaluación de SWE-bench para compararlas directamente con los resultados publicados:
# Export to SWE-bench format
potato export \
--format swe_bench \
--project ./my_project/ \
--output ./swe_bench_results.jsonInicio rápido
Pasar de cero a un servidor de anotación en marcha lleva unos cinco minutos.
Instalación
pip install potato-annotation[coding-agents]Convierte tus trazas
# Convert traces from your coding agent
potato convert-traces \
--format auto \
--input ./my_agent_traces/ \
--output ./data/traces.jsonlCrea la configuración
Esta es una configuración completa para un proyecto de evaluación de agentes de coding que usa a la vez los esquemas de PRM y de revisión de código:
# config.yaml
project_name: "Coding Agent Evaluation"
port: 8000
data:
source: "local"
input_path: "./data/traces.jsonl"
data_format: "coding_trace"
coding_agent:
display:
diff_style: "unified"
context_lines: 3
syntax_highlighting: true
collapse_large_diffs: true
terminal_theme: "dark"
max_terminal_height: 400
show_exit_codes: true
file_tree:
enabled: true
position: "left"
show_change_icons: true
collapsible:
auto_collapse_thinking: true
auto_collapse_long_output: true
annotation_schemes:
- annotation_type: process_reward
name: prm_evaluation
mode: "first_error"
description: "Click the first step where the agent makes a mistake"
- annotation_type: code_review
name: code_quality
comment_categories:
enabled: true
categories: ["Bug", "Logic Error", "Style", "Missing Error Handling"]
file_rating_dimensions:
enabled: true
scale: [1, 2, 3, 4, 5]
verdict_options:
enabled: true
options:
- value: "approve"
text: "Approve"
- value: "request_changes"
text: "Request Changes"
- value: "comment"
text: "Comment"
- annotation_type: text
name: overall_notes
description: "Additional Notes"
placeholder: "Any other observations about this trace..."
output:
path: "./output/"
format: "jsonl"
export_formats:
- "prm"
- "swe_bench"
quality_control:
inter_annotator_agreement: true
overlap_percentage: 20
minimum_time_per_instance: 30 # seconds
annotators:
- username: "annotator1"
- username: "annotator2"Arranca el servidor
potato start config.yaml -p 8000Abre http://localhost:8000 en el navegador, inicia sesión y empieza a anotar. Tendrás el renderizado completo de diffs, la salida de terminal y la anotación de recompensa de proceso descritos arriba.
Qué viene después
Esta es una primera versión y queda trabajo por delante. En la lista: soporte para más formatos de agente, mejor visualización de las refactorizaciones que tocan varios archivos e integración más estrecha con frameworks de entrenamiento como OpenRLHF y TRL.
Si escribes un nuevo conversor de trazas, un esquema o un formato de exportación, nos encantaría recibir tu contribución. Y si tu equipo está evaluando agentes de coding y se topa con algo que esta configuración no cubre, abre un issue en nuestro repositorio de GitHub.