OpenAI 関数呼び出し:はじめるための例
Updated on
人工知能(AI)の進化する風景の中で、OpenAIはゲームチェンジャーとして浮上しました。OpenAIの関数呼び出しは、開発者がAIモデルとやり取りする方法を根本的に変革しています。この記事では、OpenAI関数呼び出しの詳細なガイドと、アプリケーションに活かす方法について詳しく説明します。
OpenAI 関数呼び出しの理解
ヘッダーに定義されたOPEN_API_KEYを使用して https://api.openai.com/v1/chat/completions
に送信されるAPI呼び出しを考えてみましょう。この呼び出しの目的は、ミーティングをスケジュールするために使用できるJSONファイルを生成することです。モデルに送信されるJSONドキュメントは次のようになります:
{
"model": "gpt-3.5-turbo-0613",
"messages": [
{
"role": "user",
"content": "John Doeさんと来週の火曜日、午後3時にミーティングをスケジュールしてください。"
}
],
"functions": [
{
"name": "schedule_meeting",
"description": "ミーティングをスケジュールしてください。",
"parameters": {
"type": "object",
"properties": {
"attendee": {
"type": "string",
"description": "ミーティングの出席者"
},
"date": {
"type": "string",
"description": "ミーティングの日付"
},
"time": {
"type": "string",
"description": "ミーティングの時間"
}
}
}
}
]
}
モデルは、コードから schedule_meeting
関数を呼び出すために使用できるJSONの出力を生成します。
OpenAI 関数呼び出しの現実世界での応用
株式市場の分析の例を考えてみましょう。ユーザの発話は次のように定義されます:「Appleの株価はいくらですか?」。定義されたパラメータは以下の通りです:ticker_symbol。
{
"model": "gpt-3.5-turbo-0613",
"messages": [
{
"role": "user",
"content": "Appleの株価はいくらですか?"
}
],
"functions": [
{
"name": "get_stock_price",
"description": "現在の株価を取得する",
"parameters": {
"type": "object",
"properties": {
"ticker_symbol": {
"type": "string",
"description": "銘柄のティッカーシンボル"
}
}
}
}
]
}
モデルは、コードから get_stock_price
関数を呼び出すために使用できるJSONの出力を生成します。
OpenAI 関数呼び出しの力
OpenAIの関数呼び出しは、正しい方向に大きく進化を遂げました。これにより、Large Language Model (LLM) は、自然な会話形式だけでなく、他のシステムが利用できる形式にも出力を構成することができるようになりました。この機能は、人間の利用ではなく、機械が利用するためのAPI形式の出力を生成します。
考慮すべきいくつかの点があります。プログラム上では、チャットボットや対話型UIは、LLMへの出力がJSON形式である必要があることを知る必要があります。したがって、出力タイプを検出するためのいくつかの分類が必要になります。コンプリーションLLMへの入力には、あらかじめ定義されたテンプレートが存在する必要があります。JSONテンプレートは、LLMに値をどのように埋めるかをガイドします。埋めるべきパラメータは明確に定義されている必要があります。
OpenAI 関数呼び出しの現実世界での応用
OpenAI関数呼び出しはさまざまな応用があります。例えば、外部APIを呼び出して質問に答えるチャットボットの作成に使用できます。また、自然言語を構造化されたJSONデータに変換したり、構造化されたデータをテキストから抽出したりすることもできます。
旅行の予約の例を考えてみましょう。ユーザの発話は次のように定義されます:「ボンからアムステルダムへの旅行を妻、母、そして私の2人の息子と娘のために予約する必要があります。私も一緒に行きます。航空会社は直行便でなければなりません。」。定義されたパラメータは以下の通りです:destination, departure, number_people, travel_model。
{
"model": "gpt-3.5-turbo-0613",
"messages": [
{
"role": "user",
"content": "ボンからアムステルダムへの旅行を妻、母、そして私の2人の息子と娘のために予約する必要があります。私も一緒に行きます。航空会社は直行便でなければなりません。"
}
],
"functions": [
{
"name": "book_travel",
"description": "旅行を予約する",
"parameters": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "旅行先"
},
"departure": {
"type": "string",
"description": "どこから出発するか"
},
"number_people": {
"type": "string",
"description": "何人が旅行しますか"
},
"travel_mode": {
"type": "string",
"description": "どの交通手段で旅行するか"
}
}
}
}
]
}
モデルは、コードから book_travel
関数を呼び出すために使用できるJSONの出力を生成します。
OpenAI 関数呼び出し:未来への一歩
OpenAIの関数呼び出し機能は、AI技術の急速な進歩を示すものです。これにより、開発者はモデルからより信頼性のある構造化データを得ることができます。この機能は、GPTの機能を外部ツールやAPIとより確実に接続する新しい方法です。 2023年6月、OpenAIは、より可操作なAPIモデル、関数呼び出しの機能、長いコンテキスト、そして低価格といったアップデートを発表しました。開発者は、gpt-4-0613およびgpt-3.5-turbo-0613に対して関数を説明し、その関数呼び出しの引数を含むJSONオブジェクトを出力するようモデルにインテリジェントに選択させることができます。
この機能により、開発者は外部ツールを呼び出して質問に答えるチャットボットを作成したり、クエリを関数呼び出しに変換したり、自然言語をAPI呼び出しやデータベースクエリに変換したり、テキストから構造化データを抽出したりすることが可能となります。これらのユースケースは、/v1/chat/completions
エンドポイントの新しいAPIパラメータfunctions
とfunction_call
によって有効化されており、開発者はJSON Schemaを介してモデルに関数を説明し、必要に応じて特定の関数を呼び出すように指示することができます。
OpenAIの関数呼び出しの具体的な使用例:複雑な数学の問題の解決
OpenAIの関数呼び出し機能は理論上の概念だけでなく、複雑な問題を解決するために応用可能な実用的なツールです。そのパワーを示す具体例を紹介します。この例は、Santiago (@svpino)のTwitterスレッド (opens in a new tab)に基づいています。
OpenAI just introduced Function Calling.This is a killer feature! It's the most consequential update to their API since they released it.Here is an example to show you how powerful this is:
— Santiago (@svpino) June 13, 2023
複雑な数学の問題を考えてみましょう。「10進数の22に16進数のAを足した結果は何ですか?」この問題では、異なる形式の数値を足し合わせる必要があり、かなり困難です。しかし、OpenAIの関数呼び出し機能を使えば、関数とプロンプトを組み合わせることで解決することができます。
具体的な手順は以下の通りです:
-
2つの関数を定義します。1つは10進数の2つの数値を加算する方法を知っており、もう1つは16進数の2つの数値を加算する方法を知っています。これらの関数はChat Completionの呼び出しの一部として定義されます。
-
これらの2つの関数を実装します。引数を解析し、合計を行います。
-
「stop」理由が見つかるまで、OpenAIのAPIを繰り返し呼び出します。APIが「function_call」理由で終了した場合は、特定の関数を呼び出し、結果をAPIに返します。
スクリプトの出力は以下の通りです:
- 22 + 5 = 27 (10進数)
- 27 + A = 31 (16進数)
- 10進数の22と5を足し合わせて、その結果に16進数のAを足した結果は31です。
これにより、GPTは最終結果を計算するために両方の関数を使用しました!この例のコードはこちら (opens in a new tab)で確認できます。
この例は、OpenAIの関数呼び出し機能のパワーを示しています。開発者はカスタム関数を定義して使用することができ、複数のステップと異なるタイプの計算が必要な複雑な問題をモデルに解決させることができます。
ChatGPTの力を借りて簡単にさまざまな種類のチャートを生成したいですか? VizGPT (opens in a new tab)を試してみてください。そこでは、ChatGPTのプロンプトを使用して、コーディングなしで任意の種類のチャートを作成することができます!
2023年6月13日のChatGPTの最新アップデート
APIの関数呼び出しの更新に加えて、OpenAIは最近のアップデート (opens in a new tab)で、GPT-4やGPT-3.5-turboの新しい機能やより可操作なバージョンを導入しました。これらのアップデートにより、AIモデルとのインタラクション方法が革新され、機能性やコスト効率が向上します。
GPT-3.5-turboのコンテキスト拡張
最も注目すべきアップデートの1つは、GPT-3.5-turboの16kコンテキストバージョンの導入です。これにより、モデルは応答を生成する際に最大16,000トークンの履歴を考慮することができるようになり、複雑な対話を扱う能力が大幅に向上しました。このコンテキストの拡張により、よりニュアンス豊かで文脈に適した応答が可能となり、全体的なユーザーエクスペリエンスが向上します。これはLangChainにとって大きな打撃となり得ますが、将来の影響はまだ見極める必要があります。
価格の更新
GPT-4とGPT-3.5-turboの価格も更新されました。GPT-4の価格は、8Kコンテキストの場合は1,000トークンあたり$0.03、32Kコンテキストの場合は1,000トークンあたり$0.06となっています。GPT-3.5-turboは手頃な1,000トークンあたり$0.002です。この競争力のある価格設定により、これらの先進的なAIモデルが開発者やあらゆる規模のビジネスによりアクセスしやすくなります。
これらのアップデートは、OpenAIの旅路における重要な節目であり、よりパワフルで効率的でアクセスしやすいAIモデルへの一歩を踏み出したことを示しています。OpenAIがさらなるイノベーションを続け、AIと可能性の限界を押し広げる中、近い将来、さらに興奮するような展開が見られることでしょう。
安全対策
OpenAIは安全性を確保するために、潜在的な脆弱性を緩和するために努力しています。開発者に対して、信頼できるツールを使用し、実世界のアクションを実行する前にユーザーの確認手順を含めるようアドバイスしています。これにより、AIモデルが責任を持って使用され、ユーザーデータが保護されることが保証されます。これによって、お気に入りのChatGPT Jailbreak promptsが動作しなくなる可能性があります。
まとめ
OpenAIの関数呼び出し機能についての包括的なガイドは以上です。見てきたように、この機能は複雑な問題を解決し、よりインタラクティブで賢いアプリケーションを作成するための強力なツールです。OpenAIがイノベーションを続け、新しい機能を導入するにつれて、AIと共に達成できる可能性は無限です。
よくある質問
-
OpenAIの関数呼び出し機能とは何ですか?
OpenAIの関数呼び出し機能では、開発者は関数を説明し、モデルは引数を含むJSON出力を生成します。この機能自体は関数を呼び出しませんが、コードから関数を呼び出すために使用できるJSONを生成します。
-
OpenAIの関数呼び出しの機能はどのように機能しますか?
開発者は、Chat Completionの呼び出しの一部として関数を定義します。その後、モデルは特定の関数を呼び出すために使用できるJSON出力を生成します。APIは、"stop"の理由が見つかるまで繰り返し呼び出されます。APIが'function_call'の理由で終了するたびに、特定の関数が呼び出され、結果がAPIに渡されます。
-
OpenAIの関数呼び出しの機能はどのように利用されますか?
OpenAIの関数呼び出しの機能は幅広いアプリケーションがあります。外部のAPIを呼び出して質問に答えるチャットボットの作成、自然言語を構造化されたJSONデータに変換する、テキストから構造化されたデータを抽出する、複数のステップと異なる種類の計算が必要な複雑な問題の解決などに使用することができます。