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

>>: 

ブログ    
ブログ    
ブログ    

推薦する

科学研究ビッグデータにおける人工知能技術の応用

数十年にわたる技術開発を経て、人工知能は新たな時代、つまり人工知能の時代に入りました。新しい時代を迎...

異常検出のためのいくつかのグラフ分割アルゴリズム

セキュリティ分野では、アカウント取引の異常や異なるイベント間の相関関係など、さまざまなシナリオで「グ...

...

インテル、コード名「NLP Architect」の自然言語処理用オープンソースライブラリを発表

[[230933]] 1年前に設立されたインテルAIラボは最近、新たな動きを見せている。数日前、In...

2020年に中国で期待されるAI企業トップ10

近年の新興技術として、人工知能は人々の生活のあらゆる側面に静かに浸透し、比較的ホットな産業に発展しま...

...

2021 年の年収 100 万ドルの AI 職種のトレンド: データ サイエンス、Python、自動運転、AIOps に注目していますか?

今年も終わりですね! 2021年が近づいてきました。今年は流行が落ち着いてきましたが、AIの発展は止...

アルゴリズム問題の分析プロセス

[[384555]]トピックを理解する最近アルゴリズムの問​​題をたくさん見ていますが、小さな問題を...

GPT-4 コードインタープリターのベンチマーク! CUHKはモデルに数学の問題を解くコードを書かせ、そのスコアはGPT-4を上回る

GPT-4 コードインタープリターをベンチマークし、CUHK の最新の研究では「大きな動き」が発表さ...

適切な AI データ ストレージを選択するための 6 つの考慮事項

間違ったストレージ AI プラットフォームを採用すると深刻な影響が生じる可能性があるため、製品の選択...

...

フロンティアモデルフォーラムは責任あるAIの創造を目指している

政府や社会からの監視が強まる中、人工知能(AI)の責任ある開発を促進し、業界標準を確立することを目的...

IoTとAIの組み合わせ:さまざまなスマートフォンが互いに学習できるようにする

センサーといえば、まず思い浮かぶのはウェアラブルデバイスです。今ではウェアラブルデバイスが広く普及し...

AIスタートアップが成熟するための4つの段階と懸念事項

[[281520]] [51CTO.com クイック翻訳] 現時点では、「人工知能企業」が何であるか...