
2025/07/30(水)
AIエージェントを構築することと、そのパフォーマンスを正確に把握することは別物です。
あなたが作ったエージェントは入力やツールを受け取り、処理を行い、応答を生成します。意思決定、情報検索、タスクの自動実行、またはその全てを行うかもしれません。しかし、ここで重要な疑問が生まれます。
「このエージェントは本当に効果的に動作しているのか?そして、それをどうやって確認すればよいのか?」
目次
✅ AIエージェントを開発している、または開発を検討している方
✅ エージェントの動作を詳細に把握したい方
✅ 定量的な評価でエージェントを改善したい方
✅ Arize Phoenixの導入を検討している方
トレーシングは、エージェントが何をしているかを段階的に可視化する技術です。具体的には以下を追跡できます:
評価は、エージェントのパフォーマンスを測定し、機能するだけでなく実際に効果的かどうかを確認するプロセスです。
評価で確認できること:
Arize Phoenixは、リアルタイムでエージェントの決定をトレース、評価、デバッグするための統合プラットフォームです。一箇所ですべての作業を完結できるため、効率的にエージェントを改善できます。
トレーシングや評価って聞くと、なんだかとても専門的で難しそうなんですが、実際にビジネスで使う価値ってあるんでしょうか?
実はビジネスにとって非常に実用的です。例えば、顧客サポートのAIチャットボットが「なぜその回答をしたのか」を追跡できれば、問題が起きた時にすぐに原因を特定できます。また、営業支援AIが「どの情報を参考にして提案したか」が分かれば、提案の精度を向上させることができます。エラーの特定、コスト削減、品質向上に直結するため、AIを本格的にビジネスで活用するなら必須の機能です。
まずは、評価対象となるエージェントを準備しましょう。独自のエージェントをお持ちの方は、そちらをご利用いただいても構いません。
pip install smolagents
使用するクラスとツールを読み込みます。
from smolagents import (
CodeAgent,
DuckDuckGoSearchTool,
VisitWebpageTool,
HfApiModel,
)
Hugging Face Inference(Serverless Inference API) を使用してモデルインスタンスを作成します。
# 基本的な使用方法
hf_model = HfApiModel()
# 推奨:特定のモデルを指定する場合
# hf_model = HfApiModel(model_id="meta-llama/Llama-3.3-70B-Instruct")
# Hugging Face APIトークンが必要な場合
# hf_model = HfApiModel(token="your_hf_token_here")
agent = CodeAgent(
tools=[DuckDuckGoSearchTool(), VisitWebpageTool()],
model=hf_model,
add_base_tools=True
)
実際に以下のような質問をして、エージェントを動かしてみましょう。
agent.run("株価データの取得方法を調査し、利用可能なデータソースから情報を収集して線グラフとして可視化する方法を教えてください")
エージェントが実行する処理:
コードを見ると、いろいろなライブラリやツールが出てきますが、プログラミング初心者でも本当に作れるんでしょうか?
記事のコードは基本的なコピー&ペーストで動作するように設計されています。完全な初心者の場合は、まずPythonの基本を1-2週間学習してから取り組むことをお勧めします。ChatGPTなどに質問しながら作れば、初心者でも早期に習得できます!
エージェントが動作を開始したら、次の課題はその内部ワークフローを理解することです。
pip install smolagents openinference-instrumentation-smolagents arize-phoenix arize-phoenix-otel
ローカルマシンでPhoenixのインスタンスを起動します。
phoenix serve
その他のホスティングオプション:
Phoenix 5.0以降で推奨されている起動方法:phoenix serve
以下でも使用可能です:python -m phoenix.server.main serve
Phoenixインスタンスを指定してトレーサープロバイダーを登録します。
from phoenix.otel import register
from openinference.instrumentation.smolagents import SmolagentsInstrumentor
tracer_provider = register(project_name="my-smolagents-app") # OTELトレースを取得するトレーサープロバイダーを作成
SmolagentsInstrumentor().instrument(tracer_provider=tracer_provider) # smolagentsの呼び出しを自動的にトレースとして取得
これで、smolagentsへのすべての呼び出しがPhoenixインスタンスに送信されます。
シンプルなクエリでテストしてみましょう。
agent.run("What time is it in Tokyo right now?")
OpenInferenceとSmolAgentsがセットアップされると、すべてのエージェント呼び出しが自動的にPhoenixでトレースされます。
エージェントが稼働し、その実行が監視できるようになったら、次はパフォーマンス評価です。
評価により、エージェントがどの程度効果的に情報を取得、処理、提示しているかを判断できます。
主な評価タイプ:
さまざまな評価技術について詳しく知りたい方は、Phoenix公式ドキュメントをご確認ください。
この例では、エージェントが使用するDuckDuckGo検索ツールの評価に焦点を当てます。Large Language Model(LLM)を判定者として使用し、検索結果の関連性を測定します。今回はOpenAIのGPT-4oを使用します。
評価機能を使用するために、必要なライブラリをインストールします。
pip install arize-phoenix-evals openai
LLM-as-a-judge手法とは:言語モデルを活用して応答を分類・スコア化する評価手法
DuckDuckGoがどの程度効果的に情報を取得しているかを評価するため、まずツールが呼び出された実行トレースを抽出します。
from phoenix.trace.dsl import SpanQuery
import phoenix as px
import json
query = SpanQuery().where(
"name == 'DuckDuckGoSearchTool'",
).select(
input="input.value", # RAG_RELEVANCY_PROMPT_TEMPLATEで動作するためにinputという名前にする必要があります
reference="output.value", # RAG_RELEVANCY_PROMPT_TEMPLATEで動作するためにreferenceという名前にする必要があります
)
# Phoenix Clientがこのクエリを受け取り、データフレームを返します
tool_spans = px.Client().query_spans(query, project_name="my-smolagents-app")
tool_spans["input"] = tool_spans["input"].apply(lambda x: json.loads(x).get("kwargs", {}).get("query", ""))
tool_spans.head()
RAG関連性プロンプトテンプレートを読み込み、LLMが検索結果の関連性を分類できるようにします。
from phoenix.evals import (
RAG_RELEVANCY_PROMPT_RAILS_MAP,
RAG_RELEVANCY_PROMPT_TEMPLATE,
OpenAIModel,
llm_classify
)
import nest_asyncio
nest_asyncio.apply()
print(RAG_RELEVANCY_PROMPT_TEMPLATE)
GPT-4oを判定者として使用して評価を実行します。
from phoenix.evals import (
llm_classify,
OpenAIModel,
RAG_RELEVANCY_PROMPT_TEMPLATE,
)
eval_model = OpenAIModel(model="gpt-4o")
eval_results = llm_classify(
dataframe=tool_spans,
model=eval_model,
template=RAG_RELEVANCY_PROMPT_TEMPLATE,
rails=["relevant", "unrelated"],
concurrency=10,
provide_explanation=True,
)
eval_results["score"] = eval_results["explanation"].apply(lambda x: 1 if "relevant" in x else 0)
ここで実行されている処理:
結果を確認するには:
eval_results.head()
from phoenix.trace import SpanEvaluations
px.Client().log_evaluations(SpanEvaluations(eval_name="DuckDuckGoSearchTool Relevancy", dataframe=eval_results))
LLM-as-a-judge手法って、要するにAIがAIを評価するってことですよね?それって本当に信頼できるんでしょうか?
確かにAIがAIを評価する手法ですが、適切に設計すれば非常に有効です。重要なのは評価基準を明確に定義することです。例えば「関連性」を評価する場合、具体的な判断基準をプロンプトで詳細に指示します。また、複数の評価者(異なるLLM)を使って結果を比較したり、人間の評価と定期的に照らし合わせることで信頼性を確保できます。コスト効率と スケーラビリティの観点では、人間による評価よりもはるかに優れています。
カスタマイズのポイント:
この設定により、エージェント内のDuckDuckGo検索ツールの効果を体系的に評価できます。LLM-as-a-judge手法を使用することで、エージェントが正確で関連性の高い情報を取得し、より良いパフォーマンスを実現できることを確認できます。
任意の評価は、この手順に従って簡単にセットアップできます。RAG_RELEVANCY_PROMPT_TEMPLATEを、あなたのニーズに合った別のプロンプトテンプレートに置き換えるだけです。
Phoenix では、以下のような事前作成・検証済みの評価テンプレートを豊富に提供しています。
完全なリストとあなたのエージェントに最適なテンプレートについては、Phoenix公式ドキュメントをご確認ください。
AIエージェントの構築は、始まりに過ぎません。真の知能は、内部で何が起こっているかを正確に把握することから生まれます。
✅ トレーシングによりエージェントの動作を詳細に可視化
✅ 評価によりパフォーマンスを定量的に測定
✅ Arize Phoenixで統合的な分析・最適化環境を構築
🚀 あなたのエージェントも、適切な評価と継続的な改善により、より高い精度と効率性を実現できるはずです。まずは一歩目から始めてみましょう!
生成AI、LLM、NLPを専門とするAI/ML開発者兼MLOpsエンジニア。
生成AI、大規模言語モデル(LLM)、自然言語処理(NLP)を専門とするAI/ML開発者兼MLOpsエンジニアで、5年以上の実務経験を有している。クラウドプラットフォームや最先端のフレームワークを活用し、実運用レベルのAIアプリケーションの構築とデプロイに精通している。AI技術の発展と、グローバルなコミュニティへの知識共有に情熱を注いでいる。
この記事は著者の許可を得て公開しています。
元記事:Evaluating AI Agents with Arize Phoenix
Workstyle Evolution代表。18万人超YouTuber&著書『ChatGPT最強の仕事術』は4万部突破。
株式会社Workstyle Evolution代表取締役。YouTubeチャンネル「いけともch(チャンネル)」では、 AIエージェント時代の必須ノウハウ・スキルや、最新AIツールの活用法を独自のビジネス視点から解説し、 チャンネル登録数は18万人超(2025年7月時点)。