Agentforceのプロンプトテンプレートを用いた要約処理とApexトリガー連携時の注意点

こんにちは、セブンツールス株式会社です!
今回もAgentforce関連の記事です。

今回は、プロンプトテンプレートを使用したレコードの要約方法とApexトリガーから呼び出す方法、その際の注意点をご紹介します!


プロンプトテンプレートでレコードを要約する方法

要約用カスタム項目の作成

まず、要約結果を保存するためのカスタム項目を作成します。
今回は、取引先オブジェクトにロングテキストエリア項目を作成していきます。

手順:
1.設定>オブジェクトマネージャー>取引先>項目とリレーション>新規をクリック

2.ロングテキストエリアを選択

3.表示ラベルや項目名を入力

4.項目レベルセキュリティを設定

5.動的フォームを使用している場合は選択

6.ページレイアウトを選択して保存

プロンプトテンプレートを作成

次に、プロンプトテンプレートを作成します。
※事前にEinstein機能を有効化しておく必要があります
 以下に設定画面のキャプチャを載せておきます

手順:
1.設定>Einstein>Einstein生成AI>プロンプトビルダーの「新規プロンプトテンプレート」をクリック

2.プロンプトテンプレート種別を「項目生成」に設定し、オブジェクト項目に先ほど作成したカスタム項目を指定

3.プロンプトを記述(今回は標準テンプレート「取引先サマリー」を日本語化し、微修正して記述)

ポイント:
キャプチャの画面下部に表示されている「レコードスナップショット:Account」が今回グラウンディングしている情報です。
レコードスナップショットを利用すると、ページレイアウトに基づく内容(関連リストなど)が自動的に含まれます。
(詳しくは、以下公式のヘルプページをご確認ください)

以上でプロンプトテンプレートの作成も完了です!
有効化の前にプレビューしてみましょう!
左上にあるプレビューボタンをクリックしてください。

関連レコードを選択

もう一度プレビューボタンをクリック

一番右の「生成された応答」セクションに要約内容が表示されました!

意図通り要約できているので、有効化ボタンをクリックして有効化します。

Lightningレコードページの設定

プロンプトテンプレートの作成が完了したので、次はレコードの詳細ページから要約できるように設定を行っていきます。
要約するには、Lightningレコードページにてプロンプトテンプレートの設定が必要となります。

手順
1.取引先レコードの詳細ページを開き、右上の歯車マークから「ページを編集」をクリック

架空の会社/人物です

2.要約用項目を選択し、プロンプトテンプレートに先ほど作成した「取引先要約用テンプレート」を設定、保存の上有効化
(動的フォームの有効化が必要です。)

これで、画面から簡単に要約できるようになります!
実際にやってみましょう!
要約用項目のペンマークをクリックして

キラキラマークをクリック

右側に要約内容が表示されるので、使用ボタンをクリック

要約項目へ値が設定されるため保存ボタンをクリック

これで画面からの要約ができました!
関連レコードを含めて要約してくれるのは便利ですね。

要約の自動化方法

便利な要約機能ですが、レコードの作成時や更新時に自動で動いてくれるともっと便利ですよね。なので、ここからはApexトリガーでプロンプトテンプレートを呼び出す際のサンプルコードを記載します。

サンプルコード
1.プロンプトテンプレート呼び出し用メソッド

    // 第一引数:要約したい取引先オブジェクト
    // 第二引数:プロンプトテンプレートのAPI名
    private String GetSummaryFromAI(Account targetObj, String templateName) {
        // プロンプトテンプレートのインスタンスを作成
        ConnectApi.EinsteinPromptTemplateGenerationsInput promptGenerationsInput = new ConnectApi.EinsteinPromptTemplateGenerationsInput();
        promptGenerationsInput.isPreview = false;
        
        // グラウンディング用のインスタンスを作成
        Map<String, ConnectApi.WrappedValue> valueMap = new Map<String, ConnectApi.WrappedValue>();

        // 先ほど作成したvalueMapにIDを紐づけるためのインスタンスを作成
        Map<String, String> relatedEntityRecordIdMap = new Map<String, String>();
        relatedEntityRecordIdMap.put('id', targetObj.id);
        
        // 同上
        ConnectApi.WrappedValue relatedEntityWrappedValue = new ConnectApi.WrappedValue();
        relatedEntityWrappedValue.value = relatedEntityRecordIdMap;

        // グラウンディング用のインスタンスに、関連オブジェクト名とレコードIDを紐づけして、
        // プロンプトテンプレートのインスタンスに紐づけ 
        valueMap.put('Input:Account', relatedEntityWrappedValue);
        promptGenerationsInput.inputParams = valueMap;
        
        // LLMのパラメータ設定
        promptGenerationsInput.additionalConfig = new ConnectApi.EinsteinLlmAdditionalConfigInput();
        promptGenerationsInput.additionalConfig.applicationName = 'PromptTemplateGenerationsInvocable';

        // プロンプトテンプレートの実行
        // 第一引数:固定でプロンプトテンプレート名
        // 第二引数:プロンプトテンプレートのインスタンス
        ConnectApi.EinsteinPromptTemplateGenerationsRepresentation generationsOutput = 
        ConnectApi.EinsteinLLM.generateMessagesForPromptTemplate(templateName, promptGenerationsInput);

        // レスポンス取得
        ConnectApi.EinsteinLLMGenerationItemOutput response = generationsOutput.generations[0]; 

        return response.text;
    }

2.”1”のメソッドの呼び出し方法

for (Account targetObj : triggerArgs) {
    targetObj.FieldForSummary__c = GetSummaryFromAI(targetObj, 'SummaryOfAccount');
}

これで、Apexトリガーからプロンプトテンプレートを呼び出せます!
各パラメータの詳細などは以下の開発者ガイドをご確認ください。

なお、2つほど注意点があるので、以下に記載します。

  • プロンプトテンプレートの実行にはレコードのIDが必要です。Insertトリガーで動作させる際は、Afterトリガーで一度DBからSOQLでデータを再取得の上、Database.update()メソッドでUpdateしてください。Updateトリガーを使用している場合は、再起防止処理も必要です。

  • 大量データ処理には向いていないです。LLMが1件のレコードを処理するのに、今回約5秒ほどかかりました。内、CPU時間をどの程度使っているかは不明ですが、データローダーで200件データを投入したところ Apex CPU time limit exceededのApexガバナ制限に抵触しました。

最後に、試しに取引先を作ってみると、

無事要約されました!

まとめ

いかがでしたか?
今回は、プロンプトテンプレートを使用したレコードの要約方法から、要約の自動化方法と注意点をご紹介しました。
今後もSalesforce関連の情報をどんどん発信していこうと思いますので、ぜひフォローしてください!


注意事項
本記事のコードはサンプルであり、動作を保証するものではありません。必ずご自身の環境でテストを行ってください。
記事内容は2025年9月9日時点のSalesforceバージョンに基づいています。

いいなと思ったら応援しよう!