AIパーソナル・ラーニング
と実践的なガイダンス

関数呼び出し

OpenAI機能呼び出しV2の特徴

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

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

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

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

概要

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



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

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

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

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

天気予報

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

from openai import OpenAI
クライアント = OpenAI()
ツール = [{
"タイプ": "関数", "ファンクション": {
「function": {
"name": "get_weather", "description": "指定された場所の現在の気温を取得する。
"description": "指定された場所の現在の気温を取得する。",
「parameters": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
「location": {
「タイプ": "文字列", "説明": "都市名と国名
「description": "都市と国、例:コロンビア、ボゴタ"
}
}, "required": [ "city", "description": "都市と国。}
"必須": [
"location"
], "additionalProperties": False
"additionalProperties": False
}, "strict": True
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o"、
messages=[{"role": "user", "content": "How's the weather in Paris today?],
tools=tools
)
print(completion.choices[0].message.tool_calls)

輸出

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

郵便

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

from openai import OpenAI
クライアント = OpenAI()
ツール = [{
"タイプ": "関数", "ファンクション": {
「function": {
"name": "send_email", "description": "指定された件名にメールを送信します。
"description": "件名とメッセージを指定された受信者にメールを送信する。",
「パラメータ": {
"タイプ": "オブジェクト", "プロパティ": {
"properties": {
"to": {
"type": "string", "description": { "受信者のメールアドレス。
"description": "受信者のメールアドレス。"
},
「件名": {
"type": "string"、
"description": "メールの件名。"
},
「本文": {
"type": "string"、
"説明": "電子メールのメッセージ本文。"
}
},
"required": [
"to".
"subject".
"body".
], "additionalProperties": False
「additionalProperties": False
}, "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\":\95\",\"\","\","\".
"arguments":"{"to": "ilan@example.com", "subject": "Hello!", "body": "Just wanted to say hi" }"
}
}, {
{
"id": "call_9876abc", "type".

「function": {
"name": "send_email", "arguments":"{\to_":\95\",\\font/colour
"arguments":"{"to": "katia@example.com", "subject": "Hello!", "body": "Just wanted to say hi" }"
}
}
]

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

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

from openai import OpenAI
クライアント = OpenAI()
ツール = [{
"タイプ": "関数", "ファンクション": {
「function": {
"name": "search_knowledge_base", "description": "トピックに関する情報をナレッジベースから検索する。
"description": "トピックに関する関連情報を取得するために知識ベースを検索する。",
"parameters": {
"type": "object", "properties": { 以下のとおりである。
"properties": {
"query": {
"type": "string", "description": { "ユーザーの質問または検索クエリ。
「description": "ユーザーの質問または検索クエリ。
},
「オプション": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
"num_results": {
"type": "number", "description": "結果リストの先頭に戻る。
"説明": "トップランクの結果を返す数。"
},
"domain_filter": {
"type": [
"string".
"null"
], "description".
"説明": "検索を絞り込むためのオプションのドメイン(例:"金融"、"医療")。 必須でない場合はnullを渡す。"
},
"sort_by": {
"type": [
"string".
"null"
], "enum": [ "enum": [ "string", "null
"enum": [
"relevance".
"date".
"人気度".
「アルファベット順"
], "description": "結果の並べ替え方法。
"description": "結果の並べ替え方法。 必要なければnullを渡す。"
}
},
"必須": [
"num_results".
"domain_filter"、
"sort_by"
], "additionalProperties": False
"additionalProperties": False
}
}, "additionalProperties": False }.
"required": [
"クエリ", "オプション": False } }, "必須": [
"オプション"
], "additionalProperties": False
「additionalProperties": False
}, "strict": True
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o"、
messages=[{"role": "user", "content": "以下の情報を見ることができます。 チャットGPT 情報の?],
ツール
)
print(completion.choices[0].message.tool_calls)

輸出

[{
"id": "call_4567xyz"、
"type": "function"、
「function": {
"name": "search_knowledge_base", "arguments": "{query": "ChatGPTとは?
"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関数のサンプル

インポートリクエスト
def get_weather(latitude, longitude): response = requests.
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")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
インポート json
クライアント = OpenAI()
tools = [{」を指定します。
「タイプ": "関数", "関数": {
「function": {
"name": "get_weather", "description": "与えられた座標の現在の気温を取得する。
"description": "与えられた座標の現在の気温を摂氏で取得する。",
「parameters": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
"latitude": {"type": "number"}, "description": {"parameters": {"type": "object", "properties": {
"経度": {"タイプ": "数値"}。
}, "required": ["latitude": ["数値"], "longitude": {"type": "数値"}]。
"必須": ["緯度", "経度"], "additionalProperties": F
"additionalProperties": False
}, "strict": True
"strict": True
}
}]
messages = [{"role": "user", "content": "今日のパリの天気は?" }].
完了 = client.chat.completions.create(
model="gpt-4o"、
messages=messages、
tools=tools.
)

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

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

[{
"id": "call_12345xyz"、
"type": "function"、
「function": {
"name": "get_weather", "arguments": "{8566, \", "arguments": "48.8566, \
"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.引数)
result = get_weather(args["latitude"], args["longitude"])

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

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

messages.append(completion.choices[0].message)モデルの関数呼び出しメッセージを追加する。
messages.append({#の結果メッセージを追加する

"tool_call_id": tool_call.id, "content": str(result)
"内容": str(result)
})
completion_2 = client.chat.completions.create(
model="gpt-4o"、
messages=messages、
tools=tools, )
)

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

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

「パリの現在の気温は14℃。

 

関数の定義

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

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

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

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

{
「タイプ": "関数", "関数": {。
「function": {
"name": "get_weather"、
"description": "指定された場所の現在の天気を取得する。",
「parameters": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
「location": {
「タイプ": "文字列", "説明": "都市名と国名
「description": "都市と国、例:コロンビア、ボゴタ"
},
「単位": {

"enum": [
「摂氏", "華氏
「華氏"
], "description": "気温。
"description": "温度を返す単位。"
}
}, "description": "温度を返す単位。
"必須": [
"location".
"単位"
], "additionalProperties": False
「additionalProperties": False
}, "strict": True
"strict": True
}
}

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

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

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

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

from openai import OpenAI, pydantic_function_tool
from pydantic import BaseModel, Field
クライアント = OpenAI()
クラス GetWeather(BaseModel).
location: str = Field(
...description="都市と国、例えばボゴタ。
description="都市と国、例:コロンビア、ボゴタ")
)
tools = [pydantic_function_tool(GetWeather)]。
補完 = client.chat.completions.create(
model="gpt-4o"、
messages=[{"role": "user", "content": "What's the weather in Paris today?" }] , [{"role": "user", "content": "What's the weather in Paris today?,
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".
「function": {
"name": "get_weather", "arguments": "{"location":୧Paris, France"}。
"arguments":"{\"location\":\"Paris, France\"}"

}, { "name": "get_weather", "arguments": "{"location":\"Paris, France"}"}"}。
{
"id": "call_67890abc", "type": "function", {。
"type": "function", "function": { "id": "call_67890abc", "type": "function", "function".
「function": {
"name": "get_weather", "arguments": "ボゴタ", "location": "ボゴタ", "arguments": "ボゴタ"。
"arguments":"{\"location\":\"Bogotá, Colombia\"}"
}
}, }
{
"id": "call_999999def", "type": "function", {。
"type": "function", "function": { "call_99999def", { "id": "call_99999def", "type": "function", "function".
「function": {

"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.引数)
result = call_function(name, args)
messages.append({
"role": "tool", "tool_call_function.function.arguments", result = call_function.arguments
"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℃、ボゴタは18℃だ。

 

その他の構成

ツール選択

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

  • オート: (デフォルト) は、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はこれらの呼び出しを無効にする。

厳密モデル

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

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

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

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

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

{
「タイプ": "関数", "関数": {。
「function": {
"name": "get_weather"、
"description": "指定された場所の現在の天気を取得する。",
"strict": true, "parameters": { 以下のパラメータを指定する。
「parameters": {
"type": "object", "properties": { 以下のとおりである。
「プロパティ": {
「location": {
"type": "string", "description": "City", "description": "Bogotá、
"説明": "都市と国、例えばコロンビアのボゴタ"
},
「単位": {
"type": ["string", "null"], "enum": ["celsius", ["celsius"], "description": "City and country, e.g. Bogotá, Colombia" }, "units": {
"enum": ["celsius", "fahrenheit"], "description": "温度は以下のようになります。
"description": "どのような単位で温度を返すか。"
}
},
"required": ["location", "units"], "additionalProperties".
「additionalProperties": False
}
}
}

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

{
「タイプ": "関数", "関数": {。
「function": {
"name": "get_weather"、
"description": "指定された場所の現在の天気を取得する。",
「parameters": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
「location": {
「タイプ": "文字列", "説明": "都市名と国名
「description": "都市と国、例:コロンビア、ボゴタ"
},
「単位": {

「enum": ["celsius", "fahrenheit"], "description": "気温。
"description": "どのような単位で温度を返すか。"
}
},
"required": ["location"], "description": "温度を返す単位。" } }, "required": ["location"], "description": "温度を返す単位。


}

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

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

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

 

ストリーミング

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

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

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

from openai import OpenAI
クライアント = OpenAI()
ツール = [{
"タイプ": "関数", "ファンクション": {
「function": {
"name": "get_weather", "description": "指定された場所の現在の気温を取得する。
"description": "指定された場所の現在の気温を取得する。",
「parameters": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
「location": {
「タイプ": "文字列", "説明": "都市名と国名
「description": "都市と国、例:コロンビア、ボゴタ"
}
}, "required".

「additionalProperties": False
}, "strict": ["location"], "additionalProperties": False
「strict": True
}
}]
stream = client.chat.completions.create(
model="gpt-4o"、
messages=[{"role": "user", "content": "How's the weather in Paris today?" }] , [{"role": "user", "content": "How's the weather in Paris today?,
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": "location", "name": null}, "type": null}] ]。

["index": "0", "id": "null", "function":{"arguments": "Paris", "name": "null}, "type": "null}}]]。
[index": 0, "id": null, "function": {"引数": ",", "名前": null}, "タイプ": null}]] 。
[index": 0, "id": null, "function": {"arguments": " France", "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
インデックスが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": {
"名前": "get_weather", "引数": {。
"arguments":"{\"location\":\"Paris, France\"}"
}
}
無断転載を禁じます:チーフAIシェアリングサークル " 関数呼び出し

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語