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と新技術が商業用不動産投資に革命を起こす

商業用不動産業界は進化を遂げており、人工知能 (AI) などのテクノロジーが、このダイナミックな市場...

AIとMLでドキュメントを自動化する方法

[[312937]] [51CTO.com クイック翻訳] かつて紙は必須の事務用品とみなされ、ほと...

...

オートメーション・エニウェア、世界初のウェブベースRPAプラットフォームを発表

RPA(ロボティック・プロセス・オートメーション)業界のリーダーであるオートメーション・エニウェアは...

OpenAI従業員:エンジニアリングスキルは誇張されているが、人との付き合い方を学ぶことの方が重要

12月29日のニュース、プロンプトエンジニア、つまり、人工知能モデルを誘導して最良の出力を生成するチ...

Pythonでゲームボーイエミュレーターを作成し、AIモデルをトレーニングする:デンマーク人の大学のプロジェクトが大ヒット

Atari ゲームを使って人工知能を研究するのは、ちょっと現実的ではないと感じますか?これでゲームボ...

...

インテリジェントな運用とメンテナンスからスマートな運用まで、Qingchuang Technologyは企業に探偵シャーロックの能力を提供します

[51CTO.com からのオリジナル記事] 運用保守作業は、初期の手動運用保守から自動化運用保守、...

リアルタイム6自由度オブジェクトトラッキングを実現するDeepACが登場

本記事では、国立国防科技大学の劉宇教授チームと浙江大学-SenseTime合同研究室の周暁偉教授チー...

人工知能は教育にどのように活用されていますか?ここに実際の例をいくつか示しますので、ぜひご覧ください。

教育者、心理学者、親たちが、子どもがスクリーンを見る時間の長さについて議論する一方で、人工知能や機械...

機械学習の決定木とランダムフォレストモデル

[[206785]]決定木導入決定木は機械学習において非常に一般的な分類方法です。すべてのアルゴリズ...

Meta AI が Omnivore をリリース: 画像、動画、3D データの分類タスクを処理できるモデル

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

コンテストを利用して学習を促進し、エコシステムを共同で構築し、人工知能を普及させましょう。

[元記事は51CTO.comより] 2021年7月12日、上海紫竹コートヤードホテルで、神府改革革...