AIパーソナル・ラーニング
と実践的なガイダンス
ビーンバッグ・マースコード1

OpenAI 関数呼び出し

OpenAI機能呼び出しV2の特徴

関数呼び出しV2の中核的な目標は、OpenAIのモデルに外界と相互作用する能力を与えることであり、これは以下の2つの中核的な関数に反映されている:

  1. データの取得 - RAGのファンクションコールの実装。
    • 基本的にはRAG(Retrieval Augmented Generation)だ。 関数呼び出しは、検索強化生成 (ラグ).モデルは、あらかじめ定義された関数を呼び出して、自身の生成するレスポンスに組み込むことで、外部のデータソース(ナレッジベース、APIなど)から最新の関連情報を取得することができる。
    • 情報の遅れと知識の限界に対処する。 従来の大規模言語モデルの知識は静的である。機能呼び出しは、モデルがより正確で包括的な応答を生成するために、リアルタイムの情報やドメイン固有の知識にアクセスできるようにすることで、このギャップを埋める。
    • 使用例。
      • リアルタイムの情報照会。 例えば、現在の気象データ、最新のニュース情報、株価などを入手できる。
      • ナレッジベースの検索 例えば、社内のナレッジベース、製品ドキュメント、FAQなどを照会し、ユーザーにより専門的な回答を提供する。
      • APIデータ統合。 例えば、商品情報、フライト動態、地理的位置情報などを外部APIから取得し、対話内容を充実させる。
    • 実施する。 データ検索のための開発者定義関数(例. get_weathersearch_knowledge_base)、そして tools パラメータでモデルに提供される。モデルは外部情報が必要だと判断すると、これらの関数を呼び出して結果を取得し、最終的なレスポンスに統合する。
  2. 行動を起こす - モデル駆動型オートメーション
    • 情報提供を超えて、ハンズオンの実践を推進する。 関数呼び出しは、情報検索に限定されるものではなく、さらに踏み込んで、モデルが外部システムを動かして実際のオペレーションを実行できるようにすることで、より深い自動化と応用シナリオを可能にする。
    • モデルの実用性と応用性を高める これにより、モデルは単なる対話のパートナーではなく、ユーザーの様々なタスクをサポートするインテリジェントなアシスタントになることができる。
    • 使用例。
      • 自動化されたワークフロー。 例えば、フォームの送信、カレンダーイベントの作成、Eメールの送信、フライトやホテルの予約など。
      • アプリケーションコントロール。 例えば、アプリケーション(UI/フロントエンドまたはバックエンド)の状態の変更、スマートホームデバイスの制御などがある。
      • エージェント的ワークフロー。 例えば、会話の内容に応じて、より専門的なカスタマーサービス・システムに引き渡したり、より複雑な自動化プロセスを起動させたりすることができる。
    • 実施する。 特定の操作を実行するための開発者定義関数(例. send_emailcreate_calendar_event)、そして tools パラメータでモデルに提供される。モデルはユーザーの意図に基づいてこれらの関数を呼び出し、アクションをトリガーするために適切なパラメータを渡すことができます。

関数呼び出しV2のその他の主な機能(データ取得と実行アクションのサポート)。

  • tools パラメータと関数スキーマ。 関数名、説明、パラメータ定義など、モデルが呼び出すことができる関数を定義し管理する構造化された方法を提供し、モデルが関数を正確に理解し呼び出すことを保証します。
  • ストリクト・モード。 関数コールの信頼性と精度を向上させ、モデルが事前に定義されたパターンに厳密に適合した関数コールを出力するようにする。
  • ツール選択と並列関数呼び出し制御。 よりきめ細かい制御が可能になり、開発者は、特定の関数を強制的に呼び出したり、並列呼び出しの回数を制限したりするなど、モデル呼び出し関数の動作をアプリケーションのシナリオに合わせて調整できるようになります。
  • ストリーミング ユーザーエクスペリエンスを向上させ、関数パラメータの充填プロセスをリアルタイムで表示できるので、ユーザーはモデルの思考プロセスをより直感的に理解することができます。

概要

ファンクション・コーリングV2のコアバリューは、以下の通りである。 データ取得(RAG実施) 歌で応える アクションを実行する これら2つの機能は、ビッグ・ランゲージ・モデルの応用範囲を大きく広げる。 モデルが外部情報にアクセスし活用することで、よりスマートで実用的な応答を生成できるだけでなく、外部システムに操作を実行させ、より高度な自動化を実現することで、より強力なAIアプリケーションを構築する基盤を築くことができる。 RAGの実装としてのデータ取得は、知識集約型アプリケーションにおける関数呼び出しV2の重要な能力である。



これが公式のOpenAIだ。 関数呼び出し(関数呼び出し) モデルがデータをフェッチし、オペレーションを実行できるようにする記述の新しいバージョン。

関数呼び出し は、OpenAIのモデルがあなたのコードや外部サービスとやりとりするための強力で柔軟な方法を提供します:

データ取得 最新情報を取得し、モデルの応答に統合する(RAG)。 これは、ナレッジベースを検索したり、APIから特定のデータ(現在の気象データなど)を取得したりするのに便利です。
実行操作 フォームの送信、APIの呼び出し、アプリケーションの状態の変更(UI/フロントエンドまたはバックエンド)、ダイアログの引き渡しなどのプロキシワークフローアクションを実行します。

を作るだけならモデル生成JSONOpenAIの構造化出力に関するドキュメントを参照し、モデルが常にあなたが提供した出力と一致する出力を生成するようにしてください。 JSONスキーマ 返答はこうだ。

天気予報

get_weather関数を使った関数呼び出しの例

from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定位置的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
}
},
"required": [
"location"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)

輸出

[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}]

郵便

send_email関数を使った関数呼び出しの例

from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "send_email",
"description": "向给定的收件人发送包含主题和消息的电子邮件。",
"parameters": {
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "收件人的电子邮件地址。"
},
"subject": {
"type": "string",
"description": "电子邮件主题行。"
},
"body": {
"type": "string",
"description": "电子邮件消息正文。"
}
},
"required": [
"to",
"subject",
"body"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你能给 ilan@example.com 和 katia@example.com 发送邮件说“hi”吗?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)

輸出

[
{
"id": "call_9876abc",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"ilan@example.com\",\"subject\":\"Hello!\",\"body\":\"Just wanted to say hi\"}"
}
},
{
"id": "call_9876abc",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"katia@example.com\",\"subject\":\"Hello!\",\"body\":\"Just wanted to say hi\"}"
}
}
]

ナレッジベースを検索する

search_knowledge_base関数を使った関数呼び出しの例

from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "search_knowledge_base",
"description": "查询知识库以检索关于某个主题的相关信息。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "用户问题或搜索查询。"
},
"options": {
"type": "object",
"properties": {
"num_results": {
"type": "number",
"description": "要返回的排名靠前的结果数量。"
},
"domain_filter": {
"type": [
"string",
"null"
],
"description": "可选的域,用于缩小搜索范围(例如,“finance”,“medical”)。 如果不需要,则传递 null。"
},
"sort_by": {
"type": [
"string",
"null"
],
"enum": [
"relevance",
"date",
"popularity",
"alphabetical"
],
"description": "如何对结果进行排序。 如果不需要,则传递 null。"
}
},
"required": [
"num_results",
"domain_filter",
"sort_by"
],
"additionalProperties": False
}
},
"required": [
"query",
"options"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你能在 AI 知识库中找到关于 ChatGPT 的信息吗?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)

輸出

[{
"id": "call_4567xyz",
"type": "function",
"function": {
"name": "search_knowledge_base",
"arguments": "{\"query\":\"What is ChatGPT?\",\"options\":{\"num_results\":3,\"domain_filter\":null,\"sort_by\":\"relevance\"}}"
}
}]

 

中抜き

OpenAIモデルにアクセスできるようにするには、OpenAIモデルに 用具 の機能を拡張する。用具 それは2つの形がある:

関数呼び出し 開発者定義のコード。
ホスティングツール OpenAIが構築したツール。(例:ファイル検索、コードインタプリタ)は、アシスタントAPIでのみ利用可能です。

を最大限に活用する方法を解説します。 関数呼び出し モデルに独自の関数へのアクセス権を与えます。 システムのプロンプトやメッセージに基づいて、モデルはこれらの関数を呼び出すことを決定するかもしれません。テキストや音声を生成する代わりに(あるいはそれに加えて.

その後、関数コードを実行し、結果を送り返す必要がある。モデルは結果を最終的なレスポンスに統合する。

関数呼び出し(Function calling)-1

サンプル関数

次のように定義された実物をモデルに使用させることを検討してみよう。 ゲットウェザー 関数のステップ:

コードベースに実装されているget_weather関数のサンプル

import requests
def get_weather(latitude, longitude):
response = requests.get(f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m")
data = response.json()
return data['current']['temperature_2m']

先のフローチャートとは異なり、この機能には正確な ラチチュード 歌で応える 経度一般的ではない 場所 パラメータ。(しかし、我々のモデルは自動的に多くの場所の座標を決定することができる!)。

関数呼び出しステップ

定義された関数呼び出しモデルを、システムメッセージとユーザーメッセージとともに使用する。

ステップ1:定義されたget_weatherツールでモデルを呼び出す

from openai import OpenAI
import json
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定坐标的当前温度,单位为摄氏度。",
"parameters": {
"type": "object",
"properties": {
"latitude": {"type": "number"},
"longitude": {"type": "number"}
},
"required": ["latitude", "longitude"],
"additionalProperties": False
},
"strict": True
}
}]
messages = [{"role": "user", "content": "今天巴黎的天气怎么样?"}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)

ステップ2:モデルがどの関数を呼び出すかを決定する - モデルは名前と入力パラメータを返す。

補完.選択肢[0].メッセージ.ツールコール

[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"latitude\":48.8566,\"longitude\":2.3522}"
}
}]

ステップ3:関数コードの実行 - モデルのレスポンスを解析し、関数コールを処理する。

get_weather関数を実行する

tool_call = completion.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = get_weather(args["latitude"], args["longitude"])

ステップ4:結果をモデルに提供し、モデルが結果を最終的な回答に統合できるようにする。

結果を提供し、モデルを再度呼び出す

messages.append(completion.choices[0].message)  # append model's function call message
messages.append({                               # append result message
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
completion_2 = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)

ステップ4:モデルの反応-結果を出力に統合する。

完了_2.選択肢[0].メッセージの内容

"巴黎当前温度为 14°C (57.2°F)。"

 

関数の定義

関数を各APIリクエストの 用具 パラメータを 機能 オブジェクトの形で設定される。

関数はスキーマによって定義されます。スキーマは、関数が何を行い、どのような入力パラメータが期待されるかをモデルに通知します。 スキーマには以下のフィールドがあります:

フィールド 説明
名称 関数名(例:get_weather)
記述 機能をいつ、どのように使うかについての詳細情報
パラメーター 関数の入力パラメータのJSONスキーマを定義する。

サンプル・ファンクション・パターン

{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
],
"description": "温度将以什么单位返回。"
}
},
"required": [
"location",
"units"
],
"additionalProperties": False
},
"strict": True
}
}

につき パラメーター JSONスキーマによって定義されているため、プロパティ型、列挙、記述、ネストされたオブジェクト、再帰オブジェクトなど、JSONスキーマの豊富な機能を利用することができます。

(オプション)pydanticとzodによる関数呼び出し

関数モードを直接定義することを推奨していますが、SDKはヘルパーを提供しています。 ピダンティック 歌で応える ゾッド オブジェクトはパターンに変換される。 すべての ピダンティック 歌で応える ゾッド 機能がサポートされている。

関数パターンを表すオブジェクトの定義

from openai import OpenAI, pydantic_function_tool
from pydantic import BaseModel, Field
client = OpenAI()
class GetWeather(BaseModel):
location: str = Field(
...,
description="城市和国家,例如 Bogotá, Colombia"
)
tools = [pydantic_function_tool(GetWeather)]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)

ファンクション定義のベストプラクティス

明確で詳細な関数名、パラメータの説明、指示を書く。

  • 関数と各パラメーターが何に使われるのか(そしてそのフォーマット)、出力が何を表すのかを明確に記述する。
  • システムヒントを使用して、各機能をいつ(そしていつ)使用しないかを説明する。 通常は、モデルに何をすべきかを正確に伝える。
  • 特に、繰り返し起こる不具合を修正する場合の例とエッジケースを含む。(注目してほしい: 例を追加すると、推論モデルの性能が低下する可能性がある)。
    ソフトウェアエンジニアリングのベストプラクティスを適用する。

    • 機能を理解しやすく、直感的なものにする。(最小驚きの原則)
    • 列挙とオブジェクト構造を使って、無効な状態を表現できないようにする。(例えばtoggle_light(on: bool, off: bool) (無効通話可)
    • インターンテストに合格する インターン/人間は、あなたがモデルに与えたものだけで、その機能を正しく使うことができますか?(もしそうでなければ、どのような質問をされるでしょうか? その答えをプロンプトに追加してください)。

モデルの負担を最小限にし、可能な限りコードを使用する。

  • すでに知っているパラメータをモデルに入力させないこと。 例えば、前回の オーダーIDを設定したくない場合は オーダーID パラメータ - パラメータを設定する代わりに submit_refund()というコードを渡した。 オーダーID.
  • 常に連続して呼び出される関数をマージする。 例えば、常に query_location() に続いて mark_location()タグ付けロジックをクエリー関数呼び出しに移すだけです。精度を上げるには、関数の数を少なくすること。
    • さまざまな機能を使ってパフォーマンスを評価する。
    • 目標は常時20機能以下にすることだが、これはあくまでソフトな推奨に過ぎない。

OpenAIのリソースを活用する。

  • ある 遊び場 関数パターンの生成と反復
  • 大量の関数や困難なタスクについては、関数呼び出しの精度を向上させるための微調整を検討する。

トークンの使用

一番下のレベルでは、関数が、モデルが使用するように訓練された構文でシステムメッセージに注入されます。 これは、関数がモデルのコンテキスト制約に反してカウントされ、入力として使用されることを意味します。 トークン 料金 トークンの制限が発生する場合は、関数の数を制限するか、関数の引数に指定する説明の長さを制限することをお勧めします。

ツール仕様に定義されているファンクションが多い場合は、微調整を使用して使用するトークンの数を減らすこともできます。

 

関数呼び出しの処理

モデルが関数を呼び出したら、それを実行して結果を返さなければなりません。 モデルのレスポンスには0回、1回、またはそれ以上の呼び出しが含まれる可能性があるので、ベストプラクティスは複数の呼び出しがあると仮定することです。

レスポンスには ツールコール 配列があります。 アイドル(を含むもの(後で関数の結果を提出するときに使う)と 名称 とJSONエンコードされた 引数 な 機能.

複数の関数呼び出しによる応答例

[
{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
},
{
"id": "call_67890abc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Bogotá, Colombia\"}"
}
},
{
"id": "call_99999def",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"bob@email.com\",\"body\":\"Hi bob\"}"
}
}
]

関数コールを実行し、結果を追加する。

for tool_call in completion.choices[0].message.tool_calls:
name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
result = call_function(name, args)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})

上記の例では、各コールをルーティングするために、仮想的なcall_function を用意している。 これは、一つの可能な実装である:

関数呼び出しの実行と結果の追加

def call_function(name, args):
if name == "get_weather":
return get_weather(**args)
if name == "send_email":
return send_email(**args)

結果の書式設定

結果は文字列でなければなりませんが、フォーマットは自由です(JSON、エラーコード、プレーンテキストなど)。 モデルは必要に応じて文字列を解釈します。

関数に戻り値がない場合(例えば 送信メール)、単に成功または失敗を示す文字列を返す。(例えば 成功)

結果を回答に反映させる

その結果を メッセージ その後、最終的な返答のためにモデルに送り返すことができる。

結果をモデルに送り返す

completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)

最終回答

"巴黎大约 15°C,Bogotá 大约 18°C,并且我已经向 Bob 发送了那封邮件。"

 

その他の構成

ツール選択

デフォルトでは、いつ、いくつのツールを使うかはモデルが決定する。 あなたは ツールチョイス パラメーターは特定の動作を強制する。

  • オート: (デフォルト) は、0個、1個、または複数の関数を呼び出す。 tool_choice: "auto"
  • 必須:1つ以上の関数を呼び出す。 tool_choice: "必須"
  • 強制関数:特定の関数を正確に呼び出す。 tool_choice: {"type": "function", "function": {"name": "get_weather"}}.

関数呼び出し(Function calling)-2

を設定することもできます。 ツールチョイス に設定する。 "なし"パスしない関数の挙動をシミュレートする。

並列関数呼び出し

モデルは、1つのラウンドで複数の関数を呼び出すこともできる。 これは パラレル・ツール・コール に設定する。 擬似 を使うことで、正確に0個または1個のツールが呼び出されるようになる。

注目してほしい: 現在、1つのモデルが1つのラウンドで複数の関数を呼び出す場合、strict modevはこれらの呼び出しを無効にする。

厳密モデル

そうしれいかん 厳しい に設定する。 真の は、関数呼び出しが最善を尽くすのではなく、確実に関数パターンに従うようにします。 常にストリクト・モードを有効にすることをお勧めする。

一番下の厳密モードは、我々の構造化出力機能を利用することで実装されている:

  • に関して パラメーター の各オブジェクトに対して追加プロパティ に設定する必要がある。 擬似.
  • プロパティのすべてのフィールドには 必須.

これを行うには ヌル する タイプ オプションでオプションのフィールドを指定します(以下の例を参照)。

ストリクト・モードを有効にする

{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": ["string", "null"],
"enum": ["celsius", "fahrenheit"],
"description": "温度将以什么单位返回。"
}
},
"required": ["location", "units"],
"additionalProperties": False
}
}
}

ストリクトモードを無効にする

{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度将以什么单位返回。"
}
},
"required": ["location"],
}
}
}

プレイグラウンドで生成されるすべてのパターンは、ストリクトモードが有効になっている。

厳密モードを有効にすることをお勧めしますが、これにはいくつかの制限があります:

  • JSONスキーマの一部の機能はサポートされていません。(サポートされているスキーマを参照)。
  • パターンは最初のリクエストで追加処理を受けます(その後キャッシュされます)。 あなたのパターンがリクエストごとに異なる場合、待ち時間が長くなる可能性があります。
  • パターンはパフォーマンスのためにキャッシュされ、ゼロ・データ保持の対象にはならない。

 

ストリーミング

ストリーミングは、モデルがパラメータを埋めていくときに呼び出される関数を表示したり、パラメータをリアルタイムで表示したりすることで、進捗状況を示すために使うことができる。

関数呼び出しのストリーミングは、通常のレスポンスのストリーミングとよく似ています。 ストリーム に設定する。 真の でデータを取得する。 デルタ オブジェクトのブロック。

ストリーミング関数呼び出し

from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定位置的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
}
},
"required": ["location"],
"additionalProperties": False
},
"strict": True
}
}]
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools,
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta
print(delta.tool_calls)

出力 delta.tool_calls

[{"index": 0, "id": "call_DdmO9pD3xa9XTPNJ32zg2hcA", "function": {"arguments": "", "name": "get_weather"}, "type": "function"}]
[{"index": 0, "id": null, "function": {"arguments": "{\"", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "location", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "\":\"", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "Paris", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": ",", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": " France", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "\"}", "name": null}, "type": null}]
null

しかし、ブロックを1つにまとめるのではなく 内容 文字列に集約される。 引数 JSONオブジェクト。

モデルが1つ以上の関数を呼び出すとき、それぞれの デルタ な ツールコール フィールドが入力される。 それぞれ ツールコール 以下のフィールドを含む:

フィールド 説明
インデックス デルタに対応する関数コールを特定する
アイドル ツールコールのID。
機能 関数呼び出しのデルタ(名前と引数)
タイプ tool_callの型(関数呼び出しの場合は常に関数)

これらのフィールドの多くは、各ツールコールの最初の デルタ 例えば アイドルそして関数名 歌で応える タイプ.

以下はそのコード・スニペットである。 デルタ 最終的な集計 ツールコール オブジェクトの中にある。

積算ツール_コールデルタ

final_tool_calls = {}
for chunk in stream:
for tool_call in chunk.choices[0].delta.tool_calls or []:
index = tool_call.index
if index not in final_tool_calls:
final_tool_calls[index] = tool_call
final_tool_calls[index].function.arguments += tool_call.function.arguments

蓄積されたfinal_tool_calls[0]。

{
"index": 0,
"id": "call_RzfkBpJgzeR0S242qfvjadNe",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}
無断転載を禁じます:チーフAIシェアリングサークル " OpenAI 関数呼び出し
ja日本語