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でノードを作成
各ノードについて説明します。
「マイク」ノード
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からの応答が「回答」として表示されると同時に読み上げられます。
終わりに
ChatGPT/WhisperのAPI公開から、すでに様々な使い方がされていますが、Node-REDでノーコードでもとても簡単に使うことができました。高度なAIを使ってお手軽に面白いサービスを作っていきましょう!(課金にはくれぐれもご注意を)