見出し画像

#Salesforce の生成AI探求記1:フローとの組み合わせ

ここでも書いた通りなのですが、2月よりSalesCloudのUnlimited+エディションにアップグレードしたと思っていたら2/29でエディションがEOLとなり、Einstein 1 Editionという製品に交換されました。色々あった訳ですが、ようやく生成AI関連の機能を使えるようになってきたので、このシリーズではその使用感について迫ってみようと思います。
第一回は、プロンプトビルダーとフローの組み合わせについてです

プロンプトビルダーってなんだ?

生成AIを使う場合には、プロンプトという指示文が必要になります。
例えば、「春とおでんを題材にしたショートショートを書いて」みたいなことをお願いすると、こんな感じでテキストが生成されます

「春の訪れ」
寒さも和らぎ、少しずつ春の訪れを感じる頃になりました。私は仕事帰りに、いつもの屋台に立ち寄りました。おでんの甘い香りが漂ってきます。
「いらっしゃい!」と、おでん屋の親父さんが笑顔で迎えてくれました。「いつものでいいかな?」
私は頷き、カウンターに座りました。春の夜風が心地良く、おでんの温かさが体に染み渡ります。
「春になると、おでんの具材も変わるんだよ」と、親父さんが話し始めました。「新じゃがや春キャベツ、タケノコなんかも入れるんだ」
私は興味深く聞き入りました。季節ごとに変化するおでんの具材。それは、春の訪れを感じさせてくれるものでした。
「おいしいね」と、私は呟きました。親父さんは満足そうに微笑みました。
春の夜に、おでんを食べる。そんな小さな幸せを感じられる瞬間が、私は好きです。季節の移ろいを感じながら、おでんの温かさに心も体も癒されるのです。

Created By Claude3 Opus

実際に業務中にショートショートをSalesforceで出力させる人はあまりいないと思うのでこのように使う訳ではないのですが、これを弊社リバネスの業務に割り当てていきたいと思います。

まずはプロンプトビルダーでプロンプトを作ろう

プロンプトビルダーの画面

入力欄は左上の白枠です。ここは自由記述ですね。
この画面になる前の段階で、どのオブジェクトを対象にするのかを選択します。弊社ではLID-DATAというオブジェクトがあり、その中にリバネスユーザーがいろいろな情報をアップロードするWebアプリを持っています。
例えば、リバネス研究費という若手研究者むけ研究費を行っているのですが、そこには研究者から研究費取得のために自分の研究内容を書いたレジュメを申請書として提出する訳です。
さてこのリバネス研究費にはビジネスモデルとして一つ欠点があります。リバネス研究費が有名になるにつれて申請書が増えるのですが、これはつまり申請書を読む数も増えるということです。研究費はクライアントから予算をもらって行うプロジェクトで、できる限り沢山の人に応募してもらいたいものではあるのですが、現実を考えるとリバネスもクライアントも無限の量の申請書に対応できるわけではありません。これをなんとかしなくてはと思っていたのですが、なかなか解決の糸口が見えなかったところに現れたのが生成AIということになります。大規模言語モデルを用いて申請書の初期スクリーニングを行おうではないかという、動機がふつふつと高まっています。

プロンプトを書いていく

では、このプロンプトにはどんな事を書いていきましょうか。プロンプトビルダーで書くプロンプトは、一つのレコードに対して使うものではなく、いろいろな情報が入ってくるようなものに仕上げる必要があります。そのためこんな感じになります

プロンプト入力画面

右上には対象オブジェクトがあります
リソースという部分が重要で、現在の組織情報、現在のユーザー情報、そしてターゲットとしたオブジェクトの情報を引っ張ってくることが出来ます
青くなっている部分がデータから引っ張ってきた部分で、これが動的に変更されるということになります。それほど難しい仕様ではないですね。

プロンプトを確認する

解像度…?誤訳だよな

左下に、変数を割り当て済みのプロンプトが現れます。ここでは実データが見えてしまうのでモザイクしましたが、赤枠で囲った部分がLID-DATAから引っ張ってきた情報です
プレビューボタンを押すことで実際にLLMに投げられるプロンプトがどんな文章になるのかを確認することができます。
そして最後に右側の応答欄をみれば出力が確認できるという訳です。
これでプロンプトビルダーは完成ですね

これだけじゃ使えないので使い方を考える

プロンプトはどうやって使うんだっけ?ということを考えましょう
今回はフローを利用しようと思います
動作としては、レコードを更新したタイミングでLLMが呼ばれて、生成されたデータをレコードの特定の項目にいれることにします。
リバネスでの活用イメージでは、申請書が完成したタイミングでプロンプトが実行され、初期スクリーニングに役立つような情報をカスタム項目にインプットするという使い方を想定します

作ったフロー

フローはシンプルです。レコードトリガフローを使います
非同期処理が必要かなとも思ったのですが、同期処理で行うようです。非同期でも使えるのかは不明。誰かわかったら教えて下さい
決定1のところでは、LID-DATAの項目からリバネス研究費かつユーザーの言語設定が日本語だった場合にこれを実行するという形にしています。弊社では英語話者が申請してくることも少なくないため、そのときは英語で出力させるようなプロンプトを書けばよいのではないかと思います。
(と、ここまで書いて思ったのですが、審査員がどの言語圏になるのかを考えて実行したほうが良さそうですね)
プロンプトビルダーで設定したものはアクションノードから選べるようになります。prompt で検索するとヒットするはずなので検索してみてください。

あとは実行するだけ

レコードトリガフローなので、レコードを更新してみましょう。
あら不思議(不思議ではない)、インプットからプロンプトを通した出力が保存されました!
注意点としては、LLMを通すので実行時間が結構かかります。ガバナ制限がどうなるのかは調べていないので知っている人がいたら教えて下さい!

まとめ

フローで使えるというのはSalesforceブログで深田さんが言ってたのを聞いて知ったのですが、この実装はかなり良いのではないでしょうか。

Salesforceユーザーの感覚にも合っているし、とても良い組み込み方だと思います。
一方で一つ課題になりそうなのは、エディションによって使える回数上限というものが決まっているので、事故るとあっという間に上限突破とかやらかしそうだなという予感がしています。
BYOAIということで、自分が使ってるAPIを持ち込むことが出来るので、上限突破してもなんとかなる場合もあるとは思うのですが、それにしてもAPIをものすごく消費するなんていう事故が起こらないようにと願ってやみません。
というのは冗談として、Salesforceっぽい実装になっていて個人的には好感触でした。

noteにはこれまでの経験を綴っていこうかと思います。サポートによって思い出すモチベーションが上がるかもしれない。いや、上がるはずです。