Potato 2.3: エージェント型アノテーション、Solo Mode、そして人間による評価の未来
Potato 2.3.0は、12種類のトレース形式コンバーター付きエージェント型アノテーション、人間とLLMの協調ラベリングのためのSolo Mode、Best-Worst Scaling、SSO/OAuth、Parquetエクスポート、15のデモプロジェクトを導入します。
Potato 2.3: エージェント型アノテーション、Solo Mode、そして人間による評価の未来
Potato 2.3.0のリリースを発表できることを嬉しく思います。これはPotato史上最大のリリースです。今回のアップデートでは、エージェント型アノテーションとSolo Modeという2つの主要な新システムに加え、Best-Worst Scaling、SSO/OAuth認証、Parquetエクスポート、15の新しいデモプロジェクトが導入されます。
このリリースのテーマはシンプルです:アノテーションの対象が変わり、ツールもそれに追いつく必要があるということです。研究者はもはやテキストのセンチメントや固有表現をラベリングするだけではありません。マルチステップのAIエージェントトレースを評価し、LLMの出力を大規模に比較し、ますます複雑なタスク向けのデータセットを構築しています。Potato 2.3はこの新しい現実のために構築されています。
エージェント型アノテーション
Potato 2.3の目玉機能は、人間のアノテーションによるAIエージェント評価のための完全なシステムです。
AIエージェント -- タスクを達成するためにマルチステップのアクションを実行するシステム -- は急速に普及しています。しかし、その評価は困難です。1回のエージェント実行には、数十のツール呼び出し、推論ステップ、Webページのナビゲーション、中間出力が含まれる場合があります。既存のアノテーションツールはエージェントの出力をフラットテキストとして表示し、評価者が見る必要のあるリッチな構造が失われてしまいます。
Potatoのエージェント型アノテーションシステムは、3つのコンポーネントでこの問題を解決します。
12種類のトレース形式コンバーター
エージェントトレースはフレームワークによって異なる形式で提供されます。Potatoはそれらすべてを統一表現に正規化します:
| コンバーター | ソース |
|---|---|
openai | OpenAI Assistants API / function calling |
anthropic | Anthropic Claude tool_use / Messages API |
swebench | SWE-benchタスクトレース |
opentelemetry | OpenTelemetryスパンエクスポート |
mcp | Model Context Protocolセッション |
multi_agent | CrewAI / AutoGen / LangGraph |
langchain | LangChainコールバックトレース |
langfuse | LangFuseオブザベーションエクスポート |
react | ReAct Thought/Action/Observation |
webarena | WebArena / VisualWebArena |
atif | Agent Trace Interchange Format |
raw_web | 生ブラウザ記録(HAR + スクリーンショット) |
設定は簡単です:
agentic:
enabled: true
trace_converter: react
trace_file: "data/agent_traces.jsonl"複数のソースからトレースを取り込む必要があるプロジェクトには、自動検出が利用可能です:
agentic:
enabled: true
trace_converter: auto3つの表示タイプ
異なるエージェントモダリティには異なるビジュアライゼーションが必要です。
Agent Trace Displayは、ツール使用エージェントのトレースを色分けされたステップカードとして描画し、折りたたみ可能なオブザベーション、JSONのプリティプリント、タイムラインサイドバーを備えています:
agentic:
display_type: agent_trace
agent_trace_display:
colors:
thought: "#6E56CF"
action: "#3b82f6"
observation: "#22c55e"
error: "#ef4444"
collapse_observations: true
show_step_numbers: trueWeb Agent Trace Displayは、ブラウジングエージェントのトレースをフルスクリーンショット、クリックターゲットと入力フィールドを表示するSVGオーバーレイ、クイックナビゲーション用フィルムストリップとともに描画します:
agentic:
display_type: web_agent
web_agent_display:
screenshot_max_width: 900
overlay:
enabled: true
click_marker: "circle"
click_color: "#ef4444"
filmstrip:
enabled: trueInteractive Chat Displayは、トレースレビュー(記録済み会話の評価)とライブチャット(アノテーターがリアルタイムでエージェントと対話し、その後会話を評価)の両方をサポートします:
agentic:
display_type: interactive_chat
interactive_chat_display:
mode: trace_review
trace_review:
show_token_counts: true
show_latency: trueターンごとの評価
どの表示タイプでも、アノテーターはトレース全体の評価に加えて個々のステップを評価できます:
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"プリビルトスキーマ
9つのアノテーションスキーマが、一般的なエージェント評価の次元をすぐに使えるようにカバーしています:
annotation_schemes:
- preset: agent_task_success
- preset: agent_step_correctness
- preset: agent_error_taxonomy
- preset: agent_safety利用可能なプリセット: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。
Solo Mode
Potato 2.3の2つ目の主要機能はSolo Modeです:従来のマルチアノテーターパラダイムを、1人の人間エキスパートがLLMと協調する12フェーズのワークフローに置き換えます。
課題
従来のアノテーションは信頼性のために複数のアノテーターを必要とします。しかし、チームの雇用、トレーニング、調整は高コストで時間がかかります。多くの研究プロジェクトにおいて、アノテーションのボトルネックはインターフェースではなく、ロジスティクスにあります。
解決策
Solo Modeでは、1人のドメインエキスパートがデータの戦略的に選択されたサブセットにラベルを付けます。LLMはそのラベルから学習し、残りのインスタンスにラベルを提案し、人間はLLMが苦戦するケースのみをレビューします。12フェーズのワークフローがこれを自動的にオーケストレーションします。
社内ベンチマークでは、Solo Modeは全人間ラベルのわずか10〜15%で、フルのマルチアノテーターパイプラインと95%以上の一致を達成しました。
12のフェーズ
- シードアノテーション -- 人間が50の多様なインスタンスにラベルを付ける
- 初回LLMキャリブレーション -- LLMがシード例を使用してキャリブレーションバッチにラベルを付ける
- 混同分析 -- 体系的な人間-LLM不一致パターンを特定
- ガイドライン改善 -- LLMが改善されたガイドラインを提案し、人間が承認
- ラベリング関数生成 -- ALCHEmistに着想を得た、簡単なインスタンス用のプログラマティックルール
- アクティブラベリング -- 人間が最も情報量の多い残りのインスタンスにラベルを付ける
- 自動改善ループ -- 更新されたガイドラインによる反復的な再ラベリング
- 不一致探索 -- LLMとラベリング関数が矛盾するケースを人間が解決
- エッジケース合成 -- LLMが人間のラベリング用に合成的な曖昧な例を生成
- カスケード信頼度エスカレーション -- 人間がLLMの最も信頼度の低いラベルをレビュー
- プロンプト最適化 -- DSPyに着想を得た自動プロンプト検索
- 最終検証 -- ランダムサンプルレビュー;合格またはサイクルバック
クイックスタート
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]マルチシグナルインスタンス優先順位付け
Solo Modeは、人間のラベリングに最も価値のあるインスタンスを選択するために6つの重み付けプールを使用します:
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.05Best-Worst Scaling
Potato 2.3はBest-Worst Scaling(BWS)を追加しました。これはMaximum Difference Scalingとも呼ばれます。アノテーターはアイテムのタプル(通常4つ)を見て、ある基準に従って最良と最悪を選択します。BWSはシンプルな二値判断から信頼性の高いスカラースコアを生成し、同じ統計的検出力を得るためにLikertスケールよりもはるかに少ないアノテーションで済みます。
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: true3つのスコアリング方法が利用可能です:
- カウンティング -- シンプルな (best_count - worst_count) / appearances
- Bradley-Terry -- ペアワイズ比較モデル(推奨デフォルト)
- Plackett-Luce -- 最大データ効率のためのフルランキングモデル
CLIからスコアリング:
python -m potato.bws score --config config.yaml --method bradley_terry --output scores.csv管理ダッシュボードにはBWSタブがあり、スコア分布、収束チャート、分割半信頼性メトリクスが含まれています。
Best-Worst Scalingのドキュメントを読む →
SSO & OAuth認証
本番環境のアノテーションデプロイメントには適切な認証が必要です。Potato 2.3は3つの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と組織制限
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
Okta、Azure AD、Auth0、Keycloak、またはその他の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"すべてのメソッドはドメイン制限、自動登録、混合モード(1つのログインページに複数の認証メソッド)をサポートしています。
Parquetエクスポート
アノテーションデータは、カラムナー形式を期待するデータサイエンスツールでますます消費されるようになっています。Potato 2.3はアノテーションをApache Parquetに直接エクスポートし、3つの構造化ファイルを生成できます:
- annotations.parquet -- (インスタンス、アノテーター、スキーマ)ごとに1行、値、タイムスタンプ、所要時間を含む
- spans.parquet -- アノテーション済みスパンごとに1行、オフセット、ラベル、リンクを含む
- items.parquet -- インスタンスメタデータ、アノテーション数とステータスを含む
parquet_export:
enabled: true
output_dir: "output/parquet/"
compression: zstd
auto_export: truepandas、DuckDB、PyArrow、Polars、または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
""")snappy、gzip、zstd、lz4、brotli圧縮、日付/アノテーターパーティショニングによる増分エクスポート、文字列カラムの辞書エンコーディングをサポートしています。
15の新しいデモプロジェクト
Potato 2.3には、project-hub/ディレクトリに新機能をカバーする15の新しいデモプロジェクトが同梱されています:
エージェント型アノテーションデモ
- react-agent-eval -- ステップレベル評価によるReActエージェントトレースの評価
- web-agent-eval -- スクリーンショットオーバーレイ付きWebArenaトレース評価
- chatbot-eval -- ライブエージェントプロキシによるインタラクティブチャット評価
- multi-agent-eval -- CrewAIマルチエージェントシステムの評価
- swebench-eval -- コーディングエージェント向けSWE-benchトレース評価
Solo Modeデモ
- solo-sentiment -- 商品レビューのSolo Modeセンチメント分類
- solo-ner -- Solo Mode固有表現認識
- solo-toxicity -- エッジケース合成付きSolo Mode毒性検出
Best-Worst Scalingデモ
- bws-translation -- 機械翻訳品質ランキング
- bws-summarization -- 要約品質比較
- bws-image-quality -- 画像生成品質ランキング
認証デモ
- google-oauth-demo -- Google OAuthセットアップ例
- github-oauth-demo -- 組織制限付きGitHub OAuth
エクスポートデモ
- parquet-export-demo -- DuckDB分析スクリプト付きParquetエクスポート
- huggingface-upload -- Parquetにエクスポートし、Hugging Face Hubにプッシュ
各デモには完全なconfig.yaml、サンプルデータ、セットアップ手順付きREADMEが含まれています。任意のデモを以下で開始:
cd project-hub/react-agent-eval
potato start config.yamlセキュリティ強化
Potato 2.3にはいくつかのセキュリティ改善が含まれています:
- セッショントークンは、設定可能な有効期限付きの暗号学的に安全なランダム生成を使用
- CSRF保護は、すべてのフォーム送信でデフォルトで有効
- レート制限が認証エンドポイントに適用(設定可能、デフォルトは1分あたり10回の試行)
- 入力サニタイゼーションは、アノテーションインターフェースに表示されるすべてのユーザー提供コンテンツに適用
- 依存関係の監査 -- すべてのPythonおよびJavaScript依存関係を最新のセキュアバージョンに更新
- Content Security Policyヘッダーが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: trueアップグレード
Potato 2.2.xからのアップグレード
pip install --upgrade potato-annotationすべてのv2.2設定は完全な後方互換性があります。既存の設定への変更は必要ありません。
新しい依存関係
ParquetエクスポートにはPyArrowが必要です:
pip install potato-annotation[parquet]Solo ModeにはLLMプロバイダーSDKが必要です:
pip install potato-annotation[solo] # installs openai + anthropic SDKsすべてをインストールする場合:
pip install potato-annotation[all]今後の展望
Potato 2.3は、アノテーションツールができることの大幅な拡張を表しています。次の機能セットの開発はすでに進行中です:
- アノテーション差分 -- ラウンドやアノテーター間でアノテーションをビジュアル差分で比較
- フェデレーテッドアノテーション -- 複数のPotatoインスタンス間でアノテーションを調整
- ストリーミングデータソース -- Kafka、Pub/Sub、その他のストリーミングシステムからのデータをアノテーション
- モバイル最適化インターフェース -- タブレットとスマートフォン向けのレスポンシブアノテーション
フィードバックをお待ちしております。GitHubでIssueを報告し、GitHub Discussionsでディスカッションに参加するか、チームに直接お問い合わせください。