Node-REDのプラグインを開発してみる その1(LLM Plugin、Ollama、OpenAI)
はじめに
今回はNode-REDのプラグインを開発してみました。
Node-REDのプラグインに関する情報が少なすぎて、プラグインと言っていいのか分からないのですが、Node-RED MCUでもプラグインという名前がついていました。
▼Plugin frameworkというものが存在します。
https://qiita.com/k-toumura/items/9131b4a7cbce66cc088b
▼Node-RED MCUのプラグインについてはこちら
https://github.com/ralphwetzel/node-red-mcu-plugin
これまでNode-REDのノードについては開発したことがあるのですが、ノードとは異なる仕組みをプラグインとして開発するのははじめてです。Node-REDのエディタ画面でLLMを利用できるようにしたいなと思っています。
▼今回開発したプラグインはNPMに公開しています。Node-REDのパレットの管理からインストールすることもできます。
https://flows.nodered.org/node/@background404/node-red-contrib-llm-plugin
▼以前の記事はこちら
仕様の検討
今回開発するプラグインは、Node-REDのサイドバーでLLMと対話するためのものです。Node-RED Conに登壇した際にも少しだけ紹介していました。
▼Node-RED Conについてはこちら
単にLLMと対話できるだけでなく、Node-REDの現状のフローをLLMに渡したり、LLMが提案したフローをNode-REDに取り込んだりすることができるようにします。
感覚としては最近よくあるAIエディタ系のものと似ています。私はVS CodeでGitHub Copilotをよく利用しています。
▼GitHub Copilotについてはこちらで紹介しています。
具体的な開発は、GitHub Copilotで全面的にAIを利用しました。情報が少なくて開発できるのか心配していたのですが、すぐに形になっていたので、改良していきました。
いわゆるバイブコーディングで開発したコードは、AIの発展とともに複雑化していき、人間がチェックするのも大変になってきているように思います。これがNode-REDのようにビジュアルプログラミング系のツールで同様に利用できれば、人間にとっても読みやすい環境として開発を進めていくことができるのではないかと考えています。
動作確認
実際に開発したプラグインで、LLMとの対話を試してみました。まずはAPIの料金がかからない、OllamaのローカルLLMを利用しました。
▼画面はこんな感じ。

サイドバーでLLMと対話し、LLMが提案したフローを取り込むことができました。また、現状のフローについてLLMに説明してもらうことができました。
▼実際の動作はこちら。qwen2.5-coder:7bを用いています。
私のノートPCで実行しており、gpt-oss:20bでも試していました。もっと性能の良いPCなら処理が速くなるかと思います。
▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。
▼メモリはローカルLLMを実行するために、64GBに交換しています。gpt-oss:20bも利用できます。
ただしどのLLMのモデルであっても、正確な回答が返ってこなかったり、データ形式が不適切な場合がありました。この辺りは今後も修正していく必要があるのですが、やはりLLMの出力がランダムというのもあってデバッグが難しいところです。
JSONファイルの出力形式についてLLMに渡していても、異なる形式のデータが提示されて読み込めなかったり、ノードのIDや座標などの不要な情報まで回答したりすることがありました。
まだNPMには公開していないのですが、開発中のものではOpenAIのAPIにも対応中です。GitHubのリポジトリには公開しています。
▼GitHubのリポジトリはこちら
https://github.com/404background/node-red-contrib-llm-plugin
▼前回の記事で使っていた、OpenAIのAPIキーで試しています。
gpt-5-nanoとgpt-5.2で試してみました。
▼まずgpt-5-nanoの場合はこんな感じ。色々とおかしな部分があります。


データ形式が不適切なので、取り込み用のボタンが有効化されていませんでした。
▼一応コピーして取り込んでみたら、無名のフローが作成されてしまいました。

▼functionノード内のJavaScript自体は問題なく書かれていました。

▼gpt-5.2ではインポートできるデータが出力されていましたが、線でつながっていませんでした。

このあたりのLLMの曖昧さを抑制できるように、出力を調整する仕組みが必要だなと思っています。また使いながら改良して、GitHubに公開しようと思っています。
最後に
プラグインとしての形自体は、GitHub Copilotを利用してAIが開発してくれました。ここからはLLMを利用したプラグインという特性上、プロンプトなどで調整していく必要があるかと思っています。
Node-REDでバイブコーディングができるぐらいに作りこんでいきたいところです。


