LoginSignup
3

More than 1 year has passed since last update.

【enebular 2022】ChatGPT用ノード「node-red-contrib-simple-chatgpt」を enebular・Node-REDで試したり API を Python から利用してみた話

Last updated at Posted at 2022-12-13

はじめに

この記事は、enebular Advent Calendar 2022 の 14日目の記事です。

内容は、以下ツイートや記事に出てきている「ChatGPT用ノード(node-red-contrib-simple-chatgpt)」に関する内容です。

●Node-REDでChatGPTを試す - Qiita
 https://qiita.com/h-takauma/items/80a7ab7c167155baf324

自分も enebular で、ChatGPT用のノードのお試しを少しやってみます。

ChatGPT について

ChatGPT は、今年のアドベントカレンダー用に公開した記事でも 2回とりあげていて、自分の中ですごく興味深い技術です。

ノードのページを見てみる

ChatGPT用のノードを実際に試していく前に、まずは node-red-contrib-simple-chatgpt のページの情報を見てみます。

●node-red-contrib-simple-chatgpt (node) - Node-RED
 https://flows.nodered.org/node/node-red-contrib-simple-chatgpt
node-red-contrib-simple-chatgpt

利用するノードは、上の画像では右下にある、緑色のノード 1つだけになるようです。

ChatGPT用ノードを使う

OpenAI の APIキーを取得

上記のノードを利用するには、OpenAI の APIキーが必要になるようです。

自分は既にアカウントを作っていて、 APIキーも発行していたのですが、新規に 1つ追加してそれを使ってみました。キーの発行は https://beta.openai.com/account/api-keys にて。
APIキーの取得

enebular でノードを追加する

それでは、 enebular を開いて、ChatGPT用ノードを追加するところから始めます。

まずは https://enebular.com/sign-in からログインをして、開発ができる画面へと進んでいきます。
enebularの開発画面

そして、右上のメニューの「パレットの管理」へと進み、「simple-chatgpt」などを検索キーワードにして出てきた ChatGPT用ノードを追加します。
ノードの追加

以下のように、無事にノードが追加されました。
ノードの追加後

ChatGPT用ノードのプロパティを見てみる

次に、ChatGPT用ノードのプロパティを見てみます。Token という部分に、先ほど取得した OpenAI の APIキーをセットする形です。

ChatGPT用ノードのプロパティ

このあたりは、冒頭に書いていた ChatGPT用ノードに関する記事の流れと同じです。

処理を実行してみたけれど...

そして、APIキーを使って処理をしてみたのですが、処理中という表示が出てから処理が終わる気配がない状況に。

どうやら、OpenAI へのアクセス自体に制限がかかった状況っぽく、ノードで実行したリクエストが処理されない状態になったようでした(※ これは違った原因があったかも、という話を後述)。
とりあえず、復活するまで待つことに...

再度 ChatGPT用ノードを試す

その後、OpenAI のサイトへ直接アクセスして、ChatGPT を公式ページ内で試せる状態に戻ったのを確認しました。

あらためて、enebular上で、ChatGPT用ノードを試していきます。
そして、無事に以下の ChatGPT のレスポンスを得ることができました。

ログに出力されたテキストを書き出すと、こんな感じでした。

<script>
  // 現在の日時を取得する
  var now = new Date();
  // 日時をテキストで表示する
  document.write("今は" + now.getFullYear() + "" + (now.getMonth()+1) + "" + now.getDate() + "" + now.getHours() + "" + now.getMinutes() + "" + now.getSeconds() + "秒です。");
</script>

ちなみに、GUI上で試した時とは出力されたプログラムの内容が異なっていたようでした。

【余談】 実はこんなハマり方をしてしまいました...

ここからは余談なので、もしご興味があればお読みいただければ、という部分です。

上記で、お試しの最初でつまずいた話があり、その後は成功したような流れで書いていましたが、実はそれらの失敗と成功の流れの間で、また別の内容でハマっていたことがありました。

結論から言うと、自分のアカウントの API利用の枠がなくなっていた状態で、API をたたいていたため、うまく応答が得られない状況になったというものです(※ もしかしたら、上記の最初にハマった話も、そちらが原因だったかも?)。

そうとは気づけず、ローカルの Node-RED で同じことを試してみたり、Python版のライブラリで API をたたいてみたりしました。そして、Python で API をたたいた時のレスポンスの内容から、上記の原因に気づけて成功した流れになったという...

ローカルの Node-RED での検証

enebular とは別の環境で試した話も、少し記載しておきます。

ローカルの Node-RED で実行した際は、サーバーとの接続が切れたという表示がでてきたりもしていました(なぜか、ChatGPT用のノードの処理を実行すると、Node-RED が落ちるという挙動に)。

この Node-RED上で原因を探る方法を考えようかとも思ったのですが、ここで、Node-RED用のノードで何か起こっているのか、API側で問題があるのかを切り分けるのが良さそうかと思い、API を使うための公式ライブラリを触ってみることにしました。
公式ライブラリ

Python版のライブラリでの検証

enebular・Node-RED で動かない原因の切り分けのため、APIキーを用いた処理を Python版のライブラリを使って行うことにしました。

そのお試しの結果、出力されたメッセージの中に「API の利用枠がない」という意味合いの内容が出てきて、その利用枠不足だった件に対応したことで、無事に API から応答を得られる状態にできました。

おわりに

無事、ChatGPT用ノード「node-red-contrib-simple-chatgpt」を enebular で試せました。

本当は、API をたたいて得られた結果を、さらに何か利用した構成にして...、と考えてもいたのですが、上記のハマってしまった話があり、思った以上に時間を使ってしまったため、今回の記事のゴールはここまでとなりました。

余談

余談ですが、node-red-contrib-simple-chatgpt のページの下にリンクが書かれていた、「Libraries.io」が気になりました。

●Libraries.io - The Open Source Discovery Service
 https://libraries.io/
image.png

ウィキペディアの記載によると、こんな感じらしい。

●Libraries.io - Wikipedia
 https://en.wikipedia.org/wiki/Libraries.io

Libraries.io is an open source web service that lists software development project dependencies and alerts developers to new versions of the software libraries they are using.

【追記】 さらに余談

今回の内容と全然違ったものですが、enebular が絡む内容を以下の別カレンダー用の記事でも書きました。

●【Zoom 2022】Zoom の会議開始を LINEアプリにお知らせする仕組みを Zoom Webhook と enebular で作る(Webhook のバリデーション対応も行いつつ) - Qiita
 https://qiita.com/youtoy/items/8d2aa5257c0f4e9e3cc7

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
3