LLM とエージェントのトレースのための人手レビューキュー
トレースがどのように人手のレビューキューに届くか、レビュアーが何にラベルを付けるか、そして Langfuse、LangSmith、Potato がラベルをスコアと評価データセットにどう変えるかを解説します。
人手のレビューキューは、人間によるラベル付けを待つ LLM やエージェントのトレースのリストで、Langfuse と LangSmith はこの機能をアノテーションキューと呼んでいます。Langfuse、LangSmith、Arize AX はアノテーションキューをトレースツールに組み込み、Braintrust は Review ページでログをレビュアーに割り当て、Arize Phoenix ではレビュアーがトレースビューからスパンにアノテーションを付けられます。Potato は、無料のセルフホスト型レビューツールです。Langfuse、ウェブフック、またはエクスポートからトレースを取り込み、各トレースを複数のレビュアーに送り、レビュアー間の一致度を報告し、統合した回答をスコアとして Langfuse や LangSmith に書き戻します。
トレースは LLM アプリケーションの一回の実行を記録し、スパン(Langfuse ではオブザベーション)は、その実行内のモデル呼び出しやツール呼び出しのような一つのステップを記録します(OpenTelemetry のトレース)。エージェントのトランスクリプトは、複数ステップのエージェントまたは複数ターンのチャットのトレースです。レビュアーがトレースにラベルを付ける理由は二つあります。第一に、人間のラベルは、LLM-as-a-judge が本番のトラフィックを単独で採点する前に、照合される基準です(Zheng ら、2023)。第二に、レビュー済みのトレースが評価データセットになります。評価データセットとは、新しいプロンプトやモデルのバージョンごとにテストされる、入力と期待される出力の固定されたセットです。アノテーター間一致度は、二人のレビュアーが同じラベルを付ける頻度です。一致度は通常、Cohen のカッパまたは Krippendorff のアルファとして報告されます。
AI エージェント評価ツールの比較は、プラットフォームを機能ごとに比較します。LLM の人手評価と選好データのツールの比較は、選好データを扱います。エージェントのトラジェクトリのアノテーションは、ステップ単位のエラー分類の設計を扱います。
レビューキューへのトレースの供給元
チームがすべてのトレースをレビューすることはまれです。そのため各ツールは、人間に届くトレースを選ぶ方法を提供しています。Langfuse では、テーブルでトレース、オブザベーション、セッションを選択して Add to queue を選ぶか、アイテムの詳細ページから一つのアイテムにアノテーションを付けます。LangSmith のキューは、手動または自動化ルールで追加された実行とスレッド全体を受け入れます。手動の追加では、一度の操作で最大 100 件の実行またはスレッドをキューに入れられます。LangSmith のスレッドルールは、会話がアイドル状態になった時点で会話を追加します。Arize AX は、キューを時間範囲のスパン、またはデータセットの例で満たします。
Potato は、三つの方法でトレースを読み込みます。
- エクスポート。
python -m potato.trace_converterは、15 のトレース形式を Potato の JSONL に変換します。LangSmith の実行エクスポート用のlangchain、langfuse、そして Phoenix や Braintrust のエクスポーターからの OpenTelemetry と OpenInference のスパン用のotelを含みます。 - ウェブフック。
trace_ingestionを有効にすると、Potato は/api/traces/webhook、/api/traces/langsmith、/api/traces/otelに投稿されたトレースを受け入れ、レビュアーが作業している間に各トレースをキューに追加します。 - Langfuse のポーリング。
trace_ingestion.sourcesの下にあるlangfuseエントリは、Langfuse プロジェクトから一定間隔で新しいトレースを取得します。
Potato は、どの受信トレースをどの順序でレビュアーに届けるかを選びます。自動化ルールは、フィールドと割合によって受信トレースをサンプリングします。トリアージキューは、エラーになったトレース、低評価のフィードバック、低い自動スコアのトレースを、レビュアーに優先して提供します。
レビュアーがトレースに付けるラベル
レビュアーが付けるラベルの種類は、そのラベルを後で何に使うかによって決まります。合格か不合格かの判定は成功率を与え、基準ごとのルーブリックスコアはジャッジが合わせるべき対象を与えます。修正された出力は、学習例を与えます。以下の表の各種類のラベルには、そのラベルを記録する Potato のスキームがあります。
| ラベル | 例 | Potato のスキーム |
|---|---|---|
| 合格か不合格か | エージェントはリクエストを解決したか? | radio |
| ルーブリックスコア | 正確さ、トーン、安全性を 1 から 5 の尺度で | rubric_eval、likert |
| エラースパン | 幻覚の文をハイライトし、タイプと重大度を付ける | error_span |
| ステップの正しさ | 最初の誤ったステップに印を付けるか、すべてのステップを判定する | process_reward、trajectory_eval |
| ツール呼び出し | 正しいツール、正しい引数 | tool_call_review |
| マルチエージェントの実行での責任 | どのエージェントのどのステップが失敗の原因か | failure_attribution、agent_scorecard |
| 修正された出力 | 最終回答または誤ったステップを書き直す | text_edit、trajectory_edit |
| 二つの実行間の選好 | 応答 A、応答 B、または引き分け | pairwise |
トレースプラットフォームは、同じ判断をスコアとして記録します。Langfuse は、修正された出力をトレースまたはオブザベーションに保存します。LangSmith のレビュアーは、データセットの例の期待される出力になるアサーションを書き、Braintrust は自由形式のスコアを expected フィールドに書き込めます。LangSmith のペアワイズキューは、二つの実験の実行を並べて表示し、レビュアーは A、B、または Equal を選びます。
ツール別のレビューキュー機能
Potato チームは、以下のライセンス、プラン、機能を、2026-11-02 時点の各プロジェクト自身のページで確認しました。
| ツール | 動作形態 | ライセンスまたは価格 | レビュー機能 |
|---|---|---|---|
| Langfuse | ホスト型クラウドまたはセルフホスト | MIT。アノテーションキュー付きでセルフホストは無料。Cloud の Hobby は無料でキュー 1 つ、Core は月 29 ドルで 3 つ、Pro は月 199 ドルでキュー無制限 | トレース、オブザベーション、セッションのキュー。修正された出力。二つのスコア名の間の Cohen のカッパ |
| LangSmith | ホスト型クラウド | Developer は 1 シートで無料。Plus は 1 シートあたり月 39 ドル。セルフホストは Enterprise のみ | 単一実行とペアワイズのキュー、スレッドのレビュー、実行ごとに設定したレビュアー数、Add to Dataset |
| Arize Phoenix | pip または Docker でセルフホスト | Elastic License 2.0 | 人間、LLM、コードによる、カテゴリ、連続値、自由形式のアノテーション。それぞれ作成者付きで一覧表示 |
| Arize AX | ホスト型プラットフォーム | 商用 | スパンまたはデータセットの例のキュー。ALL または RANDOM の割り当て方式 |
| Braintrust | ホスト型クラウド | Starter は無料でプロジェクトあたり人手レビューのスコア 1 つ。Pro は月 249 ドル。オンプレミス展開は Enterprise | 割り当てられたレビュアー、ブラインドレビュー、expected に書き込まれるスコア |
| Label Studio | ウェブアプリ | Apache-2.0 の Community Edition。トレースレビューのテンプレートには Enterprise が必要 | ノートブックで取得した Langfuse や Braintrust のトレースに対する、ターンごとおよびトレースごとの合格か不合格か |
| Argilla | Docker または Hugging Face Space 上のウェブアプリ | Apache-2.0 | ChatField によるチャットレコード。レコードごとの最小回答数 |
| Potato | 自分のマシン上の Python ウェブサーバー | GPL-3.0-or-later、無料 | トレースごとに複数のブラインドレビュアー、一致度、ステップ単位のスキーム、Langfuse や LangSmith に書き戻されるスコア |
Argilla のリポジトリは、元の作者が離れており、プロジェクトはバグ修正とパッチを公開するが、新機能は公開しないと述べています。ホスト型プラットフォームは、すでにそのいずれかのプラットフォームで本番のトラフィックをトレースしているチームに適しています。ホスト型プラットフォームでは、レビュアーは、エンジニアがトレースをデバッグするのと同じツールでトレースを開きます。
Humanloop の移行ガイドは、Humanloop のプラットフォームが 2025 年 9 月 8 日に終了し、その日以降プラットフォームとすべてのデータに永久にアクセスできなくなると述べています。2025 年 8 月 13 日に、TechCrunch は、共同創業者とチームの大半が Anthropic に加わったと報じ、Anthropic の広報担当者は、Anthropic が Humanloop の資産や知的財産を取得していないと述べました。自動評価と人手レビューを一つのホスト型製品で行うには、最も近いホスト型の代替は Langfuse、LangSmith、Braintrust、Arize です。すべてのトレースでブラインドレビュアー間の一致度が必要なチームは、この四つのプラットフォームのどれかと並べて Potato を追加できます。
トレースごとのレビュアーと一致度
トレースごとに一人のレビュアーでは、そのラベルを確認する手段がなく、二人のブラインドレビュアーがいれば、どのトレースが曖昧か、またルーブリックが明確かどうかがわかります。LangSmith のキューは実行ごとのレビュアー数を設定し、LangSmith のレビュアーは互いのフィードバックを見られません。Braintrust は、レビュアーが送信するまで他のレビュアーのスコアを隠します。Require all scores をオンにすると、Braintrust の行は、割り当てられたすべてのレビュアーがその行を採点した時点で完了します。Phoenix は、スパン上のすべてのアノテーションを作成者付きで一覧表示します。Langfuse のフォーラムでは、2025 年 11 月 7 日に、キュー内で二人が同じトレースを独立してアノテーションすることがまだできないとユーザーが報告しました。ディスカッションでの回避策は、レビュアーごとに一つのスコア設定を使うことです。最新のコメントの日付は 2026 年 4 月 22 日で、今も回避策を述べています。Langfuse のスコア分析は、任意の二つのスコア名の間の Cohen のカッパを、二つずつ計算します。
Potato では、num_annotators_per_item が各トレースを見るレビュアーの人数を設定します。/admin/iaa ダッシュボードは、カテゴリのスキームについて Cohen のカッパ、Fleiss のカッパ、Krippendorff のアルファを、順序のスキームについて重み付きカッパを報告し、/admin/api/step_agreement はステップ単位のラベルの一致度を報告します。裁定者は /adjudicate ページで不一致を解決し、裁定と不一致の解消は、裁定をいつ行うべきかを扱います。アノテーター間一致度の解説は、係数の選び方を扱います。
ラベルをトレースツールと評価データセットに戻す
レビュー済みのラベルが役に立つのは、次のバージョンをテストする評価データセットに届いてからです。LangSmith のレビュアーは、キューから実行またはスレッド全体をデータセットに追加します。Langfuse は、元のトレースへのリンク付きでオブザベーションをデータセットに追加し、Langfuse のスコア API は、修正された出力を CORRECTION タイプのスコアとして返します。Phoenix はスパンのアノテーションをデータセットに伝播し、Braintrust はレビュー済みのログからデータセットを構築します。
Potato は、三つの方法でラベルを返します。
- 元のトレースへのスコア。
trace_ingestion.writebackを使うと、Langfuse のポーラーまたは LangSmith のウェブフックから届いたトレースは、min_annotators人が回答した時点で、スキームごとに一つのスコアを受け取ります。radioの回答は多数派のラベルで、multiselectの回答は、半数を超えるレビュアーが選んだクラスの集合です。コメントとメタデータには、アノテーターの人数と、一致したレビュアーのペアの割合が記録されます。同票の場合は、裁定を待ちます。process_rewardのようなステップ単位のスキームは、各 Langfuse のオブザベーションにもスコアを付けます。 - 学習データ。
trajectory_correctionエクスポーターは、SFT/DPO のためのトラジェクトリ編集で説明されているとおり、修正された各トレースを SFT レコード(prompt、completion)と DPO レコード(prompt、chosen、rejected)として書き出します。 - ファイルとデータセット。 Potato は、CSV、JSONL、Parquet、Hugging Face のデータセット、
agent_evalにエクスポートします。agent_evalエクスポートは、トレースごとにスコアを集計します。Potato のデータセットは、バージョン管理された評価セットを保持します。
Langfuse から供給される Potato のレビューキュー
以下の設定では、Potato は 60 秒ごとに Langfuse のプロジェクトをポーリングし、各トレースを二人のレビュアーに渡します。レビュアーは三つの質問に答え、二人のレビュアーがともに回答すると、Potato は各回答を、review.outcome、review.failure_mode、review.step_correctness という名前の Langfuse のスコアとしてトレースに送り返します。この設定は完全で、python -m potato.validate_cli --strict に合格します。
annotation_task_name: Support agent trace review, two reviewers per trace
task_dir: .
output_annotation_dir: annotation_output/
data_files:
- data/traces.jsonl
item_properties:
id_key: id
text_key: task_description
user_config:
allow_all_users: true
users: []
# Pull new traces from Langfuse every 60 seconds, and send each merged
# answer back to the trace as a Langfuse score once two people have judged it
trace_ingestion:
enabled: true
api_key: change-me
sources:
- type: langfuse
api_url: https://cloud.langfuse.com
public_key: pk-lf-...
secret_key: sk-lf-...
poll_interval: 60
writeback:
trigger: fully_annotated
min_annotators: 2
score_prefix: review
# Two reviewers per trace, so agreement can be measured on every trace
num_annotators_per_item: 2
instance_display:
fields:
- key: steps
type: agent_trace
label: Agent trace
annotation_schemes:
- annotation_type: radio
name: outcome
description: Did the agent resolve the customer's request?
labels: [pass, fail]
- annotation_type: multiselect
name: failure_mode
description: Which problems does the trace show?
labels: [wrong_tool, hallucinated_fact, ignored_instruction, unsafe_action, none]
- annotation_type: process_reward
name: step_correctness
description: Mark the first step that went wrong.
steps_key: steps
mode: first_errorサーバーは potato start config.yaml -p 8000 で起動します。書き戻しが届くのは、Langfuse または LangSmith から届いたトレースだけで、data/traces.jsonl から読み込んだトレースは Potato の中に留まります。ファイルとしてエクスポートされたトレースは、先にエクスポートを変換してください。
python -m potato.trace_converter --input langfuse_traces.json --output data/traces.jsonl --input-format langfusePotato は、api_key を使ってウェブフックのエンドポイントを保護します。書き戻しは、LANGFUSE_PUBLIC_KEY と LANGFUSE_SECRET_KEY の両方の変数が設定されている場合はそこから、そうでない場合は langfuse ソースから Langfuse のキーを読み込みます。curl -H "X-API-Key: $KEY" http://localhost:8000/admin/api/trace_writeback は、保留中、送信済み、失敗、保留扱いのスコアの数を表示します。
レビューキューとしての Potato の限界
- 本番のトレース機能なし。 Potato はトレースツールからトレースを読み込み、トレースツールの代わりにはなりません。
- レビュアーの提供なし。 自分のチームを招待するか、クラウドソーシング連携で説明されているとおり、Prolific でレビュアーを募集してください。
- 二つのサービスへの書き戻し。 スコアの送信先は Langfuse と LangSmith のみです。テキストの回答は決して送信されず、LangSmith が受け取るのはトレースレベルのフィードバックのみです。Potato のドキュメントは、LangSmith への配信は LangSmith が公開している API に従っており、サービスに対して実行されたことはないと述べています。
- ポーリングは Langfuse のみ。 LangSmith の実行は、ウェブフックまたはエクスポートで届きます。
よくある質問
エージェントと LLM のトレースのアノテーションキューとは何ですか?
アノテーションキューは、チームが人間のラベル付けのために取り置いたトレース、スパン、会話のリストで、各アイテムに対して決まった質問のセットがあります。レビュアーは次のアイテムを開き、質問に答え、アイテムを完了としてマークします。Langfuse、LangSmith、Arize AX は、この機能をアノテーションキューと呼んでいます。Potato は同じワークフローを自分のサーバーで実行し、トレースごとに複数のレビュアーを置き、一致度を報告します。
どのツールが LLM トレースの人手レビューとラベル付けに対応していますか?
Langfuse、LangSmith、Braintrust、Arize Phoenix、Arize AX は、トレースツールの内部で、人間のラベルをトレースに付けます。Label Studio Enterprise では、レビュアーはテンプレートを通じて Langfuse と Braintrust のトレースにラベルを付けます。Potato は、Langfuse、LangSmith、OpenTelemetry、およびほかの 12 の形式のトレースをレビュアーに表示し、レビュアー間の一致度を測定し、結果を Langfuse または LangSmith に送り返します。
評価と人手レビューのための Humanloop の代替は何ですか?
Humanloop のホスト型の代替には、Langfuse、LangSmith、Braintrust、Arize があります。この四つのプラットフォームはそれぞれ、トレース、自動評価、人手レビューを組み合わせており、Langfuse は MIT ライセンスで、セルフホストは無料です。Humanloop のプラットフォームは 2025 年 9 月 8 日に終了しました。Potato は、人手レビューの部分のための無料のセルフホスト型の代替であり、ブラインドレビュアー間の一致度と、Langfuse や LangSmith に書き戻されるスコアを備えています。
関連資料
- AI エージェント評価ツールの比較とLLM の人手評価と選好データのツールの比較
- エージェント評価における Potato と LangSmith、Langfuse の比較
- AI エージェントの評価方法とエージェントのトラジェクトリのアノテーション
- Potato でのエージェント評価とPotato での LLM 評価
- LLM ジャッジと人間のアノテーターの一致度の測り方
- トレースのスコア書き戻し。Potato のソースドキュメント
- Potato で Langfuse のトレースをレビューする。ポーラーの設定、エクスポート形式、書き戻されるスコアについて
参考文献
- Zheng, L., Chiang, W.-L., Sheng, Y., et al. (2023). Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. NeurIPS 2023 Datasets and Benchmarks. https://arxiv.org/abs/2306.05685