ホームページ >テクノロジー周辺機器 >AI >OpenaiリアルタイムAPI:例を掲載したガイド
新しく導入されたOpenAIリアルタイムAPIにより、高速で低遅延のマルチモーダルエクスペリエンスをアプリケーションに統合できます。このAPIを使用すると、ユーザーと大規模な言語モデル(LLM)の間にシームレスなスピーチからスピーチの相互作用を作成できます。
このAPIは、1つの統合されたAPIで完全なソリューションを提供するため、音声駆動型エクスペリエンスを実現するための複数のモデルの必要性を排除します。レイテンシを減らすことを目指しているだけでなく、感情的なニュアンスと自然な会話の流れも保持しています。 この記事では、OpenaiリアルタイムAPIを使用して音声制御されたAIアシスタントを構築する方法を学びます。 node.jsを使用して永続的なWebSocket接続を作成し、これを端末内で使用してAPIと通信する方法を作成します。さらに、このAPIの機能を使用するReactアプリの展開についてガイドします。WebSocketsを使用してリアルタイムAPIを使用してください
Openai APIの他のコンポーネントとは異なり、リアルタイムAPIはWebSocketを使用します。 WebSocketsは、クライアントとサーバーの間の双方向通信チャネルを確立する通信プロトコルです。 HTTPで使用される従来の要求応答モデルとは対照的に、WebSocketsは継続的なリアルタイムインタラクションをサポートしています。これにより、WebSocketは音声チャットなどのリアルタイムアプリケーションに特に適しています。
この記事では、WebSocketsがどのように機能するかをカバーし、リアルタイムAPIとの対話のいくつかの例を含めます。続いて、上記で作成した.envファイルを使用してフォルダーを作成することをお勧めします。そのフォルダー内で、次のコマンドを実行してスクリプトを初期化します。
このコマンドが終了した後、これらのファイルはフォルダー内にある必要があります。
2つのパッケージをインストールすることから始めます:
npm init -y && touch index.js
WS:これは、APIと対話するために必要なメインパッケージであるWebSocketパッケージです。
dotenv:.envファイルからAPIキーをロードするユーティリティパッケージ。
コマンドを実行してこれらをインストールしてください:
リアルタイムAPIとの接続を開始するには、API URLとヘッダーを渡す新しいWebSocketオブジェクトを作成して、必要な情報を使用して接続します。
イベントリスナーを追加する一般的な構文は次のとおりです。
npm init -y && touch index.js交換< event>イベントの名前を含む文字列と< function>イベントが発生したときに実行される関数。
接続の準備ができたらテキストを表示する方法は次のとおりです。
このコードを実行するには、コマンドを使用します
npm install ws dotenvAPIキーが正しく設定されている場合、端末に「接続が開いている」メッセージが表示されます。接続がまだ開いているため、スクリプトは実行され続けますので、手動で停止する必要があります。 メッセージが受信されたときにアクションを設定します
WebSocketsを使用するときに応答できるもう1つのイベントは、メッセージイベントです。これは、サーバーからメッセージが受信されるたびにトリガーされます。受信した各メッセージを表示する関数を追加しましょう:
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
スクリプトの実行もsession.createdイベントを表示する必要があります。セッションが初期化されたときにAPIが送信するイベント。
その他のWebSocketイベント
ws.on(<event>, <function>);エラーイベントは、エラーが発生したときにコールバックを追加するために使用されます:
リアルタイムAPIとの通信
WebSocketsを使用するには、イベント駆動型の方法でプログラムする必要があります。メッセージは通信チャネルで前後に送信され、これらのメッセージがいつ配信または受信されるかを制御することはできません。
通信を開始するコードは、handleOpen()内に追加する必要があります。 oそれ以外の場合は、Webソケット通信チャネルが作成される前にそのコードが実行される可能性があるため、エラーが発生します。
コード処理メッセージについても同じことが言えます。すべてのロジックは、handlemessage()関数に移動する必要があります// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);今後の例では、次のコードを出発点として使用します。ほとんどの変更には、handleOpen()とhandlemessage()の更新が含まれます。
リアルタイムAPIを使用してテキストを送信および受信します
node index.js
このイベントは、テキスト会話を開始したいことをAPIに伝えます。これは、コンテンツフィールドで指定され、「input_text」の種類を使用してテキストプロンプトを提供します。
ws.send()メソッドを使用してメッセージを送信します。 Webソケットパッケージは引数として文字列を期待するため、json.stringify()関数を使用してJSONイベントを文字列に変換する必要があります。これらをまとめて、上記のイベントを送信する方法は次のとおりです。
npm init -y && touch index.jsこれにより会話が開始されますが、APIをトリガーして自動的に応答を送信することはありません。応答をトリガーするために、Response.Createイベントを送信します。例を次に示します:
npm install ws dotenvこのイベントは、Modalities Responseパラメーターを使用してテキスト応答を要求します。指示は最も重要な部分であり、モデルに何をしたいのか、この場合はユーザーを支援するための一般的なプロンプトを説明しています。
これら2つのイベントをhandleOpen()関数に送信して、接続が確立されるとすぐに会話が開始されるようにします。この例からのHeandleOpen()関数の完全な実装は次のとおりです。
着信メッセージに関しては、この例に注目する価値のあるイベントには3つのタイプがあります。応答.text.delta、response.text.done、およびresponse.doneイベント:
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
response.text.deltaイベントには、デルタフィールドのチャンクに分類された応答が含まれています。リアルタイムのエクスペリエンスを提供したい場合に重要です。
ws.on(<event>, <function>);リアルタイムAPIを使用して音声を送信および受信します
前の例は、テキストデータの処理方法を示しました。ただし、リアルタイムAPIへの真の関心は、リアルタイムで返信する音声アシスタントを作成することです。
オーディオデータの処理は、テキストデータを処理するよりもわずかに複雑です。この記事の主な主題から私たちをそらすため、オーディオがどのように機能するかに固有の詳細をスキップします。
最初に、2つのパッケージをインストールします:// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);
npm init -y && touch index.js
startrecording()関数はマイクからオーディオを記録し、「Enter」が押されるのを待ちます。
次に、AIの応答を再生するために使用されるSpeaker()を初期化することにより、Main()関数を更新します。
それを邪魔にならないように、handleOpen()とhandlemessage()を実装してオーディオを処理できます。npm install ws dotenvhandleOpen()関数では、ユーザーのオーディオプロンプトを記録するためにStarTrecording()関数を呼び出すだけです。また、イベントをわずかに更新する必要があります:
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();ここに更新されたHeandopen()関数:
があります
handlemessage()関数を実装するには、「Response.Audio.delta」イベントを変更してオーディオバッファーを更新し、新しいサウンドデルタを再生します:
マイクは録音を開始します。リクエストを言って、「Enter」を押して送信できます。次に、AIの応答はスピーカーで再生されます(マイクがミュートされておらず、スピーカーがボリュームを持っていることを確認してください)。
ws.on(<event>, <function>);オーディオ例の完全なコードはこちらから入手できます。
関数呼び出し
// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);Openai APIの優れた機能の1つは、関数呼び出しを実行する機能です。アシスタントに関数を追加でき、それらの関数のいずれかが答えを提供するのに役立つことを検出した場合、特定の関数を要求するイベントを送信します。
OpenAIドキュメントは、関数呼び出しのライフサイクルを説明する次の図を提供します。
出典:Openai
図から、クライアントはLLMが呼び出すことができる機能の定義をクライアントに提供する必要があることがわかります。また、関数の実行はクライアント側で発生します。 AIは、関数とその引数を要求するイベントを送信します。次に、結果を送り返す責任があります。2つの数値を追加する関数をアシスタントに権限を与えましょう。上記のオーディオ例を拡張して、この例を作成します。
利用可能な機能を指定するには、LLMにツールのリストを提供する必要があります。各ツールは、関数に関する情報を指定するJSONオブジェクトです。合計関数のツールを定義する方法は次のとおりです。
オブジェクト構造について説明しましょう:
npm init -y && touch index.js
このタイプは、関数を定義していることを指定します
この名前は、関数を識別するために使用されます。これは、LLMがどの機能を呼び出すかを伝えるために使用するものです。LLMが関数を呼び出したいと判断した場合、response.function_call_arguments.done eventを排出します。
で応答する必要がありますnpm install ws dotenv
関数情報を取得し、関数を呼び出します。
関数呼び出しの結果を送信
応答を要求します。
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
これを処理し、次のケースをhanldemessage()関数内のスイッチステートメントに追加することで処理します。
反応する知識は、それを稼働させて実行するために必要ありません。ただし、Reactに精通して変更または拡張する必要があります。
代わりに、GitHubインターフェイスから手動でダウンロードすることもできます。
アプリをインストールするには、次のNPM(ノードパッケージ管理)コマンドを使用します。インストールが完了したら、プロジェクトのルートフォルダーに.envという名前のファイルを作成し、次のコンテンツを貼り付けます。
npm init -y && touch index.js
lt&lt; openai_api_key&gt; Openai APIキー付き
アプリケーションを実行する準備ができている必要があります。 2つの部分で構成されています:
npm install ws dotenvアプリケーションのWebユーザーインターフェイスで構成されるReact Frontend。
リレーサーバーは、フロントエンドとOpenaI APIの間の仲介者として使用されます。
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
フロントエンドとOpenaI APIの間にリレーサーバーを実装する主な目的は、APIキーを安全に保存することです。 APIとの対話は、このキーなしでは不可能です
ロードが終了した後、アプリケーションが実行されている状態でブラウザにタブが開きます。
アプリを使用して
アプリの使用を開始する前に、コンピューターがミュート上にないことを確認し、マイクにアプリケーションにアクセスできるようにしてください。
「接続」ボタンをクリックすることから始めます。これにより、リアルタイムAPIに「Hello」メッセージが送信され、ご挨拶が届きます。ws.on(<event>, <function>);
// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);接続が確立されると、新しいボタンが中央に表示され、AIアシスタントと話すことができます。
それを使用するには、ボタンをリリースせずに押して話します。ボタンがリリースされるとメッセージが送信されます。
アプリケーションには、ボタンを押す必要のないVAD(音声アクティビティ検出)モードもあります。このモードでは、アプリケーションは継続的に聞き、アシスタントと積極的に会話することができます。それを使用するには、「vad」ボタンを押して話します。
学んだように、リアルタイムAPIは、AIが特定の関数を実行できるようにする機能を提供します。このデモンストレーションには、2つの機能が紹介されています。1つは、特定の場所での天気予報について問い合わせるための1つ、もう1つはアシスタントをパーソナライズするためのメモリアイテムを追加するためです。
「ニューヨークの明日の天気はどうですか?」などの質問をすることで、これらの機能を体験してください。そして、「私の好きな色は青」のような好みを述べています。アシスタントはこれらのクエリに対する口頭での応答を提供し、情報もアプリケーションの右側に表示されます。
APIとの統合は、このuseefect()呼び出しで定義されています。この使用effect()内のコードは、コンソールページが最初にレンダリングされたときに実行されます。 node.jsスクリプトと同様に、APIイベントへの応答方法の概要を説明します。主な違いは、RealtimeClientクライアントラッパーの使用です。
ツールの定義npm init -y && touch index.js
realtimeclient.addtool()関数は、ツールを定義するために使用されます。 2つのパラメーターが必要です
実行される関数
以前に定義された合計ツールを追加するには、次のことを行うことができます。
npm init -y && touch index.jsアプリケーションはTypeScriptを利用しているため、関数定義内のタイプの指定が必要であることに注意してください。 イベントを聴く
イベントの名前。
ここでのエラーイベントは、デバッグのためにエラーをコンソールにログに記録します。
会話。途切れたイベントは、変換が中断されたときにリクエストをキャンセルするために使用されます。
最後に、Conversation.updatedイベントは、APIから新しいチャックが入ったときに新しいオーディオをオーディオストリームに追加するために使用されます。以上がOpenaiリアルタイムAPI:例を掲載したガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。