Models API とは?

高度にカスタマイズしたAIアプリケーションを実現するAPI

Models API は、Salesforce開発者がLLMを利用したアプリケーション開発で活用できる、新しいAPI です。Anthropic、Google、OpenAIなどの大規模言語モデル(LLM)、その他任意のLLM等に、Salesforceプラットフォームからは Apex で、外部アプリからは REST API 経由でアクセスします。慣れ親しんだApexを使い、既存の アプリ / コンポーネント / ビジネスロジック 等に、生成AIテクノロジーを組み込みます。

パッケージング対応

現在、 Models API は、第一世代パッケージング(1GP)、第2世代パッケージング(2GP)の両方に対応しています。ISVパートナー企業は、この Models API を活用したAIソリューションをAppExchangeマーケットプレイスで展開できます。

Einstein Trust Layer

LLMは革新的なテクノロジーである一方、ビジネス文脈で活用する観点では、データをセキュアに取り扱うことが特に重要です。Einstein Trust Layer には、LLMと連携する際、データとユーザーを保護する機能が含まれます。Models API への呼び出しは、すべてこの Einstein Trust Layer を経由します。

einstein-trust-layer

  • CRMデータに基づいたデータの信頼性
  • 機密データのマスキング
  • 生成アウトプットの有害性検出
  • 監査証跡とフィードバック
  • ゼロリテンション

Salesforce開発者向けの新しいAPIである Models API を活用し、既存のSalesforceテクノロジー Apex, LWCにより、どのようなAI-Poweredなソリューションが実現できるか? サンプルコンポーネントを例に見ていきます。

当サイトでは、最新かつ正確な情報の掲載を努めておりますが、正確性や安全性、効果等を保証するものではありません。本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。また、当サイトの掲載内容によって損害等が生じた場合は、一切の責任を負いかねますので、ご利用の際はヘルプやリファレンスをご参照の上、お手元で十分検証をいただいたのち導入についてご判断くださいますようお願いいたします。

カスタムコンポーネント – SNS投稿文ジェネレーター

マーケティング担当者がSNS投稿する際の文章を生成AIに作ってもらうシーンを想定します。文章を生成するだけでなく、プレビューで確認しながら条件を調整し、投稿文をブラッシュアップできる機能を考えます。

機能

  • システム管理者がシステムプロンプトをプリセット
  • 商品(標準オブジェクト)レコードページと連動
  • ユーザーが細かな指示を出して文章を調整
  • 投稿イメージをプレビュー確認

これをフロント側はLWCで作り、組み立てたプロンプトを LLM に投げる部分は、Apex から Models API を使ってコールする構成にします。

構成

sns-post-generator-lwc

システム管理者がシステムプロンプトをプリセット

本コンポーネントをレコードページに配置する際、Lightningアプリケーションビルダーのプロパティ設定で、システムプロンプトを設定できるようにします。ここで設定した値はプロンプトの一部として組み込むことを想定しています。

*.js

systemPrompt プロパティをコンポーネント外から受け渡しができるよう、@api デコレータをセットします。

*.js-meta.xml

Lightningアプリケーションビルダーのプロパティ設定から systemPrompt を編集できるよう targetConfig を設定します。

Lightningアプリケーションビルダーでコンポーネントを配置すると、システムプロンプト という設定項目が現れます。ここで入力された値は、LWCのJavascriptから systemPrompt プロパティでアクセスできるようになります。

lightning-app-builder

商品(標準オブジェクト)レコードページと連動

商品オブジェクト Product2 のレコード情報をプロンプトで扱えるよう、データ連携させます。

*.js-meta.xml

商品オブジェクト Product2 のレコードページで機能するコンポーネントであることを定義します。

*.js

@wire デコレータと recordId プロパティを使い、商品オブジェクト Product2 の商品説明項目 Description を含むレコード情報を取得するようにします。

これで、以下のような商品説明項目の値をコンポーネントから扱うことが出来るようになります。

product2-description

ユーザーが細かな指示を出して文章を調整

UI上で以下項目を設定できるようにします。

  • トピック: 自由入力
  • 言語: 日本語 / 英語
  • スタイル: カジュアル / フォーマル / ボエム風 / クイズ形式
  • 文字数の目安: 0-400
  • ハッシュタグ数: 0-10
  • 文章生成に使うLLM: GPT-4 Omni / Claude 3 Haiku

*.html

LWCの標準部品を使っています。ユーザーがUI上で設定した各値を取得できるよう、各項目に ref を設定しています。

以下のようなUIになります。

ui-configure

これでプロンプトを組み立てる準備が整いました。

プロンプトの組み立て

プロンプトに必要な各情報を取得し、プロンプトを組み立てます。

*.js

それぞれプロンプトにバインドします。

  • システム管理者が設定したシステムプロンプト: ${this.systemPrompt}
  • 商品ページの商品説明項目: ${this.product2.data.fields.Description.value}
  • ユーザーが設定した各パラメーター値: ${this.refs.[各パラメーターのref値].value}

プロンプトの実行

組み立てたプロンプトをModels API経由でLLMにコールします。

*.js

文章生成ボタン押下時、組み立てたプロンプトを prompt 、ユーザーが指定したLLMを
modelName を引数とし、Apexメソッド getGeneratedText を呼び出します。生成したテキストは content に格納されます。

Apex

Apexでは、promptmodelName を引数として受け取り、Models API を介し、LLM にプロンプトを投げます。

投稿イメージをプレビュー表示

生成した文章はそのまま表示せず、ハッシュタグ部分をリンク形式に変換して表示します。

*.js

プロンプトから返ってきた値 content を、リッチテキスト形式の文字列に変換するgetter関数 formattedContent を定義しておきます。

すると、以下のように表示されます。

ui-preview

デモ

コンフィグ調整しながら何度もSNS投稿文をプレビュー確認することができます。

lwc-demo-01

lwc-demo-02

lwc-demo-03

まとめ

Models API により、既存Salesforceテクノロジー(LWC、フロー、Apex 等)で、より高度にカスタマイズされたAIアプリケーションを作成できます。また、プロンプトに必要なデータは安全かつ柔軟にバインドされ、かつEinstein Trust Layerを介すことで、信頼性の高いAIを実現します。本記事で紹介したLWCはサンプルコードも公開してます。是非お試しください。

参考資料

Get the latest Salesforce Developer blog posts and podcast episodes via Slack or RSS.

Add to Slack Subscribe to RSS