Agents SDKはどうやってPython関数(Function tool)をLLMのtoolにしているのか
2025-12-18
Agents SDKでは,@function_toolデコレータを普通のPython関数に付与すると,Responses APIのFunctionとしてシームレスに登録できます。このマジックがどう実装されているのか,ソースコードを覗いてみました。
Automatic argument and docstring parsingで詳細に説明されていますが,@function_toolデコレータを付与すると,デコレータの実行時にまず
- 関数のシグネチャ(関数名,引数,型アノテーション)
- 関数のdocstring
を解析して,FuncSchemaオブジェクトが作られ,その情報をもとにFunctionToolオブジェクトが作られます。そしてResponses APIの呼び出し時に,FunctionToolオブジェクトからtoolsパラメータが導出されるという流れ。
Function toolの実装を覗く
FuncSchemaのコードはsrc/agents/function_schema.pyで,inspectionを駆使して関数シグネチャ,docstringを抽出してResponses APIで使いやすいモデルに変換しています。マジックの主要な部分はだいたいここで行われていているようです。普段こういうメタなコードをあまり書かないので勉強になるし面白い。
FuncSchemaからFunctionToolを作っているのはfunction_toolデコレータ。
さらに,FunctionToolをResponses APIのtoolsパラメータに変換しているのはこのあたりでした。
これは Agents SDK+αのTipsを一人で書いていくアドカレ Advent Calendar 2025の18日目の記事です。(Tipsではなくなってきた...)