新しく導入された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との対話のいくつかの例を含めます。node.jsを使用するので、コンピューターにインストールされるようにする必要があります。そうでない場合は、公式Webサイトからnode.jsをダウンロードしてインストールできます。 スクリプトの初期化
続いて、上記で作成した.envファイルを使用してフォルダーを作成することをお勧めします。そのフォルダー内で、次のコマンドを実行してスクリプトを初期化します。
このコマンドが終了した後、これらのファイルはフォルダー内にある必要があります。
依存関係のインストール
2つのパッケージをインストールすることから始めます:
npm init -y && touch index.js
WS:これは、APIと対話するために必要なメインパッケージであるWebSocketパッケージです。
dotenv:.envファイルからAPIキーをロードするユーティリティパッケージ。
コマンドを実行してこれらをインストールしてください:
リアルタイムAPIへの接続
リアルタイムAPIとの接続を開始するには、API URLとヘッダーを渡す新しいWebSocketオブジェクトを作成して、必要な情報を使用して接続します。
-
接続が開かれたときにアクションを設定します
- 上記のコードは、APIへのWebソケット接続を作成しますが、まだ何もしません。
- WebSocketsを使用すると、いくつかのイベントが発生したときに実行するアクションを設定できます。オープンイベントを使用して、接続が確立されたら実行するコードを指定できます。
イベントリスナーを追加する一般的な構文は次のとおりです。
npm init -y && touch index.js
交換< event>イベントの名前を含む文字列と< function>イベントが発生したときに実行される関数。このコードを実行するには、コマンドを使用します
npm install ws dotenv
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();
スクリプトの実行もsession.createdイベントを表示する必要があります。セッションが初期化されたときにAPIが送信するイベント。
その他のWebSocketイベント上記の上記では、オープンイベントとメッセージイベントにイベントリスナーを追加する方法を学びました。 WebSocketsは、例では使用しない2つの追加イベントをサポートしています。
閉じるイベントは、ソケットが閉じたときにコールバックを追加するために使用できます:ws.on(<event>, <function>);</function></event>
エラーイベントは、エラーが発生したときにコールバックを追加するために使用されます: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()の更新が含まれます。node index.js
リアルタイムAPIとの通信は、イベントを使用して発生します。 OpenAIリアルタイムドキュメントAPIには、サポートするイベントがリストされています。 Conversation.item.createイベントを使用して会話を開始します。イベントは、ドキュメントでフィールドが説明されているJSONオブジェクトとして表されます。
会話の例です。Item.Createイベントは、「Webソケットが何であるかを1つの文で説明する」プロンプトを送信します。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イベントには、デルタフィールドのチャンクに分類された応答が含まれています。リアルタイムのエクスペリエンスを提供したい場合に重要です。
応答。イベントは、応答の終わりを示します。 - HandleMessage()関数のスイッチステートメントを使用して、これらのイベントにスクリプトに応答する方法を指定できます。
この例では、Response.text.deltaイベントを使用して、コンソールへの応答のチャンクを印刷します。応答が完了すると、Response.text.doneイベントがトリガーされ、出力が完了したことを示す新しい行を印刷します。最後に、Response.doneイベントを受け取ったときにWebソケットを閉じます。 この例を実行するには、これらの関数を上のテンプレートコードに貼り付け、コマンドで実行します。
ws.on(<event>, <function>);</function></event>リアルタイム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
- node-record-lpcm16レコードマイクからサウンドを記録して、音声プロンプトを送信できるようにします。 スピーカーは、AI音声応答を再生するために使用されます。
- また、ノードライブラリがマイクとインターフェイスしてオーディオとインターフェースするために使用するオーディオ処理のコマンドラインユーティリティであるSox(Sound Exchange)をインストールする必要があります。 brew install soxを使用して、macosまたはsudo apt install soxにLinuxにインストールします。 これらのパッケージをインストールした状態で、ユーザーのオーディオプロンプトを記録する関数StarTrecording()をインポートします。主な主題からコースをあまりにも操作するので、機能を詳細に説明しません。
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」イベントを変更してオーディオバッファーを更新し、新しいサウンドデルタを再生します:
- 「Response.text.done」イベントをSwitchステートメントから削除し、「Response.done」イベントを更新してスピーカーを停止します:
- handlemessage()関数の最終実装は次のようになります。
マイクは録音を開始します。リクエストを言って、「Enter」を押して送信できます。次に、AIの応答はスピーカーで再生されます(マイクがミュートされておらず、スピーカーがボリュームを持っていることを確認してください)。
ws.on(<event>, <function>);</function></event>オーディオ例の完全なコードはこちらから入手できます。
関数呼び出し
// 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がこの関数を使用する時期を識別するために使用されます。
- パラメーターは、関数の引数を指定するために使用されます。この場合、aとb。 という名前の2つの数字
- 次のステップは、コードの関数を定義することです。 Key Calculate_Sumを使用した辞書を使用して、関数呼び出しイベントに応答するときに適切な関数を簡単に呼び出すことができます。
- APIは、上記のパラメーターで定義された同じ構造を持つ辞書として関数引数を提供します。この場合、3と5を追加すると、辞書は{“ a”:3、“ b ":5}。
- sumtoolおよび関数定数は、インポート後、main()関数の前に、index.jsの上部に追加できます。
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()関数内のスイッチステートメントに追加することで処理します。
- スクリプトを実行し、2つの番号を追加した結果を要求した場合、モデルは関数を呼び出して結果を提供する必要があります。
- この関数は比較的単純ですが、関数はクライアントによって実行されるため、何でもかまいません。次のセクションでは、より複雑な関数の2つの例を示します。 この例の完全なコードは、こちらから入手できます。
- アプリケーションを起動するには、リレーサーバーとフロントエンドの両方を開始する必要があります。リレーサーバーを起動するには、次のコマンドを使用します
- react frontendを起動するには、コマンドを使用します:
今日のMlopsスキルを構築してください
ゼロから始めて、キャリア構築のMlopsスキルを獲得します。Openaiチームは、リアルタイムAPIを紹介するデモReactアプリを提供します。ここでは、セットアップ方法を学び、どのように機能するかを探ります。これは、より複雑なアプリを構築するための素晴らしい出発点です。
アプリのセットアップ反応する知識は、それを稼働させて実行するために必要ありません。ただし、Reactに精通して変更または拡張する必要があります。
彼らのアプリはこのリポジトリでホストされています。セットアップするには、次のgitコマンドを使用してクローニングから始めます。
代わりに、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とフロントエンドの間のデータ交換を促進するサーバーのセットアップが含まれます。この特定のシナリオでは、アプリケーションはローカルでのみ実行されるため、セキュリティの懸念は最小限です。
ロードが終了した後、アプリケーションが実行されている状態でブラウザにタブが開きます。
アプリを使用して
アプリの使用を開始する前に、コンピューターがミュート上にないことを確認し、マイクにアプリケーションにアクセスできるようにしてください。
「接続」ボタンをクリックすることから始めます。これにより、リアルタイムAPIに「Hello」メッセージが送信され、ご挨拶が届きます。ws.on(<event>, <function>);</function></event>
// 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つはアシスタントをパーソナライズするためのメモリアイテムを追加するためです。
「ニューヨークの明日の天気はどうですか?」などの質問をすることで、これらの機能を体験してください。そして、「私の好きな色は青」のような好みを述べています。アシスタントはこれらのクエリに対する口頭での応答を提供し、情報もアプリケーションの右側に表示されます。
このセクションでは、アプリケーションの実装の詳細の一部をカバーするため、Reactの高レベルの理解が続く必要があります。
consolepage.tsxファイルを検討します。これは、アプリケーションロジックのほとんどが定義されている場所です。デモアプリは、node.jsコマンドラインアプリの例で行ったように、生のWebSocketsを使用していません。彼らは、APIとの対話を支援するリアルタイムクライアントを構築しました。これはファイルの上部にインポートされるものです:
APIとの統合は、このuseefect()呼び出しで定義されています。この使用effect()内のコードは、コンソールページが最初にレンダリングされたときに実行されます。 node.jsスクリプトと同様に、APIイベントへの応答方法の概要を説明します。主な違いは、RealtimeClientクライアントラッパーの使用です。
ツールの定義npm init -y && touch index.js
realtimeclient.addtool()関数は、ツールを定義するために使用されます。 2つのパラメーターが必要です
ツール定義jsonオブジェクト。
実行される関数
- このアプローチは、クライアントがイベントを処理し、機能の呼び出しを自動化するために既に装備されているため、ツールの統合を簡素化します。メモリツールはここで定義されていますが、Weather Toolの定義はここで定義されています。たとえば、
以前に定義された合計ツールを追加するには、次のことを行うことができます。
npm init -y && touch index.js
アプリケーションはTypeScriptを利用しているため、関数定義内のタイプの指定が必要であることに注意してください。 イベントを聴くイベントを聞くには、realtimeclient.on()関数が使用されます。 2つのパラメーターを受け入れます:
イベントの名前。
- 実行されるコールバック関数。
- このアプローチは、以前に使用されたWebSocket.ON()関数に似ています。ただし、異なるイベントセットを実装します。 GitHubページには、サポートされているイベントのリストが提供されています この特定の例では、次のイベントが使用されます
ここでのエラーイベントは、デバッグのためにエラーをコンソールにログに記録します。
会話。途切れたイベントは、変換が中断されたときにリクエストをキャンセルするために使用されます。
最後に、Conversation.updatedイベントは、APIから新しいチャックが入ったときに新しいオーディオをオーディオストリームに追加するために使用されます。- 結論 このチュートリアルでは、OpenAIリアルタイムAPIと、リアルタイム通信のためにWebSocketを使用する方法を調査しました。 Node.js環境のセットアップをカバーして、APIと対話し、テキストとオーディオメッセージの送信と受信、および機能の強化を必要とする関数の実装
最新のOpenai開発ツールの詳細については、これらのチュートリアルをお勧めします。 - Openaiモデルの蒸留:例を備えたガイド
- gpt-4oビジョン微調整:例を備えたガイド
以上がOpenaiリアルタイムAPI:例を掲載したガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

自宅で大規模な言語モデルを簡単に実行する:LM Studioユーザーガイド 近年、ソフトウェアとハードウェアの進歩により、パーソナルコンピューターで大きな言語モデル(LLM)を実行することが可能になりました。 LM Studioは、このプロセスを簡単かつ便利にするための優れたツールです。この記事では、LM Studioを使用してLLMをローカルに実行する方法に飛び込み、重要なステップ、潜在的な課題、LLMをローカルに配置することの利点をカバーします。あなたが技術愛好家であろうと、最新のAIテクノロジーに興味があるかどうかにかかわらず、このガイドは貴重な洞察と実用的なヒントを提供します。始めましょう! 概要 LLMをローカルに実行するための基本的な要件を理解してください。 コンピューターにLM Studiをセットアップします

Guy Periは、McCormickの最高情報およびデジタルオフィサーです。彼の役割からわずか7か月後ですが、ペリは同社のデジタル能力の包括的な変革を急速に進めています。データと分析に焦点を当てている彼のキャリアに焦点が当てられています

導入 人工知能(AI)は、言葉だけでなく感情も理解し、人間のタッチで反応するように進化しています。 この洗練された相互作用は、AIおよび自然言語処理の急速に進む分野で重要です。 th

導入 今日のデータ中心の世界では、競争力と効率の向上を求める企業にとって、高度なAIテクノロジーを活用することが重要です。 さまざまな強力なツールにより、データサイエンティスト、アナリスト、開発者が構築、Deplを作成することができます。

今週のAIの風景は、Openai、Mistral AI、Nvidia、Deepseek、Hugging Faceなどの業界の巨人からの画期的なリリースで爆発しました。 これらの新しいモデルは、TRの進歩によって促進された電力、手頃な価格、アクセシビリティの向上を約束します

しかし、検索機能を提供するだけでなくAIアシスタントとしても機能する同社のAndroidアプリは、ユーザーをデータの盗難、アカウントの買収、および悪意のある攻撃にさらす可能性のある多くのセキュリティ問題に悩まされています。

会議や展示会で何が起こっているのかを見ることができます。エンジニアに何をしているのか尋ねたり、CEOに相談したりできます。 あなたが見ているところはどこでも、物事は猛烈な速度で変化しています。 エンジニア、および非エンジニア 違いは何ですか

Rocketpy:A包括的なガイドでロケット発売をシミュレートします この記事では、強力なPythonライブラリであるRocketpyを使用して、高出力ロケット発売をシミュレートすることをガイドします。 ロケットコンポーネントの定義からシミュラの分析まで、すべてをカバーします


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

Dreamweaver Mac版
ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
