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エージェントが失敗するパターンは運用中に新たに出てきます。固定テストセットのスコアが上がっても、実際のユーザー満足度は下がっていることがあります。
参考・出典
- AI Agent Evaluation Metrics | DeepEval — DeepEval公式ドキュメント(参照日: 2026-04-11)
- Agent Evaluation Framework 2026 | Galileo — Galileo AI公式ブログ(参照日: 2026-04-11)
- AI agent evaluation: A practical framework | Braintrust — Braintrust公式記事(参照日: 2026-04-11)
- Evaluating AI agents: Real-world lessons from Amazon | AWS — AWS Machine Learning Blog(参照日: 2026-04-11)
まとめ:今日から始める3つのアクション
- 今日やること: 現在運用中のエージェントのツール呼び出し回数(1タスクあたり)を確認する。Langfuseのフリープランで即座に可視化できます
- 今週中: タスク完了率の「成功基準」を状態ベースで定義し、DeepEvalで5〜10本のテストケースを作成する
- 今月中: GitHub Actionsに評価パイプラインを組み込み、週次でスコアをモニタリングする体制を作る
あわせて読みたい:
- Langfuse完全ガイド — AIエージェントの観測・トレーシング・評価の実装
- AIエージェントツール比較ガイド — 主要フレームワークの選び方
AIエージェントの評価フレームワーク構築や、組織へのAI導入支援については Uravationのお問い合わせフォーム からご相談ください。
この記事はAIgent Lab編集部がお届けしました。