Edición de trayectorias para SFT/DPO
Los anotadores reescriben los pasos de una traza de agente para corregir un paso de razonamiento erróneo, arreglar una llamada a herramienta o reforzar la respuesta final, y Potato exporta cada par original/corregido como objetivos de ajuste fino supervisado y pares de preferencia DPO.
El esquema trajectory_edit permite a los anotadores reescribir los pasos de una traza de agente y exporta cada corrección como datos de entrenamiento. Corrige un paso de razonamiento erróneo, arregla una llamada a herramienta con una errata o refuerza la respuesta final, y Potato guarda la trayectoria corregida junto a la original. Después, el exportador trajectory_correction convierte cada par (original, corrected) en objetivos de ajuste fino supervisado (SFT) y pares de preferencia de optimización directa de preferencias (DPO).
Esto convierte a Potato en una herramienta de producción de datos de entrenamiento, no solo de evaluación. Es la contraparte editora de la puntuación a nivel de paso: en lugar de calificar una trayectoria, los anotadores la reparan, y la reparación se convierte en una señal de aprendizaje.
Un paso de agente mostrado con un original de solo lectura y un cuadro corregido editable con un diff a nivel de palabra
Inicio rápido
Ejecuta el ejemplo incluido desde la raíz del repositorio:
python potato/flask_server.py start examples/agent-traces/trajectory-correction/config.yaml -p 8000Cómo funciona
Cada paso de agente se representa como una tarjeta que muestra el texto original (solo lectura) y un cuadro corregido editable precargado con el original. A medida que el anotador escribe:
- un diff en vivo a nivel de palabra resalta las inserciones (verde) y las eliminaciones (tachado rojo),
- se cuentan las palabras y los caracteres modificados, y
- aparece una marca de «editado» en los campos modificados.
Un botón «Restablecer» recupera el original por campo. Con edit_final_answer: true, la respuesta final obtiene su propio editor. Nada es obligatorio: una traza sin editar simplemente no produce ningún par de entrenamiento.
Configuración
annotation_schemes:
- annotation_type: trajectory_edit
name: corrected_trajectory
description: "Fix any wrong steps, then correct the final answer"
steps_key: steps # instance field holding the step list
step_text_key: action # the default per-step editable field
editable_fields: # which fields get an editor
- action
# - thought # add to also edit reasoning
show_diff: true
show_edit_distance: true
allow_reset: true
require_reason_on_edit: false # add a per-field "reason" input
edit_final_answer: true
final_answer_key: final_answer| Opción | Predeterminado | Descripción |
|---|---|---|
steps_key | steps | Campo de la instancia que contiene la lista de pasos. |
step_text_key | action | Campo editable predeterminado por paso. |
editable_fields | [step_text_key] | Qué campos de paso obtienen un editor, p. ej. [action, thought]. |
show_diff | true | Muestra el diff en vivo a nivel de palabra. |
show_edit_distance | true | Muestra las palabras y los caracteres modificados. |
allow_reset | true | Botón «Restablecer al original» por campo. |
require_reason_on_edit | false | Campo de entrada «motivo de la edición» por campo. |
edit_final_answer | false | Añade un editor para la respuesta final. |
final_answer_key | final_answer | Campo de la instancia que contiene la respuesta final. |
Formato de los datos
El esquema lee los pasos de la instancia bajo steps_key. Cada paso es un objeto cuyos campos (action, thought, etc.) pueden editarse; los pasos de cadena simple se editan como el campo step_text_key.
{
"id": "traj_001",
"task_description": "Find the weather in San Francisco.",
"steps": [
{"thought": "Look it up.", "action": "web_search(queyr='SF weather')"},
{"thought": "Open it.", "action": "open_url(results[0])"}
],
"final_answer": "It is sunny."
}Exportación
Ejecuta el exportador trajectory_correction. Escribe tres archivos:
trajectory_corrections.json— cada registro: eloriginal_trace, elcorrected_tracereconstruido y, por campo, laseditscon distancias de edición y motivos.trajectory_sft.jsonl— una línea por traza editada:{"prompt": <task>, "completion": <corrected_trace>}.trajectory_dpo.jsonl— una línea por traza editada:{"prompt": <task>, "chosen": <corrected_trace>, "rejected": <original_trace>}.
Las trazas sin editar se cuentan pero se excluyen de SFT/DPO, ya que entrenar con una trayectoria sin cambios no aporta nada; el recuento de omitidas aparece en las estadísticas de exportación. Con varios anotadores, cada anotador que editó una traza produce un registro SFT/DPO.
Notas y limitaciones
- El diff es a nivel de palabra. Para llamadas a herramientas con aspecto de código y sin espacios, un solo token puede mostrarse como completamente modificado incluso para un arreglo de un carácter; el contador de distancia de caracteres es la señal precisa.
- Combínalo con la puntuación a nivel de paso si también quieres corrección por paso o una taxonomía de errores sobre la misma traza.
Relacionado
- Evaluación de trazas en tres paneles — vista de solo lectura del razonamiento, las llamadas y la respuesta
- Anotación agéntica — patrones de visualización y evaluación de trazas de agente
- Formatos de exportación — la referencia completa del exportador
Para más detalles de implementación, consulta la documentación fuente.