第2話では、MQTTで配信されるデータをNVIDIA NemoClawへ入力し、AIエージェントから活用する方法について解説します。
最初にご紹介するデモは、IoT分野で普及している通信プロトコルであるMQTTで配信されるデータを、NemoClawへ入力する方法を示します。Pythonコードで生成するサイン波をセンサーデータに見立てたデモですので、実際のセンサーは必要ありません。
システム構成
・ MQTTで配信されるデータをNemoClaw内のAIエージェントから参照する
・ MQTTでパブリッシュされるのは、Pythonコードで生成するサイン波データなので、センサーは不要
・ MQTTブローカーはMosquittoを利用
・ Node-RED内のMQTTサブスクライバーでデータを受信
・ 同じく、Node-RED内に立ち上げたREST APIエンドポイントで、データをNemoClawに開示
REST APIエンドポイント
本デモでは、MQTTで配信されたデータを、一旦、Node-REDで作成したフロー内のMQTTサブスクライバーで受信し、同じフロー内に設けたREST APIエンドポイントで公開します。
この方式を採用した理由は以下のとおりです。
・ 実装が容易
・ NemoClawのネットワークポリシー設定が簡潔
ネットワークポリシー
NemoClawのネットワーク制御は、Deny-by-Default Egressです。つまり、明示的に許可しない限り、外部のエンドポイントにはアクセスできません。
本デモでは、以下の情報を設定する必要があります。
・ データを公開するREST APIエンドポイントのIPアドレス
・ ポート
・ HTTPリクエストメソッド
・ HTTPパス
・ REST APIエンドポイントにAIエージェントがアクセスする際に利用するコマンド
なお、本デモの場合、NemoClawとREST APIエンドポイントは同一コンピューター上に配置していますが、IPアドレスには127,0.0.1やlocalhostではなく、実際のIPアドレスを指定する必要があります。以下のように、YAML形式のファイルでネットワークポリシーを記述して、nemoclaw sandbox policy addコマンドでNemoClawに反映します。
preset:
name: node-red-api
description: "Node-RED API"
network_policies:
node_red_api:
name: node_red_api
endpoints:
- host: xx.xx.xx.xx # 実際のIPアドレスを記載する
port: 1880
protocol: rest
enforcement: enforce
rules:
- allow: { method: GET, path: "/api/data" }
binaries:
- { path: /usr/bin/curl }
- { path: /usr/local/bin/node }
AIエージェントとの会話例
AIエージェントにREST APIエンドポイントにアクセスするコマンドを指定して、データがどんな関数から生成したものか推測するように依頼した例を以下に示します。利用したLLMの能力から、100パーセント正しい推測結果ではありませんでしたが、データは正しく読み出せました。なお、本例では、コマンドをプロンプトで指定しておりますが、第3話では、REST APIエンドポイントにアクセスする方法をSKILL化して、プロンプトで指定せずとも、AIエージェントに正しくアクセスさせる方法をご紹介します。
お問い合わせ
第2話では、MQTTで配信されるサイン波データをNemoClawで観測する方法について解説しました。
第3話では、温度・湿度・気圧センサーデータを定期的に取得し、NemoClawで活用する方法を解説します。