今年(2024年)の7/17に開催されたSORACOM Discovery 2024でSORACOM社が新サービスのSORACOM Fluxを発表しました。(サービスサイト)
( SORACOM Discovery 2024サイト)
本稿では、SORACOM Fluxとkintoneをつないだ事例を説明します。
私は用事があり、SORACOM Discovery 2024には参加できませんでした(前夜にはSORACOM UserGroupの皆さんと会場の近くで飲んでましたが)。
そのため、私はSORACOM Fluxについてよく知らずにいました。デバイスから得た情報をAIを用いて加工・チェックが可能。それが私のSORACOM Fluxについて持つあいまいな知識でした。
本稿をアップした9月中旬の時点では、kintoneの標準機能にはAIによる補助機能は備わっていません。
この11月に開催が予定されているCybozu Days 2024の中で、ひょっとしたらAIに関する何らかの発表がサイボウズ社からあるのかもしれません。が、今の時点ではkintoneの中でAIを使いたい場合は、サードパーティによるプラグインを選ぶか、自分でコーディングする必要があります。
一方で、SORACOM FluxはSORACOM Discovery 2024の発表によってSORACOMのサービスの一つとしてラインナップに加わりました。kintoneにないAIの標準機能をSORACOMは標準機能として持っている。となれば、一度SORACOM Fluxを使ってみるべきではないかと思いました。
ちょうど折良く、SORACOMのSPSパートナー会でSORACOM Fluxの説明会があると言う連絡をいただきました。私は瞬時に申し込みました。
8/9の説明会の場では、SORACOM Fluxの機能の大枠を学びました。それとともに、SORACOM FluxについてSPSパートナー会でLT登壇しないかというか応募のお誘いをいただきました。LT用に2000クレジットを使わせてもらえるというので、私は説明会が終わってすぐに申し込みました。
そのあと、お盆休暇の中の一日を使ってSORACOM Fluxの機能を理解し、LTの内容や方向性と資料を作成しました。後日、作業の合間に修正を加えたあと、SORACOMさんに対してLTの内容を説明したのが8/27です。
8/27の時点でほぼLTで話す内容は完成していて、画像の扱いだけが若干の課題でした。
画像の連携も無事にできるようになり、9/12にSORACOM社本社で行われたSPSパートナー会では、配信ルームからLT登壇いたしました。事前の録画収録ではなくリアルタイム配信なので、配信ルームに不慣れな私は少し緊張しましたが、無事に終了。
LTの資料の中で詳細はブログで発表しますと書きました。そのブログこそが本稿です。
LT資料はこちら。
2.企画
SORACOM Fluxとは、どういうサービスでしょうか。
説明会を受けての私の理解によれば、SORACOM Fluxの設定画面では複数のAIサービスに呼び出しをかけられます。その結果をつなぐことで、様々な画像やAIからのインプットをもとに、用途に応じたアウトプットが行えます。
最近、AIエージェントの世界ではLangChainがとても脚光を浴びており、私も少し触っています。
LangChainはCUI、つまりコードベースで動きます。一方のSORACOM Fluxは、各プロセスをGUIでつなぐことができます。かつ、SORACOMの多種多様なデバイスからの画像データなどが簡単に扱える点がSORACOM Fluxを使うメリットではないかと考えます。
であるならば、私がSORACOM FluxのLTで取り上げるべきは、本来はSORACOMの多様なデバイスを用いた画像分析でしょう。実際、SORACOMさんから提示いただいたサンプル事例でも、倉庫内で所定の規則に定められた装備を着用していない人を画像検出し、アラートを出すユースケースが想定されていました。
私も最初はソラカメから受け取った画像を分析し、アラートを出す実装を考えました。ですが、ここで私の天邪鬼の衝動がむくむくと牙をむきました。あえてkintone使ってみたら面白いんじゃねーかと。
AI機能が標準装備されていないkintoneのデータをSORACOM Fluxを使ってkintoneに書き戻すことで、よりkintoneのAI活用の可能性が拡がるのではないか。kintone界隈にもSORACOMのソリューションの紹介ができるのではないか。SORACOM界隈の人、特にデータの蓄積にSORACOM Lagoonだけを使う方にも、kintoneの世界を紹介できるのではないか。
それが私の着想でした。
早速、脳内で実装を始めてみました。考えてみたことろ、SORACOM側の認証などを突破する必要があるのと同時に、kintoneの添付ファイルの扱いを考える必要もあります。
そして今回は、JavaScriptを使わずノーコードで実装を完結することも私の中の制約として課していました。
そこでkintoneとSORACOMをつなぐ部分は全てzapierで実装しました。今回はzapierを採用しましたが、おそらく同じ事はmakeでも他のiPaaSでも可能ではないかと思います。よかったら試してみてください。
3.zapierの設定
zapierとは、何でしょうか?
簡単に言うと複数のウェブサービスを簡単につなぐためのツールです。Integration Platform as a Service (iPaaS)の一種とも言われます。
複数のウェブサービスとは、kintoneとかSORACOM Fluxを指しています。今回の事例では画像をUrl化して扱うためにGoogle Driveも使っています。Google Driveもウェブサービスの一つと見做して良いでしょう。
zapierの使い方は解説サイトの説明を参考にして頂くとして、まずはzapierの設定結果をアップします。
上から順に説明します。最初のフローはkintoneのwebhook機能で出力した結果(JSON形式)を受け取るフローです。kintoneのウェブフックは、追加、更新、ステータス変更など、複数の処理の結果に応じてzapierのような外部サービスにデータとして出力できます。コードを書く必要がないので楽ですね。ここでフローを設定すると、自動的にzapierのUrlが生成されますので、そのURLをkintoneのWebhookの設定画面に登録します。
2番目は、kintoneのwebhookから、zapierなどの外部ウェブサービスに処理を投げる際に必ず行います。永久ループを防ぐために必要な処理です。
具体的には、kintoneのレコードが手動で更新されたか、それともこの一連のフローによって更新されたかを判断します。もしkintoneのレコードがzapierによって更新された場合は、ここで後続の処理をストップします。そうしないとzapier/SORACOM Fluxでkintoneを更新→kintoneは更新された結果をwebhook送信→/SORACOM Fluxでkintone更新と永久ループが発生してしまいます。
より詳しく説明すると、kintone側で手動更新した場合は、edit.submitなどkintone側で実装するJavaScript内の処理の中で、任意の項目の値を「手動」にセットします。zapierでは、この値(kintoneのwebhookの結果としてJSONで受け取っている値)が「手動」の場合、後続の処理を実行します。この判断を行うのが当フローです。Filter by zapierを使っています。
この後、SORACOM Fluxの中でkintoneに対して更新をかける際は、この任意の値は「手動」以外の値にセットします。この処理を怠ると永久ループが発生しますので注意してください。
3番目は、kintoneで出力した添付ファイルフィールドに格納されているFileKeyをもとにkintoneのファイルダウンロードAPIを実行し、ファイルの中身を取得する処理です。
kintoneは仕様として、kintoneのレコードに格納されている添付ファイルの値を外部から取得できません。URLも取れません。
ファイルを使いたければFileKeyをもとに、ファイルダウンロードAPIにリクエストを投げ、ファイルの実体をダウンロードし、受け取ったblob形式の値を扱うしかありません。これはセキュリティー上、必要な処理です。
4番目は、上で取得したファイルの実体をGoogle Driveにアップロードする処理です。アップロードした結果レスポンスには複数のキーと値のペアが含まれています。その中には複数のUrlも含まれていますが、その中でSORACOMが権限の制約を乗り越えて扱えるUrlはThumbnail Linkのみでした。
5番目は、SORACOMに対してアクセストークンを取得する処理です。
いうまてもありませんが、SORACOMはクラウドサービスですのでセキュリティーは堅牢です。認証なしでSORACOMにリクエストを投げても全て跳ね返されます。ここで取得したアクセストークンを含めて、次の処理でSORACOMにリクエストを投げないと、意図した結果が返ってきません。
6番目は、お待ちかねのSORACOM Fluxに対してリクエストを投げる処理です。ここで投げる先のURLはSORACOM Flux側で生成されたものを使います。後で生成された値の表示場所はお伝えします。
4.SORACOM Fluxの設定
はい、まずはSORACOM Fluxのフローをペタっと貼っておきましょう。以下にフローの作り方を最初からご説明します。
まずはメニューからSORACOM Fluxを選択しましょう。
続いては「新しいFluxアプリを作成する」を選びます。既に作ったアプリは下に表示されていますね。
作成するFluxアプリの名前と適用を入力しましょう。
SOARCOM Flux Studioの画面が表示されるので、チャネルを作成するを選びましょう。
最初のチャネルの種類を選ぶ必要があります。ここではAPI/マニュアル実行を選びます。これを選ぶことによって、zapierからの値を受け取れます。
新しく作成するチャネルの名前と適用を入れましょう。kintoneから来たものなので、そのように名付けています。
作成したチャネルでAPI/マニュアル実行を選んだので、URLが表示されています。これをzapierの最後のフローに設定します。
続いてアクションを作成します。アクションを追加を押しましょう。
ここで何を選ぶかが肝です。今回はAIを選びました。もちろん他のアクションを選ぶと、よりSORACOM Fluxの世界が広がります。
ここからがこの記事の本丸です。AIに対する指示を設定する部分です。
AIに投げるプロンプトはここで設定します。
AIからの回答をどうつなげるかをここで設定します。
私はここで図のように設定しています。AIのモデルは複数が選べます。私はAzure OpenAI (GPT-4o)を選びましたが、他にも本稿執筆時点では、以下の候補が選べるようです。
ここでプロンプトを設定します。好みに応じて「あなたはプロの店舗運営者です〜」云々の呪文を唱えておくとより幸せになれるかもしれません。
また、ここでは画像を選択できます。zapierからとってきたjsonにはGoogle DriveでUrl変換したThumbnail LinkのUrlを設定します。
なお、ここでzapierの最後のフローで設定したjsonのキーを全て英語にしていました。本当なら日本語キーの方が可読性が高くなるのですが、日本語キーに設定して、例えばここで(${event.payload.お客様人数})と設定すると読んでくれません。これは、SORACOMさんには改善をお願いしています。それまではお手間をかけるかもしれませんが、英語のキー名でお願いします。
また、その後のアクションは、その結果をkintoneに飛ばす処理なので、Webhookを選んでください。
次のチャネルではWebhookを選びました。ここでkintoneへのリクエストを組み立てます。kintone側のREST APIについては、こちらをご覧ください。
ここで設定する際は、kintone側のフィールドコードとjsonのキーは一致させてくださいね。
5.kintoneのデータをもとにAIに改善提案してもらった
私はこのようなkintoneアプリを作りました。
レコードを保存すると、zapierを経由してSORACOM FluxがAIに問い合わせた結果をkintoneを書き戻してくれます。
参考として、アプリのフィールド一覧も載せておきます。
6.他の運用上のご注意
注意点として現時点で挙げるべきは、jsonのキーに日本語が使えないことです。
それまではzapier側で英語のキーに変換してあげましょう。kintone側のフィールドコードは日本語のままでよいです。
ここには書いていませんが、AIに改善画像を生成させることもできるはずです。その画像をkintoneのファイルアップロードAPIを用いて、kintoneの該当レコードにAIによる改善案としてアップロードすれば、より実用的なソリューションが実装できることでしょう。
もちろん、出力先をLINEやSlackにしてもよいです。それは皆様次第です。
本稿がSORACOM Fluxを試してみようと思う方。kintoneと組み合わせてみたいと思った方にとってご参考になれば幸いです。
Pingback: 2024年9月のまとめ(個人) | Case Of Akvabit