13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Node-REDを使ってWhisperで音声認識してChatGPTで回答させてみた

Last updated at Posted at 2023-03-03

OpenAIからAPIが公開されたChatGPTと音声認識のWhisperを使ってノーコードで会話ができないかNode-REDで作ってみました。

事前準備

環境

使っている環境は以下の通りです

  • enebular / Node-RED v2.2.2
  • ChatGPT API gpt-3.5-turbo
  • Whisper API whisper-1
  • Windows 10 / Microsoft Edge

ノードの追加

Node-REDを手軽に使えるプラットフォームとしてenebularを使っています。デフォルトのノード以外に2つのノードを追加しています。メニューの「パレットの管理」から追加してください。

  • node-red-node-ui-microphone マイクを使うためのノード
  • node-red-contrib-simple-chatgpt ChatGPT APIを利用するためのノード

OpenAI の API KEY の準備

OpenAI 管理画面の API Keysからキーを発行しておいてください。
ChatGPT API と Whisper API の利用に必要です。課金対象のAPIですので使いすぎにも注意してください。

Node-REDでノードを作成

以下のフローで実行しています。
image.png

各ノードについて説明します。

「マイク」ノード

node-red-node-ui-microphone のノードです。デフォルトのまま使っています。wav形式でmsg.payloadにBufferオブジェクトとして出力されます。

「音声リクエスト作成」ノード

functionノードでWhisper API へのリクエストを作成しています。OpenAIのAPI仕様はこちらです。

HTTPヘッダには以下を指定しています。[API-KEY]にはOpenAIの管理画面で発行したKEYを入れてください。

  • Authorization: Bearer [API-KEY]
  • Content-Type: multipart/form-data

HTTPボディには以下を指定しています。ボディはmultipartになっています。

  • model: whisper-1 使うモデルを指定します。現状は他のモデルは無いようです
  • language: ja 日本語を指定しています。
  • file: msg.payloadから入ってくる音声データが入ります。Content-Typeはwavを使っているので形式を指定しています。filenameは適当に指定しています。
const sound = msg.payload;
msg.payload = {
    'model': {
        'value': 'whisper-1'
    },

    'language':{
        'value': 'ja'
    },

    'file': {
        'value': sound,
        'options':{
            'filename':'test.wav',
            'Content-Type': 'audio/wav',
        }
    }
};

msg.headers = {
    'Authorization': 'Bearer [API-KEY]',
    'Content-Type': 'multipart/form-data'
};
return msg;

「STT結果取得」ノード

Whisper APIからの結果がmsg.payload.textに入るので、後続で扱えるようにchangeノードを使って msg.payload にデータを入れ替えています。

「ChatGPTに質問」ノード

node-red-contrib-simple-chatgpt のノードです。テキストをインプットするとChatGPTへの問い合わせをしてくれるとても便利なノードです。OpenAIのAPI KEYをノードのTokenに設定してください。
SystemSettingを設定すると語尾などの話し方を指定したり、pastMessagesを設定することで継続的な会話をすることもできます。

「質問を表示」「回答を表示」ノード

ダッシュボード用のtextノードです。マイクから音声認識した質問内容、ChatGPTからの回答内容をそれぞれ表示します。

「回答を音声で出力」ノード

ダッシュボード用のaudio outノードです。テキストを入力すると音声合成して読み上げてくれます。

「リセット」ノード

ダッシュボード用のbuttonノードです。ボタンを押すと空白が送信されて「質問を表示」「回答を表示」の表示をクリアします。

ダッシュボード

ダッシュボードはこのような画面になり、マイクからの音声が「質問」として表示され、ChatGPTからの応答が「回答」として表示されると同時に読み上げられます。
image.png

終わりに

ChatGPT/WhisperのAPI公開から、すでに様々な使い方がされていますが、Node-REDでノーコードでもとても簡単に使うことができました。高度なAIを使ってお手軽に面白いサービスを作っていきましょう!(課金にはくれぐれもご注意を)

13
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?