Potato 2.3: Anotación Agéntica, Solo Mode y el Futuro de la Evaluación Humana
Potato 2.3.0 introduce anotación agéntica con 12 convertidores de formato de trazas, Solo Mode para etiquetado colaborativo humano-LLM, Best-Worst Scaling, SSO/OAuth, exportación Parquet y 15 proyectos de demostración.
Potato 2.3: Anotación Agéntica, Solo Mode y el Futuro de la Evaluación Humana
Nos complace anunciar Potato 2.3.0, la versión más grande en la historia de Potato. Esta actualización introduce dos nuevos sistemas principales -- anotación agéntica y Solo Mode -- junto con Best-Worst Scaling, autenticación SSO/OAuth, exportación Parquet y 15 nuevos proyectos de demostración.
El tema de esta versión es simple: las cosas que necesitamos anotar han cambiado, y nuestras herramientas necesitan mantenerse al día. Los investigadores ya no solo etiquetan sentimiento de texto y entidades nombradas. Están evaluando trazas de agentes de IA multi-paso, comparando salidas de LLMs a escala y construyendo datasets para tareas cada vez más complejas. Potato 2.3 está construido para esta nueva realidad.
Anotación Agéntica
La función principal de Potato 2.3 es un sistema completo para evaluar agentes de IA a través de anotación humana.
Los agentes de IA -- sistemas que toman acciones multi-paso para cumplir tareas -- proliferan rápidamente. Pero evaluarlos es difícil. Una sola ejecución de agente puede involucrar decenas de llamadas a herramientas, pasos de razonamiento, navegaciones de páginas web y salidas intermedias. Las herramientas de anotación existentes muestran las salidas de los agentes como texto plano, perdiendo la rica estructura que los evaluadores necesitan ver.
El sistema de anotación agéntica de Potato resuelve esto con tres componentes.
12 Convertidores de Formato de Trazas
Las trazas de agentes vienen en diferentes formatos según el framework. Potato las normaliza todas en una representación unificada:
| Convertidor | Fuente |
|---|---|
openai | OpenAI Assistants API / function calling |
anthropic | Anthropic Claude tool_use / Messages API |
swebench | Trazas de tareas SWE-bench |
opentelemetry | Exportaciones de spans OpenTelemetry |
mcp | Sesiones de Model Context Protocol |
multi_agent | CrewAI / AutoGen / LangGraph |
langchain | Trazas de callback de LangChain |
langfuse | Exportaciones de observaciones de LangFuse |
react | ReAct Thought/Action/Observation |
webarena | WebArena / VisualWebArena |
atif | Agent Trace Interchange Format |
raw_web | Grabaciones de navegador sin procesar (HAR + screenshots) |
La configuración es directa:
agentic:
enabled: true
trace_converter: react
trace_file: "data/agent_traces.jsonl"La auto-detección está disponible para proyectos que necesitan ingerir trazas de múltiples fuentes:
agentic:
enabled: true
trace_converter: autoTres Tipos de Visualización
Diferentes modalidades de agente necesitan diferentes visualizaciones.
Visualización de Traza de Agente renderiza trazas de agentes que usan herramientas como tarjetas de pasos codificadas por color con observaciones colapsables, impresión bonita de JSON y una barra lateral de línea temporal:
agentic:
display_type: agent_trace
agent_trace_display:
colors:
thought: "#6E56CF"
action: "#3b82f6"
observation: "#22c55e"
error: "#ef4444"
collapse_observations: true
show_step_numbers: trueVisualización de Traza de Agente Web renderiza trazas de agentes de navegación con capturas de pantalla completas, superposiciones SVG mostrando objetivos de clic y campos de entrada, y una tira de fotogramas para navegación rápida:
agentic:
display_type: web_agent
web_agent_display:
screenshot_max_width: 900
overlay:
enabled: true
click_marker: "circle"
click_color: "#ef4444"
filmstrip:
enabled: trueVisualización de Chat Interactivo soporta tanto revisión de trazas (evaluar una conversación grabada) como chat en vivo (los anotadores interactúan con un agente en tiempo real, luego evalúan la conversación):
agentic:
display_type: interactive_chat
interactive_chat_display:
mode: trace_review
trace_review:
show_token_counts: true
show_latency: trueCalificaciones por Turno
Para cualquier tipo de visualización, los anotadores pueden calificar pasos individuales junto con la traza general:
annotation_schemes:
- annotation_type: likert
name: overall_quality
min: 1
max: 5
- annotation_type: per_turn_rating
name: step_correctness
target: agentic_steps
rating_type: radio
labels:
- "Correct"
- "Partially Correct"
- "Incorrect"Esquemas Pre-construidos
Nueve esquemas de anotación cubren dimensiones comunes de evaluación de agentes listos para usar:
annotation_schemes:
- preset: agent_task_success
- preset: agent_step_correctness
- preset: agent_error_taxonomy
- preset: agent_safetyPresets disponibles: agent_task_success, agent_step_correctness, agent_error_taxonomy, agent_safety, agent_efficiency, agent_instruction_following, agent_explanation_quality, agent_web_action_correctness, agent_conversation_quality.
Lee la documentación de Anotación Agéntica →
Solo Mode
La segunda función principal de Potato 2.3 es Solo Mode: un flujo de trabajo de 12 fases que reemplaza el paradigma tradicional de múltiples anotadores con un único experto humano colaborando con un LLM.
El Problema
La anotación tradicional requiere múltiples anotadores para confiabilidad. Pero contratar, capacitar y coordinar un equipo es costoso y lento. Para muchos proyectos de investigación, el cuello de botella de la anotación no es la interfaz -- es la logística.
La Solución
Solo Mode permite que un experto en el dominio etiquete un subconjunto estratégicamente seleccionado de los datos. Un LLM aprende de esas etiquetas, propone etiquetas para las instancias restantes, y el humano revisa solo los casos donde el LLM tiene dificultades. Un flujo de trabajo de 12 fases orquesta esto automáticamente.
En benchmarks internos, Solo Mode logró 95%+ de acuerdo con pipelines completos de múltiples anotadores mientras requirió solo el 10-15% del total de etiquetas humanas.
Las 12 Fases
- Anotación Semilla -- el humano etiqueta 50 instancias diversas
- Calibración Inicial del LLM -- el LLM etiqueta un lote de calibración usando ejemplos semilla
- Análisis de Confusión -- identificar patrones de desacuerdo sistemático humano-LLM
- Refinamiento de Directrices -- el LLM propone directrices mejoradas; el humano aprueba
- Generación de Funciones de Etiquetado -- reglas programáticas inspiradas en ALCHEmist para instancias fáciles
- Etiquetado Activo -- el humano etiqueta las instancias restantes más informativas
- Bucle de Refinamiento Automatizado -- re-etiquetado iterativo con directrices actualizadas
- Exploración de Desacuerdos -- el humano resuelve casos donde el LLM y las funciones de etiquetado entran en conflicto
- Síntesis de Casos Límite -- el LLM genera ejemplos ambiguos sintéticos para etiquetado humano
- Escalamiento de Confianza en Cascada -- el humano revisa las etiquetas del LLM con menor confianza
- Optimización de Prompts -- búsqueda automatizada de prompts inspirada en DSPy
- Validación Final -- revisión de muestra aleatoria; aprobación o retorno al ciclo
Inicio Rápido
solo_mode:
enabled: true
llm:
endpoint_type: openai
model: "gpt-4o"
api_key: ${OPENAI_API_KEY}
seed_count: 50
accuracy_threshold: 0.92
confidence_threshold: 0.85
annotation_schemes:
- annotation_type: radio
name: sentiment
labels: [Positive, Neutral, Negative]Priorización de Instancias Multi-Señal
Solo Mode usa seis grupos ponderados para seleccionar las instancias más valiosas para el etiquetado humano:
solo_mode:
prioritization:
pools:
- name: uncertain
weight: 0.30
- name: disagreement
weight: 0.25
- name: boundary
weight: 0.20
- name: novel
weight: 0.10
- name: error_pattern
weight: 0.10
- name: random
weight: 0.05Lee la documentación de Solo Mode →
Best-Worst Scaling
Potato 2.3 añade Best-Worst Scaling (BWS), también conocido como Escalamiento de Máxima Diferencia. Los anotadores ven una tupla de elementos (típicamente 4) y seleccionan el mejor y el peor según algún criterio. BWS produce puntuaciones escalares confiables a partir de juicios binarios simples, requiriendo muchas menos anotaciones que las escalas Likert para el mismo poder estadístico.
annotation_schemes:
- annotation_type: best_worst_scaling
name: fluency
description: "Select the BEST and WORST translation"
items_key: "translations"
tuple_size: 4
best_label: "Most Fluent"
worst_label: "Least Fluent"
randomize_order: true
tuple_generation:
method: balanced_incomplete
tuples_per_item: 5
scoring:
method: bradley_terry
auto_compute: true
include_confidence: trueTres métodos de puntuación están disponibles:
- Conteo -- simple (best_count - worst_count) / apariciones
- Bradley-Terry -- modelo de comparación por pares (predeterminado recomendado)
- Plackett-Luce -- modelo de ranking completo para máxima eficiencia de datos
Puntúa desde el CLI:
python -m potato.bws score --config config.yaml --method bradley_terry --output scores.csvEl panel de administración incluye una pestaña de BWS con distribuciones de puntuación, gráficos de convergencia y métricas de confiabilidad split-half.
Lee la documentación de Best-Worst Scaling →
Autenticación SSO y OAuth
Los despliegues de anotación en producción necesitan autenticación adecuada. Potato 2.3 soporta tres métodos OAuth:
Google OAuth
authentication:
method: google_oauth
google_oauth:
client_id: ${GOOGLE_CLIENT_ID}
client_secret: ${GOOGLE_CLIENT_SECRET}
redirect_uri: "https://annotation.example.com/auth/google/callback"
allowed_domains:
- "umich.edu"
auto_register: trueGitHub OAuth con Restricción de Organización
authentication:
method: github_oauth
github_oauth:
client_id: ${GITHUB_CLIENT_ID}
client_secret: ${GITHUB_CLIENT_SECRET}
redirect_uri: "https://annotation.example.com/auth/github/callback"
allowed_organizations:
- "my-research-lab"
scopes:
- "read:user"
- "read:org"OIDC Genérico
Conéctate a Okta, Azure AD, Auth0, Keycloak o cualquier proveedor compatible con OIDC:
authentication:
method: oidc
oidc:
discovery_url: "https://accounts.example.com/.well-known/openid-configuration"
client_id: ${OIDC_CLIENT_ID}
client_secret: ${OIDC_CLIENT_SECRET}
redirect_uri: "https://annotation.example.com/auth/oidc/callback"Todos los métodos soportan restricción de dominio, auto-registro y modo mixto (múltiples métodos de autenticación en una página de login).
Lee la documentación de SSO y OAuth →
Exportación Parquet
Los datos de anotación son consumidos cada vez más por herramientas de ciencia de datos que esperan formatos columnares. Potato 2.3 puede exportar anotaciones directamente a Apache Parquet, produciendo tres archivos estructurados:
- annotations.parquet -- una fila por (instancia, anotador, esquema) con valores, marcas de tiempo y duraciones
- spans.parquet -- una fila por span anotado con offsets, etiquetas y enlaces
- items.parquet -- metadatos de instancia con conteos de anotaciones y estado
parquet_export:
enabled: true
output_dir: "output/parquet/"
compression: zstd
auto_export: trueCarga directamente en pandas, DuckDB, PyArrow, Polars o Hugging Face Datasets:
import pandas as pd
annotations = pd.read_parquet("output/parquet/annotations.parquet")
# Or with DuckDB for SQL queries
import duckdb
duckdb.sql("""
SELECT instance_id, value, COUNT(*) as n
FROM 'output/parquet/annotations.parquet'
WHERE schema_name = 'sentiment'
GROUP BY instance_id, value
""")Soporta compresión snappy, gzip, zstd, lz4 y brotli, exportación incremental con particionamiento por fecha/anotador y codificación de diccionario para columnas de texto.
Lee la documentación de Exportación Parquet →
15 Nuevos Proyectos de Demostración
Potato 2.3 viene con 15 nuevos proyectos de demostración en el directorio project-hub/, cubriendo las nuevas funciones:
Demos de Anotación Agéntica
- react-agent-eval -- Evaluar trazas de agentes ReAct con calificaciones a nivel de paso
- web-agent-eval -- Evaluación de trazas WebArena con superposiciones de capturas de pantalla
- chatbot-eval -- Evaluación de chat interactivo con proxy de agente en vivo
- multi-agent-eval -- Evaluar sistemas multi-agente CrewAI
- swebench-eval -- Evaluación de trazas SWE-bench para agentes de codificación
Demos de Solo Mode
- solo-sentiment -- Clasificación de sentimiento con Solo Mode en reseñas de productos
- solo-ner -- Reconocimiento de entidades nombradas con Solo Mode
- solo-toxicity -- Detección de toxicidad con Solo Mode con síntesis de casos límite
Demos de Best-Worst Scaling
- bws-translation -- Ranking de calidad de traducción automática
- bws-summarization -- Comparación de calidad de resúmenes
- bws-image-quality -- Ranking de calidad de generación de imágenes
Demos de Autenticación
- google-oauth-demo -- Ejemplo de configuración de Google OAuth
- github-oauth-demo -- GitHub OAuth con restricción de organización
Demos de Exportación
- parquet-export-demo -- Exportación Parquet con script de análisis DuckDB
- huggingface-upload -- Exportar a Parquet y subir a Hugging Face Hub
Cada demo incluye un config.yaml completo, datos de ejemplo y un README con instrucciones de configuración. Inicia cualquier demo con:
cd project-hub/react-agent-eval
potato start config.yamlEndurecimiento de Seguridad
Potato 2.3 incluye varias mejoras de seguridad:
- Los tokens de sesión usan generación aleatoria criptográficamente segura con expiración configurable
- La protección CSRF está habilitada por defecto para todos los envíos de formularios
- Limitación de tasa en endpoints de autenticación (configurable, predeterminado 10 intentos por minuto)
- Sanitización de entrada para todo contenido proporcionado por el usuario mostrado en la interfaz de anotación
- Auditoría de dependencias -- todas las dependencias de Python y JavaScript actualizadas a las últimas versiones seguras
- Encabezados de Content Security Policy añadidos para prevenir XSS
security:
csrf_protection: true
rate_limiting:
auth_attempts: 10 # per minute
api_requests: 100 # per minute
session:
token_length: 64
lifetime_hours: 24
content_security_policy: trueActualización
Desde Potato 2.2.x
pip install --upgrade potato-annotationTodas las configuraciones de v2.2 son completamente retrocompatibles. No se requieren cambios en las configuraciones existentes.
Nuevas Dependencias
La exportación Parquet requiere PyArrow:
pip install potato-annotation[parquet]Solo Mode requiere un SDK de proveedor de LLM:
pip install potato-annotation[solo] # installs openai + anthropic SDKsO instala todo:
pip install potato-annotation[all]Lo Que Viene
Potato 2.3 representa una expansión significativa de lo que las herramientas de anotación pueden hacer. Ya estamos trabajando en el próximo conjunto de funciones:
- Diferencias de anotación -- comparar anotaciones entre rondas y anotadores con diferencias visuales
- Anotación federada -- coordinar anotación entre múltiples instancias de Potato
- Fuentes de datos en streaming -- anotar datos desde Kafka, Pub/Sub y otros sistemas de streaming
- Interfaz optimizada para móviles -- anotación responsiva para tablets y teléfonos
Nos encantaría escuchar tus comentarios. Abre issues en GitHub, únete a la discusión en GitHub Discussions o contacta al equipo directamente.