LLMでのFunction Callingとツール利用
JSONスキーマによるツール定義、レスポンス内のtool_callsの処理、実行結果の返却について学習します。
「LLMでのFunction Callingとツール利用」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
Function callingとは
Function calling(tool useとも呼ばれます)を使うと、LLMからコードに関数の実行を要求できます。モデル自体は何も実行せず、「この関数をこの引数で呼び出す」という構造化されたリクエストを返します。プログラムがそれを実行し、結果をモデルに返します。
これにより、LLMは最新のデータを取得したり、計算したり、実際のアクションを実行したりできます。
ツールの記述
モデルにtoolsのリストを渡します。各ツールには、name、description、JSON Schemaとして定義されたparametersがあります。descriptionは重要です。モデルはそれを使って、ツールを使うべき場面を判断します。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name"}
},
"required": ["city"]
}
}
}]パラメータ用のJSON Schema
parametersフィールドには標準のJSON Schemaを使用します。propertiesを持つオブジェクトを宣言し、各プロパティにtypeと説明を指定し、さらにrequired配列を指定します。これにより、モデルが生成すべき引数を正確に伝えられます。
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"units": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}モデルへのツールの渡し方
toolsリストをchat.completions.create()に渡します。これでモデルは、userのリクエストに応じて、テキストまたはtool callを返せるようになります。
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Weather in Tokyo?"}],
tools=tools
)ツール呼び出しの検出
モデルがツールを使おうとすると、通常のテキストの代わりにmessage.tool_callsが返信に含まれます。通常の回答だと決めつける前に、このリストが存在するか確認してください。
msg = response.choices[0].message
if msg.tool_calls:
print("Model wants to call a tool")
else:
print(msg.content)引数の解析
各tool callにはfunction.nameとfunction.argumentsがあります。引数はJSON文字列として届くため、使用する前にjson.loads()で解析してください。
import json
call = msg.tool_calls[0]
name = call.function.name
args = json.loads(call.function.arguments)
print(name, args) # get_weather {"city": "Tokyo"}関数の実行
解析した引数を使って、ここでご自身の実際のPython関数を実行します。LLMが決めるのは何を呼び出すかだけで、実際の処理を行うのはコードです。
def get_weather(city):
return {"city": city, "temp_c": 18, "condition": "Cloudy"}
result = get_weather(**args)モデルへの結果の返却
モデルが自然言語の回答を書けるように、結果を返します。元のassistantメッセージを追加し、その後に結果と対応するtool_call_idを含むtoolロールのメッセージを追加してください。
messages.append(msg) # the assistant tool-call message
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps(result)
})最終回答の生成
更新したmessagesを使って、もう一度モデルを呼び出します。ツールの結果を受け取ったモデルが、user向けの自然な最終返信を生成します。
final = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
print(final.choices[0].message.content)ツール使用ループの全体像
一連の流れは次のとおりです。(1) toolsを送信する、(2) モデルがtool callを返す、(3) 引数を解析する、(4) 関数を実行する、(5) 結果をtoolメッセージとして返す、(6) モデルが回答を書く。モデルは完了するまで複数のtool callを要求する場合があるため、tool_callsが空になるまでループしてください。
ツール選択の制御
tool_choiceパラメータを使って動作を制御します。"auto"(デフォルト)ではモデルが判断し、"none"ではツールの使用を禁止します。特定のツール名を渡すと、その関数を必ず呼び出します。構造化された出力を保証する必要がある場合に便利です。
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice={"type": "function", "function": {"name": "get_weather"}}
)理解度チェック
ツール使用についての理解度を確認しましょう。
まとめ:Function calling
name、description、JSON Schemaのparametersを持つtoolsを定義し、それらをモデルに渡しました。tool_callsを検出し、function.argumentsをjson.loads()で解析して実際の関数を実行し、対応するtool_call_idを持つtoolロールのメッセージとして結果を返しました。
最後にモデルを呼び出すと、取得した結果が自然な回答に変換され、ツール使用のループが完了します。
よくある質問
「LLMでのFunction Callingとツール利用」レッスンは無料ですか?
はい。「LLMでのFunction Callingとツール利用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「LLMでのFunction Callingとツール利用」で何を学びますか?
JSONスキーマによるツール定義、レスポンス内のtool_callsの処理、実行結果の返却について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「LLMでのFunction Callingとツール利用」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- OpenAI API:chat.completionsとストリーミング
- Pythonで使うAnthropic Claude API
- LLMでのFunction Callingとツール利用
- 本番向けLLMアプリのプロンプトエンジニアリング