OpenAI API 高度な関数呼び出し実装プラグイン!

OpenAI API 高度な関数呼び出し実装プラグイン!

関数呼び出しの紹介

関数呼び出しとは何ですか?

OpenAI Chat API公式ドキュメント: Chat API[1]

関数呼び出しの公式紹介: 関数呼び出し[2]

写真

開発者は、gpt-4-0613 および gpt-3.5-turbo-0613 に関数を記述し、それらの関数を呼び出すための引数を含む JSON オブジェクトを出力するようにモデルをインテリジェントに選択できるようになりました。これは、GPT の機能を外部ツールや API とより確実に接続するための新しい方法です。

これらのモデルは、関数を呼び出す必要があるタイミングを(ユーザー入力に基づいて)検出し、関数のシグネチャに準拠した JSON で応答するように微調整されています。関数呼び出しにより、開発者はモデルから構造化されたデータをより確実に取得できるようになります。たとえば、開発者は次のことが可能です。

  • 外部ツール(ChatGPTプラグインなど)によって呼び出されたチャットボットを使用して質問に答える

「次の金曜日にコーヒーを飲みたいかどうか Anya にメールする」のようなクエリを send_email(to: string, body: string) のような関数呼び出しに変換したり、「ボストンの天気はどうですか?」を get_current_weather(location: string, unit: 'celsius' | 'fahrenheit') に変換します。

  • 自然言語をAPI呼び出しまたはデータベースクエリに変換する

「今月の顧客上位 10 人は誰ですか?」を get_customers_by_revenue(start_date: string, end_date: string, limit: int) のような内部 API 呼び出しに変換したり、「Acme 社は先月何件の注文を出しましたか?」を sql_query(query: string) を使用して SQL クエリに変換します。

  • テキストから構造化データを抽出する

Wikipedia の記事に記載されているすべての人物を抽出するために、extract_people_data(people: [{name: string, birthday: string, location: string}]) という関数を定義します。

これらのユースケースは、/v1/chat/completions エンドポイントの新しい API パラメータ functions および function_call を通じて有効になります。これにより、開発者は JSON スキーマを介して関数を記述し、オプションでモデルに特定の関数を呼び出すように要求できます。

一言で説明すると、GPTに独自の関数を統合できるということです。

関数呼び出しはどのような問題を解決しますか?

関数呼び出しは本質的にプラグインです。

プラグイン機能は OpenAI に武器を追加するのと同じであり、開発者は自由に武器をインストールして機能を強化できます。

データのリアルタイムの問題

写真

langchain とは何ですか? と彼に尋ねます。トレーニングセットは2021年までなので、分からないと答えます。しかし、関数呼び出しを使用すると、Google/Baidu 検索 API を統合し、GPT にネットワーク機能を追加する関数を記述できるため、検索エンジン機能を利用してデータの動的な更新をサポートできます。

既存システムとの統合の問題

写真

今日の天気はどうか聞いてみますか? ChatGPT データセットはオフラインであるため、リアルタイムの天気を取得するという要求を満たすことができません。しかし、関数呼び出しを使用すると、天気取得 API を呼び出してリアルタイムの天気情報を取得する関数を作成し、自然言語を通じて大規模モデルの対話機能と対話することができます。

関数呼び出しの使い方

説明書

通常のチャット会話との違いは、2つの追加パラメータが追加されることです

  • 関数: カスタム関数ライブラリを宣言する
  • funcion_call: 大規模モデルが関数呼び出し関数を使用するタイミングを制御します

写真

通常コード:

 completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages )

関数呼び出し:

 completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, # 增加额外两个参数functinotallow=functions, function_call="auto", # auto is default, but we'll be explicit )

リアルタイム天気予報の練習

プロセス全体では、2 回の OpenAI Chat インターフェース呼び出しが必要です。

呼び出しプロセス

1. 関数を定義する

API から取得するローカル関数 get_current_weather を定義します。ここでは、パラメータ出力の単純なシミュレーションを記述するだけです。

次に、OpenAI のドキュメントで要求される形式で、get_current_weather インターフェース関数の json パラメータを定義します。

2. インターフェースへの最初の呼び出し

大規模モデルによって分析された関数名とパラメータを返します。

結果は次のとおりです。

 { "id": "chatcmpl-8EIYxuSvhxmvYRE2UZI19fodbhXGv", "object": "chat.completion", "created": 1698418639, "model": "gpt-3.5-turbo-0613", "choices": [ { "index": 0, "message": { "role": "assistant", "content": null, "function_call": { "name": "get_current_weather", "arguments": "{\n \"location\": \"Boston, MA\",\n \"unit\": \"celsius\"\n}" } }, "finish_reason": "function_call" } ], "usage": { "prompt_tokens": 86, "completion_tokens": 26, "total_tokens": 112 } }

3. ローカル関数の呼び出し

戻り値を取得し、ローカルPythonメソッドを呼び出す

4. インターフェースを2回目に呼び出す

最初のインターフェースの戻り値メッセージを、ローカル関数によって呼び出されたインターフェースと組み立て、再度インターフェースを呼び出します。

結果は次のとおりです。

 { "role": "assistant", "content": "The weather in Boston today is 20 degrees Celsius." }

コードの実装

完全なコードリンク: 関数呼び出しの例 [3]

 # function_calling.py import openai import json openai.api_key = 'sk-NYsoG3VBKDiTuvdtC969F95aFc4f45379aD3854a93602327' openai.api_base = "https://key.wenwen-ai.com/v1" # 1. 定义函数# 1.1 定义模拟获取天气的本地函数def get_current_weather(location, unit): # Call the weather API return f"It's 20 {unit} in {location}" # 1.2 定义函数字典方便调用function_dict = { "get_current_weather": get_current_weather, } # 1.3 定义chat接口需要的函数functions = [ { "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, eg San Francisco, CA", }, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, }, "required": ["location"], }, } ] # 2. 第一次调用chat接口,返回的是函数调用的提示messages = [ {"role": "user", "content": "What's the weather like in Boston today with celsius?"}] completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, functinotallow=functions, function_call="auto", # auto is default, but we'll be explicit ) print(completion) # 3. 从结果接口的结果中获取函数调用的参数进行本地函数调用# 3.1 获取函数调用的参数response_message = completion.choices[0].message function_name = response_message["function_call"]["name"] function_args = json.loads(response_message["function_call"]["arguments"]) # 3.2 调用本地函数function_response = function_dict.get(function_name)(**function_args) # 3.3 将本地函数的结果作为chat接口的输入messages.append(response_message) messages.append({ "role": "function", "name": function_name, "content": function_response, }) # 4. 第二次调用chat接口,返回的是chat的最终结果completion_final = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, ) print(completion_final.choices[0].message)

上記のコードのキーは私が管理しており、誰でも自由に使用できます。コードは直接実行できます。

 python3.9 function_calling.py

参考文献

[1]チャットAPI: https://platform.openai.com/docs/api-reference/chat

[2] 関数呼び出し: https://openai.com/blog/function-calling-and-other-api-updates

[3] 関数呼び出しの例: https://github.com/hehan-wang/openai-demo/blob/main/function_calling.py

<<:  ロボット自動化を実装する5つの方法

>>: 

ブログ    
ブログ    

推薦する

崑崙Core2が量産開始:性能が2~3倍向上し、中国の産業知能に強力な「コア」を注入

8月18日、百度とCCTVニュースは共同で「百度ワールド2021」カンファレンスを開催し、AIが何千...

推論性能はH100の10倍! 21歳の中国人男性がハーバード大学を中退しAI加速チップ「Sohu」を開発、2人の会社の価値は3400万ドル

ピカのような神レベルの起業家物語が再び起こるでしょうか?ハーバード大学を中退した2人の若者が、大規模...

Huawei の徐文偉氏: インテリジェントな未来を構想する (HC カンファレンス PPT + スピーチ全文)

第3回HUAWEI CONNECT 2018が2018年10月10日に上海万博展示コンベンションセン...

...

3D特殊効果アーティストはもう家に帰れる丨科学

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

サイバーセキュリティにおける人工知能の4つの利点と課題

この記事では、サイバーセキュリティにおける機械学習と人工知能について説明します。 AI の利点と課題...

...

分散機械学習プラットフォームの比較: Spark、PMLS、TensorFlow、MXNet

[[200819]]本稿では、分散システムの観点から現在の機械学習プラットフォームのいくつかを研究...

...

史上最大規模のAIによる疫病対策キャンペーン

普段は人工知能技術にあまり興味がない人でも、この特別な期間中はAIという文字の組み合わせに注目するで...

生成型人工知能とは何かについて話しましょう

ジェネレーティブ AI は、これまでビジネス パーソンに依存していたモデルをアルゴリズム担当者が生成...

...

...

ビッグデータと人工知能のために生まれた新しい職業:アルゴリズム専門家

[[69076]]映画「マトリックス」でレオが銃弾の雨をかわす難しい動きを誰もが覚えているはずだ。こ...

0パラメータ+0トレーニング、3D点群解析手法Point-NNは複数のSOTAを更新します

論文リンク: https://arxiv.org/pdf/2303.08134.pdfコードアドレス...