AIエージェントのツール呼び出しを評価するためのデータセットです。本データセットは,JMultiWOZを加工することで構築しており、4,246 対話に含まれるユーザ発話 31,303 発話に対して、合計 16,510 個のツール呼び出しが付与されています。
jmultiwoz_tc_input.jsonl をモデル入力に用い、モデルが生成したツール呼び出しを jmultiwoz_tc_ground.jsonl と比較して評価します。
JMultiWOZ-TC/
├── generate.py
├── evaluate.py
└── dataset.zip # ツール定義とデータセット(展開が必要)
├── tools.json
├── jmultiwoz_tc_input.jsonl
└── jmultiwoz_tc_ground.jsonl - サーバ: vLLM を OpenAI 互換エンドポイントとして起動(
--enable-auto-tool-choiceと--tool-call-parser hermesを使用) - 生成: generate.py が OpenAI SDK 経由でモデルに問い合わせ、JSONL 形式の
result_{safe_model_name}.jsonlを出力 - 評価: evaluate.py は
jmultiwoz_tc_ground.jsonlとモデル出力を比較し、サマリをscore_{safe_model_name}.json、誤答ログをincorrect_{safe_model_name}.jsonに出力する設計
tools.json: ツール定義(Function Calling の仕様)。generate.pyが読み込みます。jmultiwoz_tc_input.jsonl: モデルがツール呼び出しを推定するための入力(ユーザ発話や対話コンテキスト)。jmultiwoz_tc_ground.jsonl: 対応する正解のツール呼び出しアノテーション(評価指標算出に使用)。
- Python 3.10以上
- GPU 環境推奨(vLLM のモデル推論のため)。
以下を順に実施してください。
- データセットの展開
# dataset.zip を解凍(tools.json と各 JSONL ファイルが抽出されます)
unzip dataset.zip- Python環境の準備と依存インストール
# 仮想環境の作成と有効化(macOS/Linux)
python -m venv .venv
source .venv/bin/activate
# 依存関係(サーバ+クライアント)
# - vLLM: OpenAI互換APIサーバ
# - openai/httpx: クライアント(generate.py で使用)
pip install -U vllm openai httpx- vLLM サーバを起動(例: Qwen3-14B)
vllm serve Qwen/Qwen3-14B \
--port 8000 \
--enable-auto-tool-choice \
--tool-call-parser hermes- 生成実行(別ターミナル)
source .venv/bin/activate
python generate.py生成が完了すると、モデル名に応じて result_{safe_model_name}.jsonl が作成されます。
- 評価
python evaluate.py --result result_{safe_model_name}.jsonl評価結果のサマリがコンソールに表示され、詳細は score_{safe_model_name}.json と incorrect_{safe_model_name}.json に書き出されます。
基本実行:
python generate.py指定可能なオプション:
--tools(既定:tools.json)- ツール定義ファイルのパス
--input(既定:jmultiwoz_tc_input.jsonl)- 入力JSONLファイルのパス
--base-url(既定:http://localhost:8000/v1)- vLLM(OpenAI互換API)のベースURL
--openai-api-key(既定:dummy)- OpenAIクライアント初期化用のAPIキー
--output-dir(既定:.)result_{safe_model_name}.jsonlの出力先ディレクトリ
--max-retries(既定:3)- タイムアウト時の再試行回数
実行例:
python generate.py \
--base-url http://localhost:8000/v1 \
--output-dir .qwen3-14b \
--max-retries 5基本実行:
python evaluate.py --result result_{safe_model_name}.jsonl指定可能なオプション:
--result(必須)- 評価対象のモデル出力JSONLファイル
--ground(既定:jmultiwoz_tc_ground.jsonl)- 正解データJSONLファイル
--input(既定:jmultiwoz_tc_input.jsonl)- 入力データJSONLファイル(誤答ログの補助情報参照に使用)
実行例:
python evaluate.py \
--result result_Qwen_Qwen3-14B.jsonl \
--ground jmultiwoz_tc_ground.jsonl \
--input jmultiwoz_tc_input.jsonl- 作成元:
python generate.py - 形式: JSONL
- 用途: 各
data_idに対するモデルのツール呼び出し出力を保存
主なレコード形式(成功時):
{
"data_id": "...",
"dialogue_id": "...",
"tool_calls": [
{"name": "tool_name", "arguments": {"key": "value"}}
]
}主なレコード形式(エラー発生時):
{
"data_id": "...",
"dialogue_id": "...",
"tool_calls": [],
"error": "TimeoutError"
}- 作成元:
python evaluate.py --result ... - 形式: JSONL
- 行数: 5行固定
- 全体
- ツール使用判断
- ツール不使用判断
- ツール使用・不使用判断
- tool call精度
- 各行の主キー:
評価項目,総データ数,評価対象数,正解数,不正解数,出力ミスのデータ数,全体の正答率(%)
全体の正答率(%) は、いずれの行も次式で計算します。
全体の正答率(%) = 正解数 / 評価対象数 * 100
評価対象数 = 正解数 + 不正解数
出力ミスのデータ数 は、モデル出力に error(例: TimeoutError)が入った件数で、正誤判定の分母から除外されます。
全体
- 対象: 全データ
- 判定: 1件ごとに、モデルの
tool_callsと正解ground_truthが 完全一致 かどうか - 何を見る指標か: 「ツールを使うかどうか」と「使う場合の呼び出し内容」の両方をまとめた最終精度
ツール使用判断
- 対象: 正解側で
ground_truthが空でないデータ(本来ツールを使うべきケース) - 判定: モデルが
tool_callsを1件以上出せたか(使うべき場面で使えたか) - 何を見る指標か: 必要な場面でツール使用を選択できるか
ツール不使用判断
- 対象: 正解側で
ground_truthが空のデータ(本来ツール不要のケース) - 判定: モデルが
tool_callsを出さなかったか(不要な場面で呼ばないか) - 何を見る指標か: 不要なツール呼び出しを抑制できるか
ツール使用・不使用判断
- 対象: 上記のツール使用判断とツール不使用判断を合わせた全データ
- 判定: 「使う/使わない」の二値判断が正しいか
- 何を見る指標か: ツール利用有無の判断能力(内容の正しさはここでは見ない)
tool call精度
- 対象: 正解側で
ground_truthが空でないデータ(本来ツールを使うべきケース) - 判定:
tool_callsの内容が正解と 完全一致 か- 一致条件: 各 call の
nameとargumentsが一致 argumentsはキー順を正規化して比較するため、JSONキーの順序差は不問- call の比較は集合ベースのため、順序差は不問
- 一致条件: 各 call の
- 何を見る指標か: 実際のツール呼び出し内容(関数名・引数)をどれだけ正確に出せるか
- 作成元:
python evaluate.py --result ... - 形式: JSONL
- 用途: 誤答ケースを1行1JSONで保存
- 出力順:
- tool call精度の誤答
- ツール使用判断の誤答
- ツール不使用判断の誤答
- vLLM が立ち上がらない/重い: モデルサイズに見合った GPU/メモリを確保し、
--tensor-parallel-sizeや--gpu-memory-utilizationを調整してください。 - 生成がタイムアウトする:
generate.pyはタイムアウト時に自動で数回リトライし、最終的に該当data_idをTimeoutErrorとして出力します。サーバ/モデル負荷を下げるか、ネットワーク状態を確認してください。
JMultiWOZ-TC データは Creative Commons Attribution 4.0 International (CC BY 4.0) で公開します。
詳細: https://creativecommons.org/licenses/by/4.0/
JMultiWOZ-TCは、JMultiWOZ に基づく対話データをツール呼び出し形式へ再構築した評価用データセットです。
JMultiWOZ GitHub: https://github.com/nu-dialogue/jmultiwoz