Skip to content
Announcements11 min read

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 Team·

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:

ConvertidorFuente
openaiOpenAI Assistants API / function calling
anthropicAnthropic Claude tool_use / Messages API
swebenchTrazas de tareas SWE-bench
opentelemetryExportaciones de spans OpenTelemetry
mcpSesiones de Model Context Protocol
multi_agentCrewAI / AutoGen / LangGraph
langchainTrazas de callback de LangChain
langfuseExportaciones de observaciones de LangFuse
reactReAct Thought/Action/Observation
webarenaWebArena / VisualWebArena
atifAgent Trace Interchange Format
raw_webGrabaciones de navegador sin procesar (HAR + screenshots)

La configuración es directa:

yaml
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:

yaml
agentic:
  enabled: true
  trace_converter: auto

Tres 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:

yaml
agentic:
  display_type: agent_trace
  agent_trace_display:
    colors:
      thought: "#6E56CF"
      action: "#3b82f6"
      observation: "#22c55e"
      error: "#ef4444"
    collapse_observations: true
    show_step_numbers: true

Visualizació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:

yaml
agentic:
  display_type: web_agent
  web_agent_display:
    screenshot_max_width: 900
    overlay:
      enabled: true
      click_marker: "circle"
      click_color: "#ef4444"
    filmstrip:
      enabled: true

Visualizació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):

yaml
agentic:
  display_type: interactive_chat
  interactive_chat_display:
    mode: trace_review
    trace_review:
      show_token_counts: true
      show_latency: true

Calificaciones por Turno

Para cualquier tipo de visualización, los anotadores pueden calificar pasos individuales junto con la traza general:

yaml
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:

yaml
annotation_schemes:
  - preset: agent_task_success
  - preset: agent_step_correctness
  - preset: agent_error_taxonomy
  - preset: agent_safety

Presets 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

  1. Anotación Semilla -- el humano etiqueta 50 instancias diversas
  2. Calibración Inicial del LLM -- el LLM etiqueta un lote de calibración usando ejemplos semilla
  3. Análisis de Confusión -- identificar patrones de desacuerdo sistemático humano-LLM
  4. Refinamiento de Directrices -- el LLM propone directrices mejoradas; el humano aprueba
  5. Generación de Funciones de Etiquetado -- reglas programáticas inspiradas en ALCHEmist para instancias fáciles
  6. Etiquetado Activo -- el humano etiqueta las instancias restantes más informativas
  7. Bucle de Refinamiento Automatizado -- re-etiquetado iterativo con directrices actualizadas
  8. Exploración de Desacuerdos -- el humano resuelve casos donde el LLM y las funciones de etiquetado entran en conflicto
  9. Síntesis de Casos Límite -- el LLM genera ejemplos ambiguos sintéticos para etiquetado humano
  10. Escalamiento de Confianza en Cascada -- el humano revisa las etiquetas del LLM con menor confianza
  11. Optimización de Prompts -- búsqueda automatizada de prompts inspirada en DSPy
  12. Validación Final -- revisión de muestra aleatoria; aprobación o retorno al ciclo

Inicio Rápido

yaml
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:

yaml
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.05

Lee 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.

yaml
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: true

Tres 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:

bash
python -m potato.bws score --config config.yaml --method bradley_terry --output scores.csv

El 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

yaml
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: true

GitHub OAuth con Restricción de Organización

yaml
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:

yaml
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
yaml
parquet_export:
  enabled: true
  output_dir: "output/parquet/"
  compression: zstd
  auto_export: true

Carga directamente en pandas, DuckDB, PyArrow, Polars o Hugging Face Datasets:

python
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

  1. react-agent-eval -- Evaluar trazas de agentes ReAct con calificaciones a nivel de paso
  2. web-agent-eval -- Evaluación de trazas WebArena con superposiciones de capturas de pantalla
  3. chatbot-eval -- Evaluación de chat interactivo con proxy de agente en vivo
  4. multi-agent-eval -- Evaluar sistemas multi-agente CrewAI
  5. swebench-eval -- Evaluación de trazas SWE-bench para agentes de codificación

Demos de Solo Mode

  1. solo-sentiment -- Clasificación de sentimiento con Solo Mode en reseñas de productos
  2. solo-ner -- Reconocimiento de entidades nombradas con Solo Mode
  3. solo-toxicity -- Detección de toxicidad con Solo Mode con síntesis de casos límite

Demos de Best-Worst Scaling

  1. bws-translation -- Ranking de calidad de traducción automática
  2. bws-summarization -- Comparación de calidad de resúmenes
  3. bws-image-quality -- Ranking de calidad de generación de imágenes

Demos de Autenticación

  1. google-oauth-demo -- Ejemplo de configuración de Google OAuth
  2. github-oauth-demo -- GitHub OAuth con restricción de organización

Demos de Exportación

  1. parquet-export-demo -- Exportación Parquet con script de análisis DuckDB
  2. 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:

bash
cd project-hub/react-agent-eval
potato start config.yaml

Endurecimiento 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
yaml
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: true

Actualización

Desde Potato 2.2.x

bash
pip install --upgrade potato-annotation

Todas las configuraciones de v2.2 son completamente retrocompatibles. No se requieren cambios en las configuraciones existentes.

Nuevas Dependencias

La exportación Parquet requiere PyArrow:

bash
pip install potato-annotation[parquet]

Solo Mode requiere un SDK de proveedor de LLM:

bash
pip install potato-annotation[solo]    # installs openai + anthropic SDKs

O instala todo:

bash
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.


Enlaces