Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

SORACOM Fluxを試してみた

こんにちは、先日娘が7歳の誕生日の日にCoderDojoに参加して自己紹介(歳と名前と今日やることを言う)をしたあと「歳を言うときに間違って6歳って言いそうになった!」と笑っていて、少しずつ高度な可愛いことを言うようになったなと思った木村です。

2024/7/17に開催されたSORACOM Discovery 2024で発表された新サービス「SORACOM Flux」を早速試してみたので、皆様に紹介したいと思います。

SORACOM Fluxとは

公式ドキュメントによると、SORACOM FluxはローコードIoTアプリケーションビルダーとなっています。
ローコードというと弊社でもMicrosoft PowerAutomateやAzure LogicAppsを業務で使っていますが、FluxではSORACOMプラットフォームに届いたデータとアクションを組み合わせ、さらにそこに生成AIサービスを組み合わせてIoTアプリケーションを作るということで、処理の中心に生成AIがあり(使わなくてもアプリは作れる)、入力値としてIoTデータを使うという所が特徴です。

なおFluxは英語だと「Flow」にあたるフランス語だそうです。

利用できるチャンネル

公式ドキュメントによると、2024/07/18現在準備されているチャンネルは以下のものです。

  • IoT デバイスイベントソース
    Unified Endpointに送信されたデータ及びデバイスのメタ情報を受信
  • Harvest Files イベントソース
    Harvest Filesのファイルパス(前方一致)とイベントタイプ(作成、更新、削除)を指定して、ファイルのパスとcontentType、presignedUrls(有効期限1時間)を受信
  • タイマーイベントソース
    Freeプランだと最短5分の時間間隔、Proプランだと最短1分の時間間隔と時刻またはCRONでの指定
  • API イベントソース
    専用のSORACOM APIの呼び出しをトリガーにイベントが発生、APIはPOST https://api.soracom.io/v1/flux/apps/<app-id>/channels/<channel-id>

Azure Functionsで例えると、IoT Hubトリガー、Blobトリガー、タイマートリガー、HTTPトリガーに相当するものがあるということですね。

利用できるアクション

  • AI サービスの呼び出し
  • Webhook の呼び出し
  • 簡易物体検知
  • Slack 通知
  • メール通知
  • LINE 通知

いずれもアクションを起動するコンディションを設定し、「入力のJSONのこの値が特定の条件を満たす場合に発動」といったことが記載できます。

2024年7月現在、AIサービスで呼び出せるモデルは以下の通りです。

  • Amazon Bedrock Anthropic Claude 3 Haiku
  • Amazon Bedrock Anthropic Claude 3.5 Sonnet
  • Amazon Bedrock Anthropic Claude 3 Opus
  • Azure OpenAI GPT-4o
  • Google Gemini 1.5 Flash
  • Google Gemini 1.5 Pro
  • OpenAI GPT-4o (API キー持ち込みのみ)

また、AIアクションの利用には上限があり、「クレジット」という単位で管理されます。Claude 3 Haikuだと1リクエストで1クレジット、Azure OpenAI GPT-4oだと1リクエストで10クレジット消費します。Freeプランだと200クレジットまで利用できるそうです。
クレジットについては、Fluxの料金プランを参照ください。

使ってみた

では、早速触ってみましょう。ここではGetting Startedにある、「SORACOM Harvest Filesに保存した画像をGPT-4oで物体検知する」を試してみます。

アプリの作成

まずは、SORACOMコンソールにログインし、Fluxのページにアクセスします。初回は「新しいFluxアプリを作成する」を押します。

Fluxアプリのページ

Fluxアプリに名前を付けます。ここでは「Harvest Filesの画像からの物体検知」とします。

イベントチャネルの作成

次に、イベントチャネルを作成します。「SORACOM Harvest Files」を選択します。

イベントチャネルの作成

ドキュメントの通り、ファイルパスをflux、イベントをファイル作成とファイル更新にします。

イベントソース設定

入力ウインドウを閉じると、イベントチャネルのアイコンがSTUDIOに表示されます。アイコンをマウスで摘まんで移動させたり、拡大縮小することができます。

イベントソース作成完了

AIアクションの作成

イベントチャネルのアイコンをクリックすると入力ウインドウが再度開きます。「アクション」タブから「アクションを追加」を選びます。

アクションを追加

AIアクションを選び、コンディションにはpayload.contentType == "image/jpeg"を入力し、モデルはAzure OpenAI(GPT-4o)を選びます。

AIアクションの設定

AIモデルに渡すプロンプトは、2024/7/18時点のドキュメントのものを少し修正し、以下のようにします。

添付の画像で、全体の人数と青いシャツを着た人の人数を教えて下さい。何人映っていますか?必ずJsonで、
{"people":1, "people_with_blue_shirts": 1, "url":"${payload.presignedUrls.get}"}
のようなフォーマットで返してください。

公式ドキュメントから変更した点は、画像のURLを次のアクションに渡す必要があるので、出力されるJsonのurlに埋め込んでいる部分になります。
そして「AIに画像を読み込ませる」にチェックを入れ、入力枠には${payload.presignedUrls.get}を入力します。
なお、「高度なオプション」を押すと、システムプロンプトを入力できるので、プロンプトの調整をする際にはここも活用していくと良さそうです。

プロンプトの設定

最後に「アクションのアウトプットを別のチャネルに送信する」を有効にし、送信先チャネルは「新しくチャネルを作成する」を選び、チャネル名はAI Outputとします。

この時点のSTUDIOは以下のようになっています。いい感じですね。

AIアクション作成完了

Slack通知アクションの作成

続いてSlackの通知アクションを作成します。「AI Output」をクリックし、アクションを追加します。

アクションの実行条件はpayload.output.people > 0とします。先ほどプロンプトで指定した出力の、全体の人数が0より大きい場合に通知するということですね。
incoming webhookは、Slackで私のアカウントにDMで送るようにしました。
PAYLOAD(送信するメッセージ)は以下の通りです。先ほどプロンプトでアウトプットに含めたURLを、画像のURLとして利用します。

人が ${payload.output.people} 人います。そのうち、青いシャツの人が  ${payload.output.people_with_blue_shirts} 人います!!

<${payload.output.url}|画像>

アクションの設定

これでFluxアプリが完成しました!

Fluxアプリ完成

動作試験

では、早速Harvest Filesにファイルをアップロードして確認してみましょう。青いTシャツの人が写ってる画像がいりますので、今回は先日のSORACOM Discovery 2024で私がSORACOM MVCの青いTシャツを着て登壇している写真でやってみます。

SORACOM Discovery2024での登壇風景

これをJPEGにして、Harvest Filesにアップロードします。しばらく待つとslackにDMが届きました!

slackに届いたメッセージ

投影されたスライドに映った私の写真は人物とは判定せず、映ってる人数は1名となっています。そして、ちゃんとTシャツの色も判定してくれていますね。

クレジット管理

クレジットがどのくらい消費されたかは、「Fluxクレジット管理」ページに表示されます。

Fluxクレジット管理

テストを含めてここまで6回アプリを実行したので、Azure OpenAI(GPT4o)の10クレジット6回分、60クレジットが減っています。

まとめ

発表されたSORACOM Fluxを試してみましたが、非常に簡単に生成AIを組み合わせたアプリケーションを作成できました。生成AIを使わないでも、センサーデータやカメラ画像に基づいて何らかのフローを動かすような処理はFluxで簡単に作成できそうです。
もちろん既存のローコード・ノーコードツールにBeam/Funk/Funnelなどでデータを送信しても同じことができますが、SORACOMプラットフォームまで閉域網を使って届いたデータが、SORACOMプラットフォームから外に出ることなくローコードで作成したアプリで利用できるというのが嬉しいところです。

センサーデータだとどういったことができるか、また同じアプリケーションをPowerAutomateで行うとどうなるかの比較は別途やってみたいと思います。

皆様のお役に立てば幸いです。

サービス一覧 www.alterbooth.com cloudpointer.tech www.alterbooth.com