ベンチマーク

AIエージェント評価フレームワーク完全ガイド

この記事の結論

AIエージェントの品質評価方法。完了率・ステップ効率・コスト効率の4層メトリクス。

AIエージェントを本番導入してしばらくすると、必ずこの問いに直面します。「このエージェント、ちゃんと機能しているの?」

タスクは一応こなしているけど、精度はどのくらいか。無駄な処理をしていないか。コストパフォーマンスは出ているか——これらを感覚ではなく数字で把握しないと、エージェントの改善も判断もできません。

この記事では、AIエージェントの品質を正確に測るための評価フレームワークを解説します。主要メトリクスの定義から、DeepEval・Langfuse・Braintrustを使った実装例まで、2026年4月時点の実践的な知識をコード付きで全公開します。

AIエージェントの評価は、LLM単体の評価とは根本的に異なります。単一の入出力ペアではなく、複数のステップ・ツール呼び出し・状態遷移を含む「軌跡(Trajectory)」全体を評価する必要があります。

評価層 主要指標 何を測るか 測定ツール
タスクレベル タスク完了率(Success Rate) 最終的な目標を達成したか DeepEval、Braintrust
実行効率 ステップ効率(Step Efficiency) 無駄なツール呼び出しがないか Langfuse、Weights & Biases
ツール精度 ツール使用精度(Tool Correctness) 正しいツールを正確に呼び出したか DeepEval
コスト効率 トークン効率・レイテンシ コスト対効果が出ているか Langfuse、Helicone

ツール選択の比較についてはAIエージェントツール比較ガイドも参照してください。

主要メトリクスの定義と計算方法

1. タスク完了率(Task Completion Rate)

「ユーザーが要求した意図的なタスクをエージェントが成功裏に達成したかどうか」を測る最重要指標です。ただし、単純な二値(成功/失敗)ではなく、部分的な達成度もスコア化します。

# DeepEvalを使ったタスク完了率の測定
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, deepeval>=0.21.0

from deepeval import evaluate
from deepeval.metrics import TaskCompletionMetric
from deepeval.test_case import LLMTestCase, ConversationalTestCase

# テストケースを定義
test_case = ConversationalTestCase(
    messages=[
        # エージェントの実行トレース
        {"role": "user", "content": "先月の売上レポートをまとめて、異常値があれば教えて"},
        {"role": "assistant", "content": "売上データを分析します...",
         "tool_calls": [{"name": "get_sales_data", "args": {"period": "2026-03"}}]},
        {"role": "tool", "content": '{"total": 1250000, "anomalies": [{"date": "2026-03-15", "amount": 850000}]}'},
        {"role": "assistant", "content": "3月の売上合計は125万円です。3/15に85万円の異常値を検出しました。"},
    ],
    expected_outcome="先月の売上合計と異常値の報告"
)

# メトリクスを設定して評価
metric = TaskCompletionMetric(
    threshold=0.7,  # 70%以上で合格
    model="gpt-4o",  # LLMジャッジに使うモデル
    verbose_mode=True
)

evaluate([test_case], [metric])

ポイント: タスク完了率を有効な指標にするには、まず「何をもって成功とするか」を明確に定義することが不可欠です。曖昧な成功基準では、スコアが意味をなしません。

2. ステップ効率(Step Efficiency)

「不必要なステップなくタスクを完了するか」を測定します。冗長なツール呼び出し、不要なループ、重複した処理を検出します。

# ステップ効率の手動計算例
# 動作環境: Python 3.11+

def calculate_step_efficiency(actual_steps: list, optimal_steps: list) -> dict:
    """
    actual_steps: エージェントが実際に行ったステップ一覧
    optimal_steps: 理論上の最短ステップ一覧
    """
    actual_count = len(actual_steps)
    optimal_count = len(optimal_steps)

    # 重複ツール呼び出しを検出
    tool_calls = [s for s in actual_steps if s.get("type") == "tool_call"]
    tool_names = [t["name"] for t in tool_calls]
    duplicate_count = actual_count - len(set(tool_names))

    efficiency_score = optimal_count / actual_count if actual_count > 0 else 0

    return {
        "score": round(efficiency_score, 3),
        "actual_steps": actual_count,
        "optimal_steps": optimal_count,
        "duplicate_tool_calls": duplicate_count,
        "verdict": "PASS" if efficiency_score >= 0.7 else "FAIL"
    }

# 使用例
result = calculate_step_efficiency(
    actual_steps=[
        {"type": "tool_call", "name": "get_data"},
        {"type": "tool_call", "name": "get_data"},  # 重複
        {"type": "tool_call", "name": "analyze"},
        {"type": "response", "name": "answer"}
    ],
    optimal_steps=[
        {"type": "tool_call", "name": "get_data"},
        {"type": "tool_call", "name": "analyze"},
        {"type": "response", "name": "answer"}
    ]
)
print(result)
# {'score': 0.75, 'actual_steps': 4, 'optimal_steps': 3,
#  'duplicate_tool_calls': 1, 'verdict': 'PASS'}

3. コスト効率の継続的追跡(Langfuse実装例)

Langfuseはオープンソースのエージェント観測プラットフォームで、トークン消費・レイテンシ・コストをトレースレベルで記録できます。

# Langfuseを使ったコスト効率トラッキング
# 動作環境: Python 3.11+, langfuse>=2.0.0
# pip install langfuse openai
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。

from langfuse import Langfuse
from langfuse.decorators import observe, langfuse_context
import os

langfuse = Langfuse(
    public_key=os.environ["LANGFUSE_PUBLIC_KEY"],
    secret_key=os.environ["LANGFUSE_SECRET_KEY"],
    host="https://cloud.langfuse.com"
)

@observe(name="sales-analysis-agent")
def run_sales_agent(user_query: str) -> str:
    """売上分析エージェントの実行(コスト追跡付き)"""

    # スパンでツール呼び出しを記録
    with langfuse_context.create_span(name="fetch-sales-data") as span:
        # 実際のツール呼び出し
        sales_data = {"total": 1250000, "period": "2026-03"}
        span.update(
            input={"query": user_query},
            output=sales_data,
            metadata={"source": "sales-db", "query_time_ms": 45}
        )

    # LLM呼び出しのコスト記録
    langfuse_context.update_current_observation(
        usage={
            "input": 850,    # 入力トークン数
            "output": 320,   # 出力トークン数
            "unit": "TOKENS"
        }
    )

    return f"3月の売上: {sales_data['total']:,}円"

# 実行
result = run_sales_agent("先月の売上を教えて")

# Langfuseダッシュボードでコスト・レイテンシをリアルタイム確認可能

評価ツールの比較:用途別選び方

ツール ライセンス 得意な評価 月額コスト目安 日本語対応
DeepEval(Confident AI) OSS / クラウドあり メトリクス定義・LLMジャッジ 無料〜$49.99/席/月 △(英語メイン)
Langfuse OSS / クラウドあり トレーシング・コスト追跡 無料〜$199/月(クラウド版) ○(UIは英語)
Braintrust クラウド 実験管理・A/Bテスト $0〜$500 △(英語メイン)
Weights & Biases クラウド MLOps統合・チーム評価 無料〜エンタープライズ

料金情報の最終確認: 2026-04-11

選定の目安: 小規模チームの評価基盤スタートにはLangfuse(OSS版を自己ホスト可)が最適です。実験管理・A/Bテストが必要になったらBraintrustを追加する段階的な構成をおすすめします。

実践:継続的評価パイプラインの構築

一回限りの評価ではなく、継続的にエージェントの品質を監視するパイプラインを構築します。

# CI/CDに組み込む評価スイート
# 動作環境: Python 3.11+, deepeval>=0.21.0, pytest>=7.0
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。

import pytest
from deepeval import assert_test
from deepeval.metrics import (
    TaskCompletionMetric,
    ToolCorrectnessMetric,
    ContextualRelevancyMetric
)
from deepeval.test_case import ConversationalTestCase

# テストケースを定義(実際の運用データから生成)
TEST_CASES = [
    {
        "input": "顧客ID 12345の契約情報を調べて",
        "expected_outcome": "顧客12345の契約情報の取得と報告",
        "expected_tools": ["get_customer_contract"],
    },
    {
        "input": "先週の問い合わせ件数を集計して",
        "expected_outcome": "先週の問い合わせ件数の集計結果",
        "expected_tools": ["get_inquiry_stats"],
    },
]

@pytest.mark.parametrize("case", TEST_CASES)
def test_agent_quality(case, run_agent):
    """エージェント品質の自動テスト"""

    # エージェントを実行(run_agentはフィクスチャ)
    trace = run_agent(case["input"])

    # テストケースを構築
    test_case = ConversationalTestCase(
        messages=trace["messages"],
        expected_outcome=case["expected_outcome"]
    )

    # 3つのメトリクスで評価
    assert_test(test_case, [
        TaskCompletionMetric(threshold=0.7, model="gpt-4o"),
        ToolCorrectnessMetric(
            expected_tools=case["expected_tools"],
            threshold=0.9  # ツール精度は高めに設定
        ),
    ])

# GitHub Actions設定例(.github/workflows/agent-eval.yml)
# on:
#   push:
#     branches: [main]
#   schedule:
#     - cron: '0 9 * * 1'  # 毎週月曜9時
# jobs:
#   evaluate:
#     runs-on: ubuntu-latest
#     steps:
#       - uses: actions/checkout@v4
#       - run: pip install deepeval langfuse
#       - run: deepeval test run tests/test_agent_quality.py

評価結果の読み方と改善サイクル

スコア範囲 判定 推奨アクション
0.9以上 優秀 現状維持。より難しいテストケースを追加
0.7〜0.9 合格 失敗ケースのトレースを分析し、プロンプト改善
0.5〜0.7 要改善 ツール定義・システムプロンプトの抜本的見直し
0.5未満 深刻 エージェントアーキテクチャの再設計を検討

【要注意】よくある評価の失敗パターン

失敗1:成功基準が曖昧なまま評価を始める

❌ よくある間違い: 「ちゃんとできていたらOK」という主観的な判断

⭕ 正しいアプローチ: タスクを状態(State)で定義する

# 曖昧な成功基準(NG)
def is_success_vague(response: str) -> bool:
    return "完了" in response  # 「完了」という文字列があればOKは危険

# 状態ベースの成功基準(OK)
def is_success_state_based(state: dict) -> bool:
    return (
        state.get("customer_id") is not None  # 顧客IDを取得した
        and state.get("contract_data") is not None  # 契約データを取得した
        and len(state.get("response_text", "")) > 50  # 十分な説明がある
    )

なぜ重要か: 状態ベースの成功基準は再現性があり、テスト自動化に組み込めます。文字列マッチングは簡単に欺けてしまいます。

失敗2:タスク完了率だけを見てステップ効率を無視する

❌ よくある間違い: 「完了率90%だから優秀」と判断する

⭕ 正しいアプローチ: 完了率とステップ効率を必ずセットで確認する

# 完了率は高いがステップ効率が低い例
agent_stats = {
    "task_completion_rate": 0.92,  # 92%完了 → 一見優秀
    "step_efficiency": 0.41,        # ← 実は無駄なループが多数
    "avg_tool_calls_per_task": 23,  # ← 1タスクに23回もツール呼び出し
    "avg_cost_per_task_jpy": 45.8   # ← 1タスク45.8円(想定の3倍)
}
print("このエージェントは完了率は高いが、コストが想定の3倍かかっています")

なぜ重要か: 完了率90%でも、1タスクあたり20回以上ツールを呼び出していたら本番コストが膨大になります。ステップ効率とコストを同時に監視してください。

失敗3:評価データセットを一度作ったら更新しない

❌ よくある間違い: リリース時に作ったテストケースを永続的に使い続ける

⭕ 正しいアプローチ: 毎月、実際の失敗ケースからテストを追加する

なぜ重要か: AIエージェントが失敗するパターンは運用中に新たに出てきます。固定テストセットのスコアが上がっても、実際のユーザー満足度は下がっていることがあります。

参考・出典

まとめ:今日から始める3つのアクション

  1. 今日やること: 現在運用中のエージェントのツール呼び出し回数(1タスクあたり)を確認する。Langfuseのフリープランで即座に可視化できます
  2. 今週中: タスク完了率の「成功基準」を状態ベースで定義し、DeepEvalで5〜10本のテストケースを作成する
  3. 今月中: GitHub Actionsに評価パイプラインを組み込み、週次でスコアをモニタリングする体制を作る

あわせて読みたい:


AIエージェントの評価フレームワーク構築や、組織へのAI導入支援については Uravationのお問い合わせフォーム からご相談ください。

この記事はAIgent Lab編集部がお届けしました。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年4月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事