Agentforce PromptBuilder使ってみる3
Coral CloudのSample Appを元に演習に沿って機能に振れる第四弾!
この演習では、SalesforceのプロンプトビルダーのFlexテンプレートを活用し、ゲストにパーソナライズした体験の提案を行える様にします。
やってみた感想
利用しているプロンプトから期待する出力に必要な制約事項の伝え方や、Apexによるグラウンディングのアプローチが行える事を把握できました。
細かなデータを確認せずにパーソナライズされたコンテンツがすぐに作成されるのは便利だと思いつつ、その内容が本当に適した内容になっているかは確認する運用も必要かなと思いました。
ステップ1: Flexテンプレートの新規作成
まずは、プロンプトの土台となるFlexテンプレートを作成します。
- 設定 から プロンプト ビルダー を検索し、選択します。
- [新しいプロンプト テンプレート] をクリックします。
- 以下のパラメータで構成します。
- プロンプトテンプレート種別:Flex
- プロンプトテンプレート名:パーソナライズされたスケジュールを作成
- テンプレートの説明:現在利用可能なリゾート体験の時間と場所が含まれ、ゲストの興味に合ったパーソナライズされたスケジュールを作成します。
- データソース (「入力」(省略可能)の部分)
- 名前:Contact
- API参照名: myContact
- ソース種別:オブジェクト
- オブジェクト: 取引先責任者
- 「次へ」 をクリックします。

- ワークスペースに以下のプロンプトを貼り付けます。
Your name is {!$User.FirstName}. You work in the guest success team at {!$Organization.Name}.
Introduce yourself, then present the list of resort activities happening today that match the guest's interests.
For clarity, use a bullet list.
For each activity, include name, time, location and duration on a single line. Do not include the date.
Tell the guest to reach out if they'd like to book any of these activities.
List of activities happening today that match the guest's interests:
6. プレビュー パネルで、サンプル取引先責任者データの Sofia Rodriguez のContactIdを指定して、[保存してプレビュー] を実行します。
それっぽい提案テキストが生成されます。
※箇条書きリストが表示されている場合は、リゾート体験セッションのデータを引き渡さずにLLMが生成したハルシネーションのあるリストになっています。
この後のセッションでリゾート体験セッションに基づいた生成となる様にしていきます。

ステップ2: データ連携用(グラウンディング)のApexクラス作成
AIに正しい情報を与えるため、リゾートの体験セッションを取得するApexクラスを作成します。
- Code Builder(またはVS Code)でコマンドパレット(Ctrl + Shift + P)を開き、「Apex クラスの作成」 を選択します。
- Apex を検索し 、 「Apex クラスの作成」を クリックします。
- クラス名を PersonalizedGuestExperiences とします。
- デフォルトのコードを次のコードに置き換えます。
public with sharing class PersonalizedGuestExperiences {
// Make this method available for grounding
// the Generate_Personalized_Schedule prompt template
@InvocableMethod
public static List<Response> getSessions(List<Request> requests) {
Request input = requests[0];
Contact contact = input.myContact;
List<Session__c> sessions =
ExperienceSessionController.getSessions(contact);
// Create expected response
List<Response> responses = new List<Response>();
Response res = new Response();
res.prompt = JSON.serialize(sessions);
responses.add(res);
return responses;
}
// The variables in this class need to match the prompt template inputs,
// that may be different on each prompt template
public class Request {
@InvocableVariable(required=true)
public Contact myContact;
}
public class Response {
@InvocableVariable
public String Prompt;
}
}
- ファイルを保存
- ファイルエクスプローラー(左側のサイドバー)で、
PersonalizedGuestExperiences.cls-meta.xmlファイルをクリックします。 - Salesforceスペシャリストとして、翻訳とAPIバージョンに関する重要な補足を提供します。
- クラスのAPIバージョンが少なくとも 60.0 以上であることを確認してください。以下のようになっているはずです。
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>60.0</apiVersion>
<status>Active</status>
</ApexClass>
ファイルを保存し、コード内の任意の場所を右クリックし、SFDX: Deploy This Source to Org でソース組織にデプロイします。
ステップ3: Apexを使用してテンプレートをグラウンディングする
作成したApexクラスをプロンプトに組み込みます。
これにより、LLMは実際の顧客データに基づいた正確な回答を生成できるようになります。
- プロンプトビルダーに戻り、先ほどのテンプレートを開きます。
- プロンプトの末尾でリソース挿入ボックスを使い、「Apex > PersonalizedGuestExperiences」 を選択して挿入します。
- [名前を付けて保存] > [新しいバージョンとして保存] をクリックし、[アクティブ化] します。
⠀
ステップ4: LLMの推論能力を活用した高度なカスタマイズ
AIに「スケジュール調整」の役割を与えます。
重複を避け、休憩時間を考慮したスケジュールを提案させます。
プロンプトを以下のように更新します。
Your name is {!$User.FirstName}. You work in the guest success team at {!$Organization.Name}.
Introduce yourself, then present the list of resort activities happening today that match the guest's interests.
For clarity, use a bullet list.
For each activity, include name, time, location and duration on a single line. Do not include the date.
Then add a suggested schedule.
Take into account the start time and duration of each activity.
Make sure that you don't include activities that overlap.
Make sure the guest has at least 60 minutes of free time between activities.
Present the suggested schedule in chronological order.
Tell the guest to reach out if they'd like to book any of these activities.
List of activities happening today that match the guest's interests:
{!$Apex:PersonalizedGuestExperiences.Prompt}
[保存してプレビュー] をクリックします。
※結果が思わしくない場合は、モデル設定を Google Gemini 等に変更して試してください。
満足した結果がでる様になったら有効化をクリック。
ステップ5: 画面フローへの組み込みと実行
- 最後に、作成したプロンプトを実際の業務プロセス(画面フロー)に組み込みます。
- 設定から[フロー] を検索し、[フロー] を開きます。
- Personalized Schedule フローを開きます。
Get Contact要素の下にある丸にマウスを合わせ、+をクリックしてActions(アクション)を検索し、Generate Personalized Scheduleを選択します。- アクションを次のように設定してください。
- ラベル:Invoke Prompt
- API名:デフォルトのまま
- 説明:Invoke the Generate Personalized Schedule Prompt
- Contact:
Get_ContactからContact(レコード変数)を選択します。その際、{!Get_Contact}の後に自動的に追加される『ドット(.)』を削除してください。
Display Result(結果表示)要素を編集します。- Display Text(表示テキスト)コンポーネント(『Insert Variable Here』と書かれた箇所)をクリックします。
- 右側パネルのリソースセレクター(Resource Picker)で、
Outputs from Invoke_Prompt>promptResponseを選択します。(リッチテキスト編集エリアに『Insert Variable Here』という文字が表示されている場合は、必ず削除してください。) - フローを保存し、[アクティブ化] します。
動作確認
Coral Cloud Resortsアプリの [取引先責任者] タブから Sofia Rodriguez を開き、Personalized Schedule クイックアクションを実行してください。
AIによって生成された、彼女の興味にピッタリで、かつ無理のないスケジュールの提案が表示されれば成功です。

