SalesforceのAI機能を外部システムから呼び出す!REST APIを使ったプロンプトテンプレート活用術
Salesforceに搭載されている生成AI機能、「Einstein 生成AI」。その中核を担うのが「プロンプトテンプレート」です。Salesforceの画面上から対話形式で利用できるだけでなく、実はREST APIを通じて外部のシステムから直接呼び出すことが可能です。
これにより、例えば以下のようなユースケースが考えられます。
- 外部システムとの連携
- 既存の顧客管理システムやEコマースサイトから、SalesforceのAI機能を呼び出して、顧客対応の一次返信を自動生成する。
- 定型業務の自動化
- スプレッドシートやSlackなど、普段使っているツールから特定のキーワードをトリガーに、報告書やメールのドラフトを自動作成する。
本記事では、このプロンプトテンプレートをREST API経由で実行する方法について、具体的なリクエスト・レスポンスの例を交えながら詳しく解説します。
本記事で解説する処理の全体像は以下の通りです。外部システムからREST API経由でSalesforceのプロンプトテンプレートを呼び出し、その結果を受け取る流れを示しています。
プロンプトテンプレートの準備
まずは、APIで呼び出すプロンプトテンプレートをSalesforce上で作成します。今回は例として、顧客からの問い合わせメールを要約し、次のアクションを提案するプロンプトを作成しました。
このプロンプトテンプレートは、以下の3つのタスクを実行します。
- 1. 問い合わせ内容の要点を抽出する
- 2. 顧客の感情を分析する(ポジティブ/ネガティブ/ニュートラル)
- 3. 推奨される次のアクションを提示する
Input:subject
と Input:body
という2つの入力変数を受け取り、それを元にAIが回答を生成する仕組みです。
REST APIの実行
プロンプトテンプレートの準備ができたら、いよいよREST APIを呼び出します。
※認証について
REST APIを呼び出すには、事前にSalesforceで「外部クライアントアプリケーション」を作成し、呼び出し元アプリケーションの認証ポイントを作成しておく必要があります。
登録した接続アプリケーションを介してOAuth 2.0などの認証フローを実行し、APIリクエストのヘッダーに含めるアクセストークンを取得してください。本記事ではリクエスト/レスポンスの構造に焦点を当てているため、認証に関する詳細な手順は割愛します。
エンドポイント
プロンプトテンプレートを実行するためのエンドポイントは以下です。このエンドポイントにPOSTリクエストを送信します。
https://{Salesforce組織のドメイン}/services/data/v{xx.x}/einstein/prompt-templates/{promptTemplateApiNameOrId}/generations
-
{Salesforce組織のドメイン}
your-company.my.salesforce.com
のような、お使いのSalesforce組織のMy Domainを指定します。
v{xx.x}
v63.0
のようにAPIバージョンを指定します。
{promptTemplateApiNameOrId}
- 実行したいプロンプトテンプレートのAPI参照名またはIDを指定します。これはプロンプトテンプレートの詳細ページで確認できます。
-
リクエストボディ
リクエストボディには、プロンプトテンプレートの実行に必要な情報を指定します。
詳細については、Salesforce開発者ドキュメント (Einstein Prompt Template Generations Input) をご参照ください。
主要なプロパティは以下の通りです。
プロパティ名 | 型・必須 | 説明 |
isPreview | Boolean (必須) | falseを指定するとプロンプトテンプレートを解決し、LLMからの応答を生成します。trueを指定するとLLMへのリクエストは行わず、解決されたプロンプトテキストのみを返します。 |
inputParams | Map (必須) | プロンプトテンプレート内の変数を解決するためのパラメータと値を指定します。valueMapの中に、テンプレートで定義した入力変数(例: Input:subject)と、その値をセットで渡します。 |
additionalConfig | Object (必須) |
LLMプロバイダー向けの追加構成情報を指定します。詳細についてはドキュメント参照。 applicationName: 呼び出し元アプリケーションを識別するための名前。プロンプトテンプレートの呼び出しでは「PromptTemplateGenerationsInvocable」を指定。 (補足)今回は例示していませんが、additionalConfig内にadditionalParametersプロパティを指定することで、LLMプロバイダ特有のパラメータ(例:応答を必ずJSON形式で出力させる等)も個別に渡せます。 |
-
-
レスポンス
-
上記リクエストを送信すると、以下のようなレスポンスが返ってきます。(※以下画像では結果データをVSCode上で見やすく整形)
responseMessages[0].contextに、プロンプトテンプレートの実行結果である要約、感情分析、推奨アクションが格納されています。このように、JSON形式で構造化されたデータが返ってくるため、後続の処理で扱いやすいのが特徴です。
主に使用するのは生成結果が格納されている、responseMessagesプロパティになるかと思いますが、各項目の詳細については、Salesforce開発者ドキュメントもご参照ください。
レスポンスの中身のサンプルは以下のようなものになります。
レスポンス全文を表示する
{
"generations": [
{
"text": "## 問い合わせ要点\n- 顧客は「スーパーガジェットX」の注文状況について問い合わせている。\n- 注文から1週間経過しているが、まだ発送の連絡がない。\n- ウェブサイトの情報に基づき、発送が遅れていることに対して心配している。\n\n## 顧客の感情\nネガティブ\n\n## 推奨される次のアクション\n発送状況を確認し、顧客に現在の状況と予想される配送日を伝える。",
"parameters": "{finish_reason=stop, refusal=null, annotations=[], index=0, logprobs=null}",
"responseId": "c8c3a753-327c-4253-af8c-3446af66226d",
"safetyScoreRepresentation": {
"hateScore": 0.0,
"physicalScore": 0.0,
"profanityScore": 0.0,
"safetyScore": 0.9999987,
"sexualScore": 0.0,
"toxicityScore": 0.0,
"violenceScore": 0.0
},
"contentQualityRepresentation": {
"isToxicityDetected": false
}
}
],
"isSummarized": null,
"parameters": null,
"prompt": "あなたは優秀なカスタマーサポートのエキスパートです。\n以下の顧客からの問い合わせメールを分析し、下記のフォーマットで要約してください。\n\n# 指示\n* 問い合わせの要点を3つの箇条書きでまとめてください。\n* 顧客の感情(ポジティブ、ネガティブ、ニュートラル)を判定してください。\n* この問い合わせに対して、どのような最初のアクションを取るべきか提案してください。\n\n# 出力フォーマット\n## 問い合わせ要点\n-\n-\n-\n\n## 顧客の感情\n[ここに感情を記載]\n\n## 推奨される次のアクション\n[ここに具体的なアクションを記載]\n\n# 顧客からの問い合わせメール\n件名: 製品の配送状況について\n本文: お世話になります。\n先週注文した「スーパーガジェットX」(注文番号: 12345)ですが、まだ発送の連絡がありません。\nウェブサイトでは2〜3営業日で発送と記載があったので、少し心配になっています。\n現在の状況と、いつ頃届く見込みか教えていただけますでしょうか。楽しみにしているので、よろしくお願いします。\n",
"promptTemplateDevName": "0hfgL000002rn4fQAA",
"requestId": "chatcmpl-BnxbnpdrGApOKL82CC7F48QOmoxEd",
"requestMessages": [
{
"content": "あなたは優秀なカスタマーサポートのエキスパートです。\n以下の顧客からの問い合わせメールを分析し、下記のフォーマットで要約してください。\n\n# 指示\n* 問い合わせの要点を3つの箇条書きでまとめてください。\n* 顧客の感情(ポジティブ、ネガティブ、ニュートラル)を判定してください。\n* この問い合わせに対して、どのような最初のアクションを取るべきか提案してください。\n\n# 出力フォーマット\n## 問い合わせ要点\n-\n-\n-\n\n## 顧客の感情\n[ここに感情を記載]\n\n## 推奨される次のアクション\n[ここに具体的なアクションを記載]\n\n# 顧客からの問い合わせメール\n件名: 製品の配送状況について\n本文: お世話になります。\n先週注文した「スーパーガジェットX」(注文番号: 12345)ですが、まだ発送の連絡がありません。\nウェブサイトでは2〜3営業日で発送と記載があったので、少し心配になっています。\n現在の状況と、いつ頃届く見込みか教えていただけますでしょうか。楽しみにしているので、よろしくお願いします。\n",
"moderationSettings": {
"enableModeration": true
},
"role": "USER"
}
],
"responseMessages": [
{
"content": "## 問い合わせ要点\n- 顧客は「スーパーガジェットX」の注文状況について問い合わせている。\n- 注文から1週間経過しているが、まだ発送の連絡がない。\n- ウェブサイトの情報に基づき、発送が遅れていることに対して心配している。\n\n## 顧客の感情\nネガティブ\n\n## 推奨される次のアクション\n発送状況を確認し、顧客に現在の状況と予想される配送日を伝える。"
}
]
}
まとめ
本記事では、SalesforceのプロンプトテンプレートをREST API経由で呼び出す方法をご紹介しました。
この連携により、Salesforceの強力なAI機能を、既存の業務フローや外部システムに柔軟に組み込むことができます。アイデア次第で様々な業務の自動化、効率化が実現できるかと思います。
皆さんもぜひ、このAPIを活用して、自社のビジネスにAIの力を取り入れてみてはいかがでしょうか。