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つの方法

>>: 

ブログ    
ブログ    
ブログ    

推薦する

人工知能が不動産ビジネスの成長を加速させる方法

人工知能 (AI) は、今後最も期待されるテクノロジーの 1 つです。テクノロジーがビジネスに与える...

...

AES暗号化アルゴリズムの強度が弱まった

この脆弱性は、広範囲にわたる暗号分析を行った3つの大学とマイクロソフトの研究者によって発見されたが、...

[ディープラーニングシリーズ] PaddlePaddle と Tensorflow を使用したクラシック CNN ネットワーク AlexNet の実装

先週、私たちは PaddlePaddle と Tensorflow を使用して画像分類を実装し、自分...

2019 年のディープラーニング自然言語処理のトップ 10 開発トレンド

この記事では、最近 FloydHub ブログで Cathal Horan が紹介した自然言語処理のト...

Ctrip の AI 推論パフォーマンスの自動最適化プラクティス

[[424530]] 1. 背景近年、人工知能はセキュリティ、教育、医療、観光などの産業や生活の場面...

大規模モデルによって NLP エンジニアは時代遅れになったのでしょうか?

1. 新しく職場に入る1. 職場に入るときに直面する問題初めて職場に入るとき、新卒から社会人へと移...

...

アマゾンはドローン配送戦略に再び焦点を当て、労働組合は解雇の可能性に懸念を表明

アマゾンは、同社が「未来を実現する」のに役立つと主張する一連の新しいドローンとロボットを発表した。し...

AIとCVで「Jump Jump」をプレイし、張小龍の最高スコア6000以上を上回った

WeChatミニプログラムにゲーム「Jump Jump」が登場して以来、多くのWeChatユーザーが...

...

...

...

AIの計算能力は70年間で6億8000万倍に増加し、3つの歴史的段階でAI技術の指数関数的爆発が目撃されました。

電子コンピュータは 1940 年代に発明され、登場から 10 年以内に人類史上初の AI アプリケー...

...