エージェント基盤・プロトコル

Function callingとは|自由文から拾った12件のうち、2件は別の数値だった

Function callingとはどういう仕組みなのか自由文から拾うのと何が違うのか定義はどう書けばよいのか

AIの答えをプログラムで使いたいとき、文章から数値を拾うか、最初から決めた形で返させるかで作りが分かれます。後者がFunction callingです。

応答12通りに正規表現を当てたところ、9件は拾えました。ただしそのうち2件は、拾えたのに別の数値でした。

この記事の要点

  • Function callingは決めた形で値を返させる仕組み
  • 自由文から拾うと12件中9件しか拾えず、うち2件は別の値
  • 決めた形なら失敗したことが必ず分かる
  • 定義の説明文は3〜4文以上が目安

自由文から拾った12件のうち、2件は別の数値だった

応答12通りに実際に正規表現を当てました。拾えたのは9件で、そのうち2件は文中の別の数値を拾っています。

Function callingを使わずに答えを取り出すと何が起きるのかを、実際の応答で確かめました。題材は「東京の今日の気温を調べて」への応答12通りで、正解は18です。

応答は実際にAIが返しがちな言い回しを並べたもので、正規表現とJSON解析は本当に実行して数えています

javascript
// 自由文から数値を拾う正規表現。「18度」「18℃」を狙う
const NUM = /(\d+(?:\.\d+)?)\s*(?:度|℃|degrees)/;

function parseFree(r) {
  const m = r.text.match(NUM);
  if (!m) return { got: false, value: null, correct: false };
  const v = Number(m[1]);
  return { got: true, value: v, correct: v === r.expect };
}
text
応答                              拾えた値  判定
東京の気温は18度です                      18  正しい
気温: 18度                              18  正しい
The temperature in Tokyo is 18 degrees   18  正しい
今日の東京は18度から22度の見込みです         18  正しい
昨日は15度でしたが、今日は18度です           15  別の値を拾った
気温は平年より3度高い18度です                3  別の値を拾った
東京の気温は十八度です                       —  拾えない
東京: 18                                  —  拾えない
摂氏18                                    —  拾えない

取り出し方           拾えた  値が正しい  取りこぼし
自由文を正規表現で拾う     9件         7件         3件
決めた形で返させる      10件        10件         2件

拾えた9件のうち2件が誤りでした。「昨日は15度でしたが、今日は18度です」から15を拾っています

誤読は取りこぼしより厄介

取りこぼした3件は、拾えなかったことがその場で分かります。ですから再実行するなり、人に回すなりの手が打てます。

誤読した2件は違います。15という数値が返ってきて、そのまま次の処理に流れます。正しく動いたのと見分けがつきません。

正規表現を足しても直らない

取りこぼした3件は、表現を足せば拾えます。漢数字や単位なしにも対応させればよいだけです。

ところが誤読は減りません。文中に数値が2つあるとき、どちらが答えかを決める材料が文面にないからです。表現を足すほど、むしろ誤って拾う機会が増えます。

決めた形での失敗の仕方

決めた形で返させた側も2件失敗しています。応答が途中で切れて解析できなかったものです。ただし失敗の理由は1つで、失敗したこと自体は必ず分かります

取りこぼしは気づける。誤読は気づけないまま次に流れる。

自由文を正規表現で拾う値が正しい7別の値を拾った2拾えない312件決めた形で返させる10212件−0%(0件)応答12通りに実際に正規表現とJSON解析を当てた結果。「別の値」は気づかないまま次に流れる。
図1 ── 応答12通りに対する取り出しの内訳
出典Claude Platform Docs「Define tools」2026-08-17 確認
A JSON Schema object defining the expected parameters for the tool.
原文Claude Platform Docs「Define tools」 この内容の有効期限2027-02-17

Function callingとはどういう仕組みなのか

受け取りたい値の形を先に宣言しておき、その形に沿った答えを返させます。文章ではなく構造で受け取ります。

Function callingは、返してほしい値の形をあらかじめ宣言し、その形で返させる仕組みです。文章で返させて後から拾うのとは順序が逆になります。

定義に書くもの

定義は2つの部分でできています。受け取る値の形と、その道具が何をするかの説明です。Anthropicの説明でも、形の指定と説明文の記述、そして呼ばれる場面の制御が扱いとして挙げられています。

形の指定にはJSON Schemaが使われます。同じ文書では、その道具に期待される引数を定めたJSON Schemaのオブジェクトだと説明されています。

受け取り方が変わる

宣言しておくと、答えは文章ではなく構造として返ってきます。ですから拾う処理そのものが不要になります。前の節の正規表現のような部分が消えます。

解析に失敗するのは、応答が壊れた場合だけです。何が起きたかがはっきりしているので、再実行という単純な対処が効きます。

ツール利用との関係

同じ仕組みを別の側から呼んだ言い方です。外部の機能を呼ばせる側面を強調するとツール利用、返す値の形を決める側面を強調するとFunction callingになります。呼ぶ側の設計はツール利用の記事で扱っています。

余談 呼ばせずに形だけ使う

実務で便利だったのは、実際には何も実行しない道具を定義して、形だけ受け取る使い方でした。分類の結果や抽出した項目を構造で受け取りたいときに効きます。呼ばれたことにして、返ってきた引数をそのまま使います。

出典Claude Platform Docs「Define tools」2026-08-17 確認
Specify tool schemas, write effective descriptions, and control when Claude calls your tools.
原文Claude Platform Docs「Define tools」 この内容の有効期限2027-02-17

定義はどこまで書けばよいのか

説明文は3〜4文以上が目安です。形だけ正しくても、説明が薄いと呼ばれる場面がずれます。

Function callingの定義でつまずくのは、形ではなく説明文のほうです。形はJSON Schemaで書けば済みますが、説明は書き方次第で動作が変わります。

説明文の分量

Anthropicは目安を示しています。説明文はそれぞれ最低でも3〜4文を目指し、複雑な道具ならもっと長く、という書き方です。

同じ文書では、説明文に含めるべき内容も挙げられています。その道具が何をするか、いつ使うべきか、どう振る舞うかを詳しく書いた平文だとされています。

書き方の順番

  1. 何を返すか。整数か文字列か、単位は何か
  2. いつ使うか。どんな依頼のときに呼ぶべきか
  3. 例外の振る舞い。見つからない場合、権限がない場合
  4. 実装の詳細。呼ぶ側には要らない

3番目を忘れがちです。見つからなかった場合に何が返るかを書いておかないと、0なのか空なのかで判断がぶれます

形は狭く決める

形の指定も、緩くしないでください。文字列で受けておけば何でも入りますが、入ってしまったものを後で検査することになります

取りうる値が決まっているなら、その一覧を形の中に書きます。範囲があるなら上下限も書きます。定義した形の外は最初から届きません。

形は狭く、説明は厚く。逆にすると呼ばれ方がぶれる。

充足 2 / 4説明文が3〜4文以上ある何をするか・いつ使うか・例外の振る舞いを書けば自然に届く分量取りうる値を形で絞っている一覧や上下限を書けば、定義の外の値は最初から届かない実装の詳細を書いている呼ぶ側には要らない。説明が長くなるだけで判断の助けにならない形が合えば値も正しい気温18と返っても、調べた結果か記憶かは形からは分からない定義を点検する項目。自由文から拾う方式では12通りのうち3件が取りこぼし、2件が誤読だった。
図2 ── 定義を見直すかどうかの判断
形が合っても中身は保証されない決めた形で返ってきても、その値が正しいとは限りません。気温が18と返っても、実際に調べた結果か記憶かは形からは分かりません。値の正しさは別に確かめてください。外部を調べさせる仕組みはツール利用の記事で扱っています。
出典Claude Platform Docs「Define tools」2026-08-17 確認
Aim for at least 3–4 sentences for each tool description, more if the tool is complex.
原文Claude Platform Docs「Define tools」 この内容の有効期限2027-02-17

よくある質問

正規表現を増やせば拾えるようになりませんか
取りこぼしは減らせます。ただし誤読は減りません。文中に複数の数値があるとき、どれが答えかは表現の追加では決まらないためです。
決めた形でも失敗しますか
します。応答が途中で切れると解析できません。ただし失敗したことは必ず分かるので、再実行すれば済みます。
ツール利用と何が違いますか
重なる部分が多く、同じ仕組みを別の側面から呼んだ言い方です。外部の機能を呼ばせる側面がツール利用、返す値の形を決める側面がFunction callingにあたります。
定義には何を書けばよいですか
受け取る値の形と、その道具が何をするかの説明です。説明は3〜4文以上が目安として案内されています。

まとめ

  • Function callingは返す値の形を先に決めておく仕組み
  • 自由文から拾うと12件中3件が取りこぼし、2件が誤読
  • 誤読は拾えているので気づけないのが厄介
  • 決めた形なら失敗が必ず表に出る

今日から始められること

  1. AIの答えを文章から拾っている箇所を洗い出す
  2. その箇所で、拾い間違えた場合に何が起きるかを確かめる
  3. 返してほしい値の形を書き出し、定義に落とす
  4. 解析に失敗した場合の再実行の作りを用意する

実務で組んだFunction Callingのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る