0Pricing
Learn AI with Python · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. OpenAI API:chat.completionsとストリーミング
  2. Pythonで使うAnthropic Claude API
  3. LLMでのFunction Callingとツール利用
  4. 本番向けLLMアプリのプロンプトエンジニアリング
← Learn AI with Pythonに戻る