LLMOpsツールから考えるAIエージェントの評価

## はじめに
AIエージェントやマルチエージェントを構築するフレームワークやノーコード/ローコードツールも多く登場したことでAIエージェントの開発がより容易となり、基盤モデルの進化も相まって幅広い利用が期待されています。一方でAIエージェントが期待した動作、回答をしたか、期待通りでない場合にどの処理を改善すべきかといった評価や改善、運用面ではまだまだ未成熟な部分が多いと感じています。そこで本記事では、より普及が見込まれるAIエージェントの評価に関してまとめてみました。

既存のLLMOpsツールで提供されているAIエージェント向けの評価項目について調査し、それらを元にAIエージェントでは何を評価すべきかまとめています。またそれを実現するための施策について見解を示します。

>本記事は個人で調査し、まとめたものなのです。誤りや認識違いがあるかもしれませんのでご承知おきください。内容は2025年1月時点のものとなっています。

## AIエージェントの定義
AIエージェントの定義は様々ありますが、本記事では以下をAIエージェントとして定義します。

* ユーザ入力に基づきAIエージェント自身が解決に向けた手順を計画する
* AIエージェントが計画した内容に基づき行動する
* 行動では事前定義したツールを用いて外部環境とやり取りする
* ツールを利用する際の入力もAIエージェントが決定する

## 既存LLMOpsツールにおけるAIエージェントの評価
LLMアプリケーションの評価、運用、管理するLLMOpsツールにおけるAIエージェントの評価項目についてまとめてみます。今回調査したLLMOpsツールは以下です。

* [LangSmith](#LangSmith)
* [Ragas](#Ragas)
* [Galileo Evaluate](#Galileo)
* [Mosaic AI Agent Evaluation](#Mosaic)
* [Phoenix](#Phoenix)
* [論文 「A Taxonomy of AgentOps for Enabling Observability of Foundation Model based Agents」](#Paper)

### LangSmith<a id="LangSmith"></a>


LangSmith[^LangSmith]はLangChain社が提供するLLMアプリケーションの運用・管理ツールです。
LangSmithでは、LLMアプリケーションのトレーシング、実験管理機能に加えて、評価機能も提供しています。提供される評価項目の中にAIエージェント対する評価項目を含まれるため、今回はCenceptual Guide記載の3つのAIエージェント向け評価項目のコンセプトを確認します。

1. Final Response : AIエージェントの最終的な回答を評価する
2. Single Step : AIエージェントの各ステップ（行動）を個別に評価する
3. Trajectory : AIエージェントが最終回答するまでに、想定パスを通ったかを評価

#### 1.Final Response
AIエージェントの最終回答を評価する方法です。AIエージェントの入出力テキストをLLMを評価者とする「LLM as a Judge」で評価します。

ユーザに対する入出力を評価対象とするため、チャットボットやRAGといった他のLLMアプリケーションと同様に評価できます。一方でAIエージェントをブラックボックスとして評価するので、性能改善の為に内部動作を把握するには別の方法が必要となります。

#### 2.Single Step
AIエージェントが繰り返し実行する計画と行動を個別に評価する方法です。
各ステップを評価するために、テストデータも各ステップごとに準備する必要があります。入出力の例としては
* 入力：「～について検索する」
* 出力：「検索ツールを利用する。その際の検索ワード（ツールの引数）は～である」

となります。

AIエージェントは計画と行動を繰り返すため、最初のステップの除いて各ステップの入力は1つ前のステップの出力となります。そのため1つ前のステップの出力に大きく依存する場合はデータセットの準備が難しくなります。また、各ステップごとにテストデータを準備する必要があるため、作成コストも相応に必要となります。

評価に向けた事前準備は大変ですが、各ステップを個別に評価するため、AIエージェントの内部動作を把握することができ、どこを改善すべきか絞り込みやすくなります。

#### 3. Trajectory
AIエージェントは課題解決のために、ツール実行を繰り返します。この評価方法では最終回答までに利用したツールが期待通りかを確認します。

AIエージェントへの入力（ユーザからの入力）と実行してほしいツールのリストをテストデータとして用意する必要します。ツールのリストは実行順序も正確に評価したい場合は順序も指定し、実行順序は任意で良い場合は順序を指定しないケースもあるようです。

ポイントとしては、各ツールの入出力を考慮しない点です。どのツールを（どのような順序で）実行したかのみを評価します。

### Ragas<a id="Ragas"></a>


Ragas[^Ragas]はRAG向けの評価ツールとして公開されましたが、2024年10月のv0.2.0への更新に伴い、RAGだけでなくAIエージェントやText-to-SQLなどのLLMアプリケーション向けにも評価項目が追加されました。今回はAIエージェント向けに用意された評価項目について確認していきます。

Ragasでは上述のAIエージェントの定義とは少し異なり、AIエージェントとユーザが適宜やり取りするマルチターンを想定しているようです。

1. Topic Adherence
2. Tool Call Accuracy
3. Agent Goal Accuracy

#### 1.Topic Adherence
ユーザの関心があるドメインのトピックについて、AIエージェントが回答したかを評価します。
AIエージェントはLLMを用いて行動決定や回答生成しますが、その際にユーザが求めるドメインから逸れていないかを判定する項目です。

具体的な計算方法は、AIエージェントからの回答がユーザの期待するドメインに一致しているか、一致していないかをRecall、Precisionで計算します。
以下は実際の計算式でRagas公式ドキュメント[^Ragas-agent]からの引用です。

```math
\text{Precision } = {|\text{Queries that are answered and are adheres to any present reference topics}| \over |\text{Queries that are answered and are adheres to any present reference topics}| + |\text{Queries that are answered and do not adheres to any present reference topics}|}
```

```math
\text{Recall } = {|\text{Queries that are answered and are adheres to any present reference topics}| \over |\text{Queries that are answered and are adheres to any present reference topics}| + |\text{Queries that were refused and should have been answered}|}
```

```math
\text{F1 Score } = {2 \times \text{Precision} \times \text{Recall} \over \text{Precision} + \text{Recall}}
```

#### 2. Tool Call Accuracy
タスク完了までにAIエージェントが利用したツールは期待通りか評価します。
評価には、ユーザ入力に対して利用を期待するツールリストと、実際に利用したツール、利用順序、入力(引数)を比較します。評価結果は0〜1の実数値で表されます。

#### 3. Agent Goal Accuracy
AIエージェントが、ユーザの目的に達した回答をしたかを評価します。
評価結果はユーザの目的を満たした/満たしていないのバイナリ値として表現します。

この評価項目では、正解データとなるリファレンスありで測定するケースと、リファレンスなしで測定するケースの2つが用意されています。

リファレンスありの評価では、ユーザとAIエージェントの会話内容と、それに対する期待結果を使用します。
会話の最終結果が期待する結果であるかを判定します。

リファレンスなしの評価では、ユーザとAIエージェントの会話内容のみ利用します。比較対象となるユーザの目的は会話内容から推測されます。

### Galileo Evaluate<a id="Galileo"></a>
Galileo社が提供するトレース機能や実験管理機能も備わった評価ツールです。Galileo Evaluateには事前定義された評価項目が用意されており、その中でAIエージェントに関連する評価項目として4つ取り上げます。

1. Tool Selection Quality
2. Tool Errors
3. Instruction Adherence
4. Context Adherence

#### 1.Tool Selection Quality[^Galileo1]
AIエージェントが適切なツールを選択したか、ツールへの引数の名称と値が正しいかどうかを確認する評価項目です。
誤ったツールを利用した、引数が誤っている場合は評価値が低下します。

選択されたツールが正しかったかはLLMがCoT (Chain of Thought) プロンプトを用いて判定します。
複数の異なる応答をするようにLLMにリクエストし、「適切なツールを選択した」と判断したリクエスト数とリクエスト総数を元に最終的な評価値を求めます。
評価値計算では複数回LLMを呼び出すため注意が必要です。

#### 2.Tool Errors[^Galileo2]
AIエージェントのツール実行で発生したエラーを検出する評価項目です。

"Tool Selection Quality"と同様に、LLMがCoTプロンプトを実行して測定します。
LLMがツールを正しく実行できたかどうかを判断します。

#### 3.Instruction Adherence[^Galileo3]
AIエージェントがプロンプトの指示通りに回答したか評価します。AIエージェントが指示を無視してハルシネーションを起こしていないかを確認できます。

LLMがCoTプロンプトを用いて評価します。LLMは指示に従った回答を生成したかどうかをバイナリ値で判断します。
このCoTプロンプトによる判断を複数回実施し、"指示に従った"と判断した割合とその理由を1つ選択して出力します。

この評価値が低い場合は、AIエージェントの指示プロンプト品質が悪い可能性があります。


#### 4.Context Adherence[^Galileo4]
AIエージェントがRetrieverから検索した文章（コンテキスト）からの情報を元に回答しているかどうかを判定する評価項目です。
AIエージェントがRetrieverや要約処理を含んでいる場合に利用することができます。

この評価値が低い場合は、AIエージェントは与えられたコンテキストとは関係ない回答をしており、ハルシネーションなどを含んでる可能性があります。

### Mosaic AI Agent Evaluation<a id="Mosaic"></a>
Mosaic AIは Databricks社が提供するAIアプリケーション開発基盤で、AzureやAWS、Google Cloudといったクラウドベンダで利用できます。
Mosaic AIでも組み込まれた評価項目が存在します。詳細はDatabricksのドキュメント[^Databricks]から確認できます。

組み込み評価は「LLM as a Judge」により測定されます。以下は一例ですが、ツール利用などAIエージェント専用の組み込み評価は見つけることが出来なかったので、詳細は省きます。

* 回答とユーザリクエストとの関連性
* 回答とコンテキストとの関連性
* 回答に有害性があるか
* etc...

### Phoenix<a id="Phoenix"></a>
Arize AI社が提供するOpen Sourceツールです。Phonixは評価、トレース、実験管理、データセット管理機能などが備わったLLMOpsツールで、Arize AI社からSelf-Hostも可能なOpen Sourceとして提供されています。
Phoenixで定義されているAIエージェント向け評価指標として"Agent Function Calling Eval"があります。
> Arize AI社では商用版のLLMOpsツールとしてArize AIがありますが、ドキュメントを見る限りAIエージェントに関する評価項目には差分がないようです。

#### Agent Function Calling Eval
AIエージェントがツールを適切に選択したか、ユーザ入力に基づいて適切なパラメータを抽出したかを「LLM as a Judge」によって判定します。
評価結果は"correct"と"incorrect"のバイナリ値となります。
期待するツールが選択された、正しい引数が設定された、ツール利用でエラーが発生しない、質問と関係のない外部情報を用いて回答生成していない時に"correct"と判定します。

### 論文 「A Taxonomy of AgentOps for Enabling Observability of Foundation Model based Agents」<a id="Paper"></a>
LLMOpsツールではありませんが、AIエージェントの開発/運用プラットフォームの概念化したAgentOpsについて記載された論文が2024/11にarXiv[^paper]で公開されたので簡単に紹介しておきます。

論文では既存ツールを調査し、AIエージェントの開発、オブザーバビリティ、トレースなどを実現するための機能についてまとめています。AIエージェントの評価についてもまとめられており、以下の3つを挙げています。

1. Evaluate final response : Evaluate the agent’s final response
2. Evaluate single step : Evaluate any agent step in isolation
3. Evaluate trajectory : Evaluate whether the agent took the expected path to arrive at the final answer

>調査対象ツールにLangSmithが含まれており、評価に関してはLangSmithを中心に言及されているため、項目としては前述のものと同じとなります。

論文では評価を含め、運用面についても取り上げているので、参考になる部分が多々あると思います。

## AIエージェントの評価項目は？

ここまでLLMOpsツールの組み込み評価項目を調査しました。その内容から、AIエージェントで評価すべき内容を確認したいと思います。

まず最初に、AIエージェントの最終回答の評価が挙げられます。これはAIエージェントだけでなく、RAGなど他のLLMアプリケーションと同様です。
AIエージェントへの入力、最終回答はユーザから見た入出力となるため、サービス自体の評価に直結します。
「LLM as a Judge」でAIエージェントの回答とリファレンスデータとの類似度や意味的相関をスコアリングすることで評価可能です。

AIエージェント特有の評価項目としては、ツールの利用履歴が挙げられます。AIエージェントはツールを活用して課題解決するため、どのツールを、どのような引数で利用したかのAIエージェントの評価として必要と思います。ステップ毎に評価することで、AIエージェントのどこに問題があるかの特定にも役立ち、性能改善の手掛かりにもなります。
一方で、ツールの利用順序を含めて評価するかは、AIエージェントの役割などを考慮して採用可否を判断すべきです。AIエージェントが解決したい課題によっては、ツールの利用順序は必ずしも重要でないケースもあります。ツール利用順序が明確なシステムであれば、行動計画をLLMが考えるのではなく、シーケンシャルに実行するシステムとして構築した方がよいケースもあると考えています。

## AIエージェントの評価に向けて取り組むべきこと

AIエージェント特有の評価項目としてツール利用履歴があることがわかったので、最後にどのような取り組みが必要か考えたいと思います。

AIエージェントのツール利用履歴を評価するためには、AIエージェントの内部動作を蓄積しておく必要があります。実行履歴の管理やトレーシングは、調査したLLMOpsツールのLangSmithやPhoenixで可能で、これら以外もLangFuseなどのツールが利用可能です。LangFuseやPhoenixはOpen SourceでSelf-Hostも可能です。

実行履歴の蓄積は開発フェーズの早い段階から開始することが理想です。
AIエージェントによらず、LLMアプリケーションの評価では、「LLM as a Judge」が多く取り入れられています。「LLM as a Judge」は評価自体に実行コストや時間を要するものの、LLMアプリケーションの出力の揺らぎによる影響を受けにくいメリットがあります。一方でLLMが評価するため、評価用プロンプトは必須となります。
LLMOpsツールでは評価用プロンプトが事前定義されていますが、どのような評価プロンプトを用いて、何を評価するか、どのような評価指標を優先するかは、AIエージェントの目的、ユースケースによって異なります。
また「LLM as a Judge」による評価すべき指標もデータや利用者、外部環境の変化によって変化するため、評価方式自体も継続的に監視、改善していく必要があります。

この継続的な監視、改善をサービスリリースに並行して開始することはプラットフォーム構築、運用ノウハウ蓄積の側面から考えてもリスクが高くなります。
開発フェーズからテストデータを用いて測定した評価値とユーザフィードバックの相関や傾向を見ておくことで、LLM as a Judgeに用いる評価プロンプトをより洗練でき、改善のノウハウも蓄積できるため、よりスムーズに運用に移行できると考えています。


## まとめ

今回はLangSmithやRagasなどの既存ツールを参考に、AIエージェント特有の評価項目を調査し、実際の開発に向けてどのように取り組んでいくべきか私見をまとめました。
今後はこれらのツールなどで実際にAIエージェントの評価にトライしてみたいと思います。

> 取り上げたツール以外にも、参考になるツールや情報があれば是非コメントやXへDM頂けるとありがたいです。

[^LangSmith]: https://docs.smith.langchain.com/evaluation/concepts#agents
[^Ragas]: https://docs.ragas.io/
[^Ragas-agent]:https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/agents/
[^Galileo1]:https://docs.galileo.ai/galileo/gen-ai-studio-products/galileo-guardrail-metrics/tool-selection-quality
[^Galileo2]:https://docs.galileo.ai/galileo/gen-ai-studio-products/galileo-guardrail-metrics/tool-error
[^Galileo3]:https://docs.galileo.ai/galileo/gen-ai-studio-products/galileo-guardrail-metrics/instruction-adherence
[^Galileo4]:https://docs.galileo.ai/galileo/gen-ai-studio-products/galileo-guardrail-metrics/context-adherence
[^Databricks]:https://docs.databricks.com/ja/generative-ai/agent-evaluation/llm-judge-reference.html
[^paper]:https://arxiv.org/abs/2411.05285v1