学べること
このガイドでは、以下を学びます:- エージェントをターンとツール呼び出しの会話としてトレースする方法。
- LLM ジャッジモデルで各 run をスコアリングする方法。
- 2つのエージェントバージョンを並べて比較する方法。
- マルチターン会話でターンをスコアリングする方法。
- 単一のスコアをスコアカードに拡張する方法。
このチュートリアルでは、エージェントは Claude Sonnet で実行され、ジャッジモデルは Claude Opus で実行されます。評価対象のモデルとは異なる、より強力なモデルでグレーディングすることは、良い評価のプラクティスです。
前提条件
このチュートリアルには、以下が必要です。- CoreWeave Forge アカウント。
- Python 3.10 以降。
- 必須パッケージのインストール:
pip install weave anthropic。 - 環境変数
ANTHROPIC_API_KEYに設定された Anthropic APIキー。
エージェントの構築とトレース
この例では、エージェントはlookup_order と issue_refund の2つのツールを使用し、30日以内の返金のみを許可するポリシーに従って返金リクエストを確認し、対応します。 ツール定義、モデルのループ、メッセージ変換を含むエージェント全体は、付属のノートブックにあります。このセクションでは、Weave 固有の部分に焦点を当てます。
まず、CoreWeave Forge のチームと project を指定して Weave を初期化します。[YOUR-TEAM] と [YOUR-PROJECT] をご自身の値に置き換えてください。
implicitly_patch_integrations) を有効にしたままにすると、会話が Conversation スパンとして一度、トレースされる Op としてもう一度、計二度トレースされます。
weave.conversation を使用してエージェントをトレースします。会話にはターンが含まれ、各ターンにはモデルの Call とツール呼び出しが含まれます:
convo_idとnew_id():UUID など、各会話の一意の ID です。user_message:そのターンのユーザーの入力です。anthropic_client:初期化済みの Anthropic クライアントです。response_tool_callsとrun_tool():モデルがリクエストしたツール呼び出しと、それらを実行する関数です。run_agent_turn():エージェントループ全体です。最終的な返信と、ジャッジモデルが読むための軌跡 (ターン、ツール呼び出し、結果) のプレーンテキストのトランスクリプトを返します。judge_task_completion():次のセクションで導入される LLM ジャッジモデルです。
LLM ジャッジモデルでエージェントを採点する
Scorer はジャッジモデルを使用して、タスクの成功基準に基づき、エージェントがタスクをどの程度完了したかを評価します。丁寧に聞こえる返答ではなく、正しい結果に報酬を与えます。この例のスコアはタスク完了、つまりエージェントが目標を達成したかどうかを表します。 このセクションでは、いくつかのタスクを定義し、ジャッジモデルを実装して、それらのタスクに対して評価を実行します。 小規模なタスク群を定義します:success_criteria に照らして transcript (run_agent_turn が返すプレーンテキストの軌跡) を読み取り、{"passed", "reason"} の dict を返す LLM ジャッジモデルです:
EvaluationLogger で記録します。log_prediction(...) 内でエージェントを実行して、トレースした会話が評価の行にリンクされるようにします:
passed 列にジャッジモデルの判定が表示されます。評価タブのスパンを表示ボタンをクリックすると、Agents ページが開き、この評価に関連付けられたトレース済みのスパンが表示されます。
評価を整理して比較する
エージェントを改善するには、そのアプリケーションを変更し、変更が有効だったかを確認します。システムプロンプト、ツール、制御フロー、基盤となる LLM は、すべてモデルのバージョンの一部とみなされます。2 つのバージョンを比較するには、変更したエージェントに新しいバージョンのラベルを付けて、評価を再実行します。 別のmodel ラベルで再実行します:
マルチターンの会話をスコアリングする
実際の会話は複数のターンにわたり、優れたエージェントはコンテキストを引き継ぎます。ユーザーがすでに伝えた注文 ID を再度尋ねるべきではありません。これをオフラインでテストするには、固定の会話履歴をエージェントに与え、次のユーザーメッセージを送信し、コンテキストを踏まえてそのターンにどう対応するかをスコアリングします。 データセットの各行は、このようなシナリオを 1 つ表します。つまり、それまでのターンと、エージェントが回答すべき次のメッセージです。以下では注文 ID が履歴にのみ含まれているため、優れたエージェントは再度尋ねるのではなく、その ID を再利用します。この手法では、固定された履歴に対して次のターンにスコアを付けます。これは実用的なオフラインの方法です。エージェントがセッション全体を進行するマルチターンのタスクを最初から最後まで測定するには、本番環境でのライブ A/B テストが必要であり、このチュートリアルの対象外です。
Scorer を拡張する
実際のエージェントを評価するには、2つの側面をカバーするスコアのセットが必要です:- 機能的: ツール呼び出しの正確性、指示に従うこと、ツールエラーからの回復。
- 非機能的: 安全性と拒否動作、レイテンシー、コスト、幻覚によるツールの使用。
pred.log_score(...) 呼び出しとして追加します。Weave が提供する Scorer のタイプ (既製およびクラスベースの Scorer を含む) および独自の作成に関するガイダンスについては、Scoring overview を参照してください。
次のステップ
エージェントを会話としてトレースし、シングルターンとマルチターンのやり取りのタスク完了をスコア化し、バージョンを比較しました。これらはすべてエージェントのトランスクリプトに紐付けられています。- このチュートリアルの実行可能な完全版を付属のノートブックで実行してください。
- 別のサービスで実行されるエージェントや独自の OTel インストルメンテーションを使用するエージェントを含め、エージェントのトレースを評価結果に紐付けるその他の方法については、エージェントのトレースを評価に紐付けるをご覧ください。