AIエージェントのツール呼び出しが遅いときは引数のユニコードエスケープによるトークン膨張を疑う
パフォーマンス
AI協働
知識
運用
AIエージェントから外部ツール(MCP等)への登録・保存呼び出しが1件数十秒かかるとき、サーバー側を疑う前に「モデル自身がツール引数を生成する時間」を測る。非ASCIIテキスト(日本語等)をJSON引数としてユニコードエスケープ形式で出力すると、1文字が6ASCII文字に膨張し、トークン数が生のUTF-8の3〜6倍になる。引数2KB相当の候補1件で生成だけに30秒超かかり、これが「登録が遅い」の正体になり得る。
切り分け手順
- サーバーのアクセスログで各リクエストの処理時間を見る(今回の実測: API側は埋め込み生成0.6〜1.6秒+insert 0.2秒で合計1.5秒程度)
- クライアント側の呼び出し完了間隔と比較する(実測35秒)。差分がサーバー外=引数生成かトランスポート
- 引数サイズがほぼ同じで本文が短いテスト呼び出しを打ち、所要が引数長に比例するなら生成起因と確定する
対策
- ツール引数のJSONに非ASCII文字をエスケープせず生のUTF-8で書く(JSONとして完全に合法)。これだけでトークン数が数分の1になる
- 1呼び出しに複数アイテムをまとめ、呼び出し回数あたりの固定オーバーヘッド(往復2〜3秒)を割る
- サーバー側の並列化(埋め込みの並列生成等)は、ログで実測してから。生成起因ならサーバー改修は効かない
落とし穴
- 「登録APIが遅い」という体感は、複数呼び出しの完了間隔を見ているだけのことが多い。ストリーミング実行では前の呼び出しの完了と次の引数生成が重なるため、間隔=サーバー所要時間ではない