Skip to content
Announcements9 min read

Potato 2.3: Agentische Annotation, Solo Mode und die Zukunft menschlicher Evaluierung

Potato 2.3.0 führt agentische Annotation mit 12 Trace-Format-Konvertern, Solo Mode für menschlich-LLM-kollaboratives Labeling, Best-Worst Scaling, SSO/OAuth, Parquet-Export und 15 Demo-Projekte ein.

Potato Team·
このページはまだお使いの言語に翻訳されていません。英語版を表示しています。

Potato 2.3: Agentische Annotation, Solo Mode und die Zukunft menschlicher Evaluierung

Wir freuen uns, Potato 2.3.0 ankündigen zu dürfen -- das größte Release in Potatos Geschichte. Dieses Update führt zwei große neue Systeme ein -- agentische Annotation und Solo Mode -- zusammen mit Best-Worst Scaling, SSO/OAuth-Authentifizierung, Parquet-Export und 15 neuen Demo-Projekten.

Das Thema dieses Releases ist einfach: Die Dinge, die wir annotieren müssen, haben sich verändert, und unsere Werkzeuge müssen Schritt halten. Forscher beschriften nicht mehr nur Textstimmungen und Named Entities. Sie evaluieren mehrstufige KI-Agenten-Traces, vergleichen LLM-Ausgaben im großen Maßstab und erstellen Datensätze für zunehmend komplexe Aufgaben. Potato 2.3 wurde für diese neue Realität entwickelt.


Agentische Annotation

Das Hauptfeature von Potato 2.3 ist ein vollständiges System zur Evaluierung von KI-Agenten durch menschliche Annotation.

KI-Agenten -- Systeme, die mehrstufige Aktionen zur Erfüllung von Aufgaben ausführen -- verbreiten sich rasant. Aber ihre Evaluierung ist schwierig. Ein einzelner Agentenlauf kann Dutzende von Tool-Aufrufen, Überlegungsschritten, Web-Seitennavigationen und Zwischenausgaben umfassen. Bestehende Annotationswerkzeuge zeigen Agenten-Ausgaben als flachen Text an, wodurch die reiche Struktur verloren geht, die Evaluatoren sehen müssen.

Potatos agentisches Annotationssystem löst dies mit drei Komponenten.

12 Trace-Format-Konverter

Agenten-Traces kommen je nach Framework in unterschiedlichen Formaten. Potato normalisiert sie alle in eine einheitliche Darstellung:

KonverterQuelle
openaiOpenAI Assistants API / function calling
anthropicAnthropic Claude tool_use / Messages API
swebenchSWE-bench task traces
opentelemetryOpenTelemetry span exports
mcpModel Context Protocol sessions
multi_agentCrewAI / AutoGen / LangGraph
langchainLangChain callback traces
langfuseLangFuse observation exports
reactReAct Thought/Action/Observation
webarenaWebArena / VisualWebArena
atifAgent Trace Interchange Format
raw_webRaw browser recordings (HAR + screenshots)

Die Konfiguration ist unkompliziert:

yaml
agentic:
  enabled: true
  trace_converter: react
  trace_file: "data/agent_traces.jsonl"

Automatische Erkennung ist für Projekte verfügbar, die Traces aus mehreren Quellen verarbeiten müssen:

yaml
agentic:
  enabled: true
  trace_converter: auto

Drei Anzeigetypen

Verschiedene Agenten-Modalitäten benötigen unterschiedliche Visualisierungen.

Agent Trace Display rendert Tool-nutzende Agenten-Traces als farbcodierte Schrittkarten mit aufklappbaren Beobachtungen, JSON-Pretty-Printing und einer Timeline-Seitenleiste:

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

Web Agent Trace Display rendert Browser-Agenten-Traces mit vollständigen Screenshots, SVG-Overlays, die Klickziele und Eingabefelder anzeigen, und einem Filmstreifen für schnelle Navigation:

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

Interactive Chat Display unterstützt sowohl die Trace-Überprüfung (Evaluierung einer aufgezeichneten Konversation) als auch Live-Chat (Annotatoren interagieren in Echtzeit mit einem Agenten und evaluieren dann die Konversation):

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

Pro-Turn-Bewertungen

Für jeden Anzeigetyp können Annotatoren einzelne Schritte neben dem gesamten Trace bewerten:

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"

Vorgefertigte Schemata

Neun Annotationsschemata decken gängige Agenten-Evaluierungsdimensionen sofort ab:

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

Verfügbare Presets: 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.

Agentische Annotation – Dokumentation lesen →


Solo Mode

Das zweite Hauptfeature von Potato 2.3 ist Solo Mode: ein 12-Phasen-Workflow, der das traditionelle Multi-Annotator-Paradigma durch einen einzelnen menschlichen Experten ersetzt, der mit einem LLM zusammenarbeitet.

Das Problem

Traditionelle Annotation erfordert mehrere Annotatoren für Zuverlässigkeit. Aber ein Team einzustellen, zu schulen und zu koordinieren ist teuer und langsam. Bei vielen Forschungsprojekten ist der Annotations-Engpass nicht die Oberfläche -- es ist die Logistik.

Die Lösung

Solo Mode ermöglicht es einem Domänenexperten, eine strategisch ausgewählte Teilmenge der Daten zu beschriften. Ein LLM lernt aus diesen Labels, schlägt Labels für die verbleibenden Instanzen vor, und der Mensch überprüft nur die Fälle, bei denen das LLM Schwierigkeiten hat. Ein 12-Phasen-Workflow orchestriert dies automatisch.

In internen Benchmarks erreichte Solo Mode 95 %+ Übereinstimmung mit vollständigen Multi-Annotator-Pipelines, während nur 10–15 % der gesamten menschlichen Labels benötigt wurden.

Die 12 Phasen

  1. Seed-Annotation -- Mensch beschriftet 50 diverse Instanzen
  2. Initiale LLM-Kalibrierung -- LLM beschriftet einen Kalibrierungsbatch mit Seed-Beispielen
  3. Konfusionsanalyse -- systematische Muster menschlich-LLM-Unstimmigkeiten identifizieren
  4. Leitfaden-Verfeinerung -- LLM schlägt verbesserte Leitfäden vor; Mensch genehmigt
  5. Labeling-Funktions-Generierung -- ALCHEmist-inspirierte programmatische Regeln für einfache Instanzen
  6. Aktives Labeling -- Mensch beschriftet die informativsten verbleibenden Instanzen
  7. Automatisierte Verfeinerungsschleife -- iteratives Neubeschriften mit aktualisierten Leitfäden
  8. Disagreement-Erkundung -- Mensch löst Fälle auf, bei denen LLM und Labeling-Funktionen in Konflikt stehen
  9. Edge-Case-Synthese -- LLM generiert synthetische mehrdeutige Beispiele für menschliches Labeling
  10. Kaskadierte Konfidenz-Eskalation -- Mensch überprüft LLM-Labels mit niedrigster Konfidenz
  11. Prompt-Optimierung -- DSPy-inspirierte automatisierte Prompt-Suche
  12. Abschlussprüfung -- Zufallsstichprobenüberprüfung; bestehen oder Schleife zurück

Schnellstart

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]

Multi-Signal-Instanz-Priorisierung

Solo Mode verwendet sechs gewichtete Pools, um die wertvollsten Instanzen für menschliches Labeling auszuwählen:

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

Solo-Mode-Dokumentation lesen →


Best-Worst Scaling

Potato 2.3 fügt Best-Worst Scaling (BWS) hinzu, auch als Maximum Difference Scaling bekannt. Annotatoren sehen ein Tupel von Elementen (typischerweise 4) und wählen das beste und das schlechteste nach einem bestimmten Kriterium aus. BWS produziert zuverlässige Skalarwerte aus einfachen binären Urteilen und benötigt weit weniger Annotationen als Likert-Skalen für die gleiche statistische Aussagekraft.

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

Drei Bewertungsmethoden stehen zur Verfügung:

  • Counting -- einfach (best_count - worst_count) / Erscheinungen
  • Bradley-Terry -- paarweises Vergleichsmodell (empfohlener Standard)
  • Plackett-Luce -- vollständiges Ranking-Modell für maximale Dateneffizienz

Bewertung über die CLI:

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

Das Admin-Dashboard enthält einen BWS-Tab mit Score-Verteilungen, Konvergenzdiagrammen und Split-Half-Reliabilitätsmetriken.

Best-Worst-Scaling-Dokumentation lesen →


SSO & OAuth-Authentifizierung

Produktions-Annotations-Deployments benötigen ordentliche Authentifizierung. Potato 2.3 unterstützt drei OAuth-Methoden:

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 mit Organisations-Einschränkung

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"

Generisches OIDC

Verbindung zu Okta, Azure AD, Auth0, Keycloak oder einem anderen OIDC-kompatiblen Anbieter:

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"

Alle Methoden unterstützen Domain-Einschränkung, automatische Registrierung und gemischten Modus (mehrere Authentifizierungsmethoden auf einer Anmeldeseite).

SSO & OAuth-Dokumentation lesen →


Parquet-Export

Annotationsdaten werden zunehmend von Data-Science-Tools konsumiert, die Spaltenformate erwarten. Potato 2.3 kann Annotationen direkt in Apache Parquet exportieren und dabei drei strukturierte Dateien erzeugen:

  • annotations.parquet -- eine Zeile pro (Instanz, Annotator, Schema) mit Werten, Zeitstempeln und Dauern
  • spans.parquet -- eine Zeile pro annotiertem Span mit Offsets, Labels und Links
  • items.parquet -- Instanz-Metadaten mit Annotationsanzahlen und Status
yaml
parquet_export:
  enabled: true
  output_dir: "output/parquet/"
  compression: zstd
  auto_export: true

Direkt in pandas, DuckDB, PyArrow, Polars oder Hugging Face Datasets laden:

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
""")

Unterstützt snappy, gzip, zstd, lz4 und brotli Komprimierung, inkrementellen Export mit Datum/Annotator-Partitionierung und Dictionary-Encoding für String-Spalten.

Parquet-Export-Dokumentation lesen →


15 neue Demo-Projekte

Potato 2.3 wird mit 15 neuen Demo-Projekten im project-hub/-Verzeichnis geliefert, die die neuen Features abdecken:

Agentische Annotation – Demos

  1. react-agent-eval -- ReAct-Agenten-Traces mit schrittweisen Bewertungen evaluieren
  2. web-agent-eval -- WebArena-Trace-Evaluierung mit Screenshot-Overlays
  3. chatbot-eval -- Interaktive Chat-Evaluierung mit Live-Agenten-Proxy
  4. multi-agent-eval -- CrewAI Multi-Agenten-Systeme evaluieren
  5. swebench-eval -- SWE-bench Trace-Evaluierung für Coding-Agenten

Solo Mode – Demos

  1. solo-sentiment -- Solo-Mode-Stimmungsklassifizierung auf Produktbewertungen
  2. solo-ner -- Solo-Mode Named Entity Recognition
  3. solo-toxicity -- Solo-Mode-Toxizitätserkennung mit Edge-Case-Synthese

Best-Worst Scaling – Demos

  1. bws-translation -- Maschinelle Übersetzungsqualitäts-Ranking
  2. bws-summarization -- Zusammenfassungsqualitäts-Vergleich
  3. bws-image-quality -- Bildgenerierungsqualitäts-Ranking

Authentifizierungs-Demos

  1. google-oauth-demo -- Google-OAuth-Einrichtungsbeispiel
  2. github-oauth-demo -- GitHub OAuth mit Organisations-Einschränkung

Export-Demos

  1. parquet-export-demo -- Parquet-Export mit DuckDB-Analyseskript
  2. huggingface-upload -- Nach Parquet exportieren und auf Hugging Face Hub pushen

Jedes Demo enthält eine vollständige config.yaml, Beispieldaten und eine README mit Einrichtungsanweisungen. Jedes Demo starten mit:

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

Sicherheitsverbesserungen

Potato 2.3 enthält mehrere Sicherheitsverbesserungen:

  • Session-Tokens verwenden kryptografisch sichere Zufallsgenerierung mit konfigurierbarem Ablauf
  • CSRF-Schutz ist standardmäßig für alle Formularübermittlungen aktiviert
  • Rate Limiting für Authentifizierungsendpunkte (konfigurierbar, Standard 10 Versuche pro Minute)
  • Eingabe-Sanitierung für alle benutzerseitig bereitgestellten Inhalte, die in der Annotationsoberfläche angezeigt werden
  • Abhängigkeits-Audit -- alle Python- und JavaScript-Abhängigkeiten auf neueste sichere Versionen aktualisiert
  • Content Security Policy-Header hinzugefügt, um XSS zu verhindern
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

Upgrade

Von Potato 2.2.x

bash
pip install --upgrade potato-annotation

Alle v2.2-Konfigurationen sind vollständig abwärtskompatibel. Keine Änderungen an bestehenden Configs erforderlich.

Neue Abhängigkeiten

Parquet-Export erfordert PyArrow:

bash
pip install potato-annotation[parquet]

Solo Mode erfordert ein LLM-Anbieter-SDK:

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

Oder alles installieren:

bash
pip install potato-annotation[all]

Was kommt als Nächstes

Potato 2.3 stellt eine bedeutende Erweiterung dessen dar, was Annotationswerkzeuge leisten können. Wir arbeiten bereits an den nächsten Features:

  • Annotations-Diffing -- Annotationen über Runden und Annotatoren hinweg mit visuellen Diffs vergleichen
  • Federated Annotation -- Annotation über mehrere Potato-Instanzen koordinieren
  • Streaming-Datenquellen -- Daten aus Kafka, Pub/Sub und anderen Streaming-Systemen annotieren
  • Mobile-optimierte Oberfläche -- responsive Annotation für Tablets und Smartphones

Wir freuen uns über Ihr Feedback. Eröffnen Sie Issues auf GitHub, nehmen Sie an der Diskussion in GitHub Discussions teil oder wenden Sie sich direkt an das Team.