はじめに
七尾百合子さん、お誕生日 326日目 おめでとうございます! nikkieです。
ADK 1.24.0 がリリースされました。
「⚠ BREAKING CHANGES」に載っていない breaking change をお知らせします。
目次
カスタムメトリクスが壊れます
1.23.0 で入ったカスタムメトリクス
ADK の評価まわりは実務レベルの機能が足りているとはお世辞にも言い難いので、ユーザが必要な評価ロジックを実装できる1この機能の追加は大きかったです。
カスタムメトリクスは以下のシグネチャの関数です。
from google.adk.evaluation.eval_case import Invocation from google.adk.evaluation.evaluator import EvaluationResult def custom_metric_function( actual_invocations: list[Invocation], expected_invocations: list[Invocation] | None, conversation_scenario: ConversationScenario | None = None, ) -> EvaluationResult:
ADK を 1.24.0 に上げると、このシグネチャのままでは動きません。
adk evalのログです。
2026-02-06 22:47:11,374 - ERROR - local_eval_service.py:357 - Metric evaluation failed for metric `practice_tool_trajectory_metric` for eval case id 'tests/fixture/home_automation_agent/simple_test.test.json' with following error `practice_tool_trajectory_metric() takes from 2 to 3 positional arguments but 4 were given`
Traceback (most recent call last):
File "/.../adk-evaluation/.venv/lib/python3.13/site-packages/google/adk/evaluation/local_eval_service.py", line 348, in _evaluate_metric_for_eval_case
evaluation_result = await self._evaluate_metric(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<4 lines>...
)
^
File "/.../adk-evaluation/.venv/lib/python3.13/site-packages/google/adk/evaluation/local_eval_service.py", line 432, in _evaluate_metric
return await metric_evaluator.evaluate_invocations(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/.../adk-evaluation/.venv/lib/python3.13/site-packages/google/adk/evaluation/custom_metric_evaluator.py", line 70, in evaluate_invocations
eval_result = self._metric_function(
eval_metric,
...<2 lines>...
conversation_scenario,
)
TypeError: practice_tool_trajectory_metric() takes from 2 to 3 positional arguments but 4 were given
カスタムメトリクスに第1引数が追加されています!
原因の変更はリリースノートのこちら
Remove overall evaluation status calculation from
_CustomMetricEvaluatorand add threshold to custom metric function expected signature (553e376)
シグネチャはこうなりました。
from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_metric import EvalMetric from google.adk.evaluation.evaluator import EvaluationResult def custom_metric_function( + eval_metric: EvalMetric, actual_invocations: list[Invocation], expected_invocations: list[Invocation] | None, conversation_scenario: ConversationScenario | None = None, ) -> EvaluationResult:
_CustomMetricEvaluatorのカスタムメトリクス関数を呼び出す箇所で4引数渡しています。
2引数または3引数しか受け取れないカスタムメトリクス関数のままではTypeErrorが送出されるというわけです。
なので、カスタムメトリクスに第1引数を追加すれば直ります。
追加した引数は一切使わなくてよいです(threshold にもアクセスできるようですが、宿題事項とします)
終わりに
ADK (Python) 1.23.0 でサポートされたカスタムメトリクスは、1.24.0 で3引数から4引数へとシグネチャの変更が起こりました。
第1引数を追加して各位ご対応ください。
直した例はこちら:
ADK をセマンティックバージョニングと捉えると、マイナーバージョンアップで既存コードが壊れすぎです。Why!?
他の例としては DB を使った session まわりも壊れます
開発者は思わぬ作業に直面してげんなりですし、ADK にとってもよい状態ではなく、ユーザが離れる要因になりえると思いますね。うーん
Googleよ、1.23.0で出したadk evalのカスタムメトリクスのシグネチャを1.24.0でもう変えるのか
— nikkie(にっきー) / にっP (@ftnext) 2026年2月1日
たしかにthresholdがカスタムメトリクス関数で扱えるのは便利ですが、1.23.0に沿って書いたカスタムメトリクス、動かなくなりますよねhttps://t.co/dTU4FyeisV
ADK、こういうのばっか(クソデカため息)
- 例 ↩