AIの関数呼び出しで、モデルとアプリが担当すること
AIアプリに関数呼び出しを組み込むと、モデルは使いたい関数と引数を返せます。開発者が用意する関数の場合、その要求を受けて処理を動かし、結果を返すのはアプリ側です。この役割を分けて読むと、「ツールを使える」という説明のうち、自分で実装する部分が分かります。
この記事は、関数呼び出しを初めてアプリへ組み込む開発者向けの解説です。OpenAI・Anthropic・Googleの公式資料を基に、開発者が定義する関数を中心に扱います。提供元のサーバーで動くツールと、実行を補助するSDKについても後半で区別します。
呼び出しの要求から、実行結果を返すまで
関数呼び出しは、自然言語の依頼を、関数名と引数の組へつなぐ仕組みです。例えば「tool_callという用語を調べて」に対し、モデルがlookup_termと{"term":"tool_call"}を選ぶ場面を考えます。これは説明用の共通表現で、各社APIの応答形式そのものではありません。
OpenAIの関数呼び出しガイドは、利用できるツールを送る、呼び出しを受け取る、アプリで実行する、結果を送る、モデルの返答を受け取る、という流れを示しています。最後の返答が、追加の呼び出しになる場合もあります。
上の例なら、関数名と引数を受け取った段階では、辞書を引く処理はまだ残っています。アプリが辞書を調べて結果を返すと、その結果を使ってモデルが回答できます。呼び出しの要求、関数が返した結果、利用者に見せる回答を分けると、途中で止まった場所も追いやすくなります。
公式3社の説明で共通する役割
呼び出しを表す名前や結果の渡し方は製品ごとに異なります。次の表は、開発者が定義する関数についての対応です。コードをそのまま相互に置き換えられるという意味ではありません。
| 資料 | モデルから受け取るもの | 実行と結果の返却 |
|---|---|---|
| OpenAI・Function calling | 関数名と引数を含む呼び出し | アプリで処理し、対応する呼び出しの結果を送る |
| Anthropic・client tools | tool_useブロック | アプリで処理し、tool_resultを返す |
| Google・Function calling | 関数名と引数 | アプリで関数を実行し、結果をモデルへ渡す |
Anthropicの解説は、client toolsをアプリ側で実行するものとして説明しています。Googleの解説も、関数コードの実行をアプリ側の役割に置いています。共通する役割を理解したうえで、採用するAPIの形式を読む順序がよいでしょう。
AIに接続しない例で、実行する側を確かめる
次は、呼び出しを受け取った後の処理だけを取り出したPythonの例です。requestは手で作ったデータで、モデルの実際の応答ではありません。API、ネットワーク、外部ファイルを使わず、固定した辞書を読みます。
TERMS = {"tool_call": "A request to run a tool."}
def dispatch(name, arguments):
if name != "lookup_term":
raise ValueError("unsupported tool")
if type(arguments) is not dict or set(arguments) != {"term"}:
raise ValueError("unexpected arguments")
term = arguments["term"]
if type(term) is not str or term not in TERMS:
raise ValueError("unknown term")
return {"term": term, "definition": TERMS[term]}
if __name__ == "__main__":
request = {"name": "lookup_term", "arguments": {"term": "tool_call"}}
print(dispatch(request["name"], request["arguments"]))
このコードをdemo.pyとして保存し、python demo.pyで実行すると、tool_callと説明文を含む辞書が表示されます。関数名をdelete_noteに変えると、辞書を読む処理へ進む前にValueErrorになります。この例で実行を分岐するのはdispatchです。
Python 3.13.9で、正常な要求1件と、関数名・余分な引数・用語の型・未登録の用語・引数全体の型が異なる5件を確認しました。正常な要求は固定値を返し、不正な5件は例外になりました。実際のモデルが適切な関数や引数を選ぶか、APIとの往復が成立するかは、この例では検証していません。
実行前の確認と、サービス側で動くツール
Googleの公式資料は、実行前に呼び出しを検査することを勧めています。上の例では、許可した関数名、引数の項目、用語の型と値をアプリ側で確かめました。これは小さな辞書用の設計例です。外部APIの認証や、データを書き換える処理の承認まで実装した例ではありません。
すべてのツールを自分のアプリで動かすわけではありません。Anthropicはclient toolsと、同社の基盤で実行するserver toolsを区別しています。Web検索などのserver toolsを使う場合には、ここで示した辞書関数と実行場所が異なります。
また、Anthropicのtool runnerのように、関数の実行や結果の送信をSDKが補助する仕組みもあります。往復処理を自分で書く量と、どこで処理が動くかは別の話です。SDKを使う場合も、渡した関数の処理と実行環境を読む必要があります。
今回確認した範囲と出典
2026年10月27日に確認した公式資料に基づく解説です。Googleの資料には2026年9月23日UTCの更新日が表示されていました。ほかの参照資料については、確認できたページに基づき、特定のモデル版やSDK版への対応を断定していません。
実行したのは、固定データを使うPythonの例と、その入力検査です。各社APIへの接続、server toolsやSDKの起動、モデル間の性能比較は行っていません。まず「どんな要求を受け取り、どの処理が結果を返すか」を分けることが、公式の実装例を読む際の手掛かりになります。
Skillを導入するときに読むファイルや実行環境については、Agent Skillsを導入する前に、仕様と公式リポジトリのどこを読むかでも扱っています。