コードで道具を呼ぶときの教訓:プログラム呼び出しは多くのモデルでJSON呼び出しを上回る
研究の要点はこうです。コードを書いて外部ツールを呼び出す「プログラマティックツール呼び出し」(PTC)は、従来のJSON(JavaScript Object Notation)形式で関数呼び出しを指示する方法に比べ、多くの場面で同等かそれ以上の正確さを示しました。著者たちは14種類の大規模言語モデル(LLM)を、BFCL v4という309件の代表的なテストセットで比較しました。結果として11モデルでPTCがJSONを上回るか同等でした。特にGPT-5.6系はJSONより絶対で10.6%改善しました。並列呼び出しや「コンテキスト汚染(context rot)」の条件でも高い安定性を示しています。ファイルシステム探索を使った比較条件は業界実務ではない参照点として使われ、そちらは大きく性能が下がりました(最大で約32%の劣化)。
何をしたかを簡単に説明します。各モデルに同じタスク説明と利用可能な関数群を与え、正しい関数名と引数を出力できるかを測りました。比較対象は二つです。従来型はモデルがAPIに構造化されたJSONオブジェクトを出力して関数を呼ぶ方式(JSONツール呼び出し)。PTCは、関数の型情報を持つPythonの「スタブ」を与え、モデルにそのスタブをインポートして実際のPythonスクリプトを書かせます。スクリプトはシェルのサブプロセスで一回だけ実行され、標準出力に結果を出力します。評価は正解となる呼び出しの集合と出力を文字列正規化して厳密に照合する決定論的スコアで行われました。
仕組みをもう少し噛み砕いて説明します。JSON方式では各関数呼び出しごとにモデルが構造化JSONを出力し、サービス側が応答を返して次の呼び出しへ進むことが多いです。これに対してPTCでは、モデルが複数の関数呼び出しを連ねたPythonコードを書き、それを一度だけ実行して複数の結果をまとめて得られます。つまり、並列化や長い連鎖処理を自然に書ける点がPTCの利点です。実際、長い連鎖(チェーン)ではPTCの有利さが大きくなり、チェーン長が12以上では最大で18.8%の絶対差が生じました。
なぜ重要か。現場ではツール呼び出しを使ってモデルを外のサービスやデータへつなげることが増えています。PTCは並列処理や多段処理でJSONの設計上の制約を回避できます。実験では並列ファンアウト(多くの独立した呼び出しを並べる場面)でもPTCが優位で、モデル固有の閾値を超えるとJSON方式は呼び出しを落とし始めます(例:Claude Sonnet5でN=70〜72のあたり)。一方PTCはN=100でも列挙正確さを100%維持しました。またコンテキストを無関係な情報で埋める攻撃的な条件でも、PTCは安定し、JSONは平均で約2.3%低下しました。
重要な注意点と限界もあります。効果はモデル世代や個別モデルに依存します。論文は「世代ごとに分かれる」としており、Anthropicの5モデルと新しいGPT世代3つはPTCで同等以上だった一方、古いGPTモデル3つはPTCで劣りました。評価はBFCL v4の代表サブセット上での実験結果です。PTCで生成したスクリプトが構文エラーや実行時エラーを起こすと、そのテストは不正解として扱われます。また、ファイルシステム探索の条件は実務的手法ではなく参考用です。以上の点から、PTCは有力な選択肢ですが、すべてのモデルや運用状況で無条件に優れるとは限らないと本研究は示しています。さらに広いデータや運用条件での検証が今後必要です。