【第516回】 Agentforce : ナレッジが見つからなかった後 ⇒ Web を検索する
Agentforce サービスエージェントでは、ナレッジ記事だけでは回答できなかった場合に、自社 Web サイトも検索して、エージェントが回答できるようにしたいケース があるかと思います。
今回は、そのような場合の設定方法について、なるべくシンプルな形で解説します。
サービスエージェントの作成
1. まず、「新しい Agentforce Builder」を開き、新しいエージェントの作成を開始します。

2. 「サービスエージェント」を選択します。

3. エージェントの名前を決めて、作成を開始します。

4. 作業しやすいように、右側のチャット欄は閉じておきます。

5. 必要に応じて、「システム設定」や「言語設定」を変更します。

6. 次に、サブエージェントについては、「アセットライブラリから追加」を選択します。(※トピックは、サブエージェントに名称が変更しました。)

7. ここで、「General Web Search」を追加します。

8. 設定内容に変更が入ると、メニューに点が表示されます。細かく保存しながら進めるのがおすすめです。

参考:Agent Router は、会社の受付スタッフのような役割 を持っています。ユーザーの発言を最初に受け取り、その内容に応じて、適切なエージェント(正しくはサブエージェント)へ案内します。
今回、新しくサブエージェントを追加したことで、遷移先が増えるため、Agent Router の内容も自動的に更新されたいうわけです。
9. Agent Router をクリックした後、「キャンバス」から「スクリプト」へ切り替えます。
※「スクリプト」表示では、設定内容をまとめて確認できるため便利です。

10. 以下が設定内容です。Agent Router が、ユーザーの発言内容に応じて、適切なサブエージェントへ振り分けを行っていることが分かります。

start_agent agent_router:
label: "Agent Router"
description: "Welcome the user and determine the appropriate subagent based on user input"
model_config:
model: "model://sfdc_ai__DefaultEinsteinHyperClassifier"
reasoning:
instructions: ->
| Select the best tool to call based on conversation history and user's intent.
actions:
go_to_ServiceCustomerVerification: @utils.transition to @subagent.ServiceCustomerVerification
available when @variables.isVerified == False
go_to_CaseManagement: @utils.transition to @subagent.CaseManagement
available when @variables.isVerified == True
go_to_AccountManagement: @utils.transition to @subagent.AccountManagement
available when @variables.isVerified == True
go_to_ReservationManagement: @utils.transition to @subagent.ReservationManagement
available when @variables.isVerified == True
go_to_DeliveryIssues: @utils.transition to @subagent.DeliveryIssues
available when @variables.isVerified == True
go_to_OrderInquiries: @utils.transition to @subagent.OrderInquiries
available when @variables.isVerified == True
go_to_GeneralFAQ: @utils.transition to @subagent.GeneralFAQ
go_to_escalation: @utils.transition to @subagent.escalation
go_to_off_topic: @utils.transition to @subagent.off_topic
go_to_ambiguous_question: @utils.transition to @subagent.ambiguous_question
go_to_GeneralWebSearch: @utils.transition to @subagent.GeneralWebSearch今回、「General Web Search」を追加したことで、以下の設定が追加されています。このコードは後に使用します。
go_to_GeneralWebSearch: @utils.transition to @subagent.GeneralWebSearchなお、参考までに、@variables.isVerified == True は「事前の本人確認が必要」という意味です。General FAQ や General Web Search にはこの条件が付いていないため、これらは本人確認なしでも実行できます。
また、モデルセクションで確認できる、サブエージェント分類用の Salesforce 独自モデル「HyperClassifier」は、処理速度と分類精度に優れたモデルです。こちらは 2026 年 4 月頃から導入されています。
今回のように新しく作成したエージェントでは、自動的にこのモデルが適用されますが、以前に作成した古いエージェントでは、従来モデルのままになっている場合があります。そのため、可能であれば HyperClassifier への置き換えをおすすめします。
サブエージェント:General FAQ
1. 続いて、サブエージェント「General FAQ」を、同じくスクリプト表示で開きます。

2. Reasoning ブロック内の「指示」は、以下のように変更しました。
| Your job is solely to help with issues and answer questions about the company, its products, procedures, or policies by searching knowledge articles.
| ALWAYS call AnswerQuestionsWithKnowledge first before considering any other action.
| Never provide generic information, advice, or troubleshooting steps unless retrieved from knowledge articles or web search results.
| If the customer's question is too vague or general, ask for more details and clarification to give a better answer.
| If AnswerQuestionsWithKnowledge returns no relevant results or cannot provide sufficient information, do not immediately ask for escalation.
| Instead, transition to GeneralWebSearch.
| Do not transition to GeneralWebSearch before attempting AnswerQuestionsWithKnowledge.
| Only ask if they want to escalate to a live agent when the question cannot be answered by either knowledge articles or web search.
| Include sources in your response when available from the knowledge articles or web search results, otherwise proceed without them.日本語にすると、以下のような内容です。
| あなたの仕事は、ナレッジ記事を検索して、会社、製品、手順、ポリシーに関する問題や質問への回答を支援することのみです。
| 他の対応を検討する前に、必ず最初に AnswerQuestionsWithKnowledge を呼び出してください。
| ナレッジ記事または Web 検索結果から得られた情報以外は、一般的な情報、アドバイス、トラブルシューティング手順を提供しないでください。
| お客様の質問が曖昧または一般的すぎる場合は、より適切な回答を提供するために、詳細と明確化を求めてください。
| AnswerQuestionsWithKnowledge で関連する結果が得られない場合、または十分な情報が得られない場合は、すぐにエスカレーションを求めないでください。
| 代わりに、GeneralWebSearch に移行してください。
| AnswerQuestionsWithKnowledge を試す前に GeneralWebSearch に移行しないでください。
| ナレッジ記事または Web 検索で質問に回答できない場合にのみ、オペレーターへのエスカレーションを希望するかどうかを尋ねてください。
| ナレッジ記事または Web 検索結果から情報源が入手できる場合は、回答に情報源を含めてください。そうでない場合は、情報源なしで進めてください。これにより、
まず Knowledge
回答できなければ Web Search
最後に Escalation
という流れが、かなり安定しやすくなります。
※ 確実に、この流れになるわけではないので注意してください。
3. 続いて、Reasoning ブロック内の「アクション」も変更します。
初期状態では、以下のようになっているかと思います。
actions:
AnswerQuestionsWithKnowledge: @actions.AnswerQuestionsWithKnowledge
with query = ...
with citationsUrl = ...
with ragFeatureConfigId = ...
with citationsEnabled = ...4. ここに、最後の 1 行を追加します。
actions:
AnswerQuestionsWithKnowledge: @actions.AnswerQuestionsWithKnowledge
with query = ...
with citationsUrl = ...
with ragFeatureConfigId = ...
with citationsEnabled = ...
go_to_GeneralWebSearch: @utils.transition to @subagent.GeneralWebSearchこの遷移指示の追加が、今回のポイントになります。💡
サブエージェント:General Web Search
1. 続いて、「General Web Search」をスクリプト表示で開きます。

2. こちらの「指示」については、基本的にはデフォルトのままで問題ないと思います。必要に応じて調整してください。
少し下へスクロールすると、Reasoning ブロック内の「アクション」が表示されます。

actions:
WebSearch: @actions.WebSearch
with searchQuery=...
with searchProvider= ""
with siteFilter= ""
with excludedDomains= ""searchQuery には、ユーザーが入力した文章から、検索用のキーワードが自動的に抽出されます。
searchProvider に関しては、この記事の執筆中の 2026 年 5 月時点では、検索プロバイダーとして以下の 3 種類が利用可能です。
BrightData
OpenAI ・・・ ChatGPT でお馴染み(バランス型)
You.com ・・・ 最新情報を大量に横断検索したいにおすすめ
(You.com 創業者は、「Einstein」の開発を牽引した人物)
※ 入力は大文字と小文字 どちらも OK。スペースなしで記載して下さい。
※ タイプミスすると検索時にエラーが発生します。
siteFilter には、検索対象とするサイトのドメインを 最大 10 個までカンマ区切りで指定できます。例えば、自社のサイトドメインを入力します。
2026 年 7 月以降は excludedDomains が追加されました。siteFilter 同様、検索を除外したいドメインを 最大 10 個までカンマ区切りで指定できます。例えば、競合のサイトドメインを入力します。
ドメイン名は、http://、https://、www を付けずに、カンマで区切って入力してください。これらの接頭辞が付いたドメイン名も受け付けます。
サブドメインまたは完全な URL を受け入れますが、結果的にベースドメインのみが使用されます。
例えば、以下のように変更します。
actions:
WebSearch: @actions.WebSearch
with searchQuery = ...
with searchProvider = "openai"
with siteFilter = "salesforce.com, yahoo.co.jp"
with excludedDomains = "business.adobe.com"ナレッジ用のデータライブラリの作成
1. 続いて、メニューの「データ」から「データライブラリ」を選択し、表示を「スクリプト」から「キャンバス」に戻します。
まだ、ナレッジ用のデータライブラリが存在しない場合は、下記の通り「Agentforce Data Library」のリンクをクリックします。

2. 遷移したら、新しいデータライブラリを作成します。

3. 名前(例:Knowledge Data Library)を入力して保存します。

4. データタイプは「Knowledge」を選択します。

5. 続いて、「Identifying Field」を 2 つ選択します。
この選択に厳密なルールはありませんが、今回は Title と Summary を選択しています。

6. 次に、「Content Field」を選択します。
こちらも決まりはありませんが、今回は質問と回答に該当する Question と Details を選択しています。
設定を保存すると、自動的に生成処理が開始されます。

7. 15 分ほどで Ready(準備完了)状態になると思いますので、そうなれば利用可能です。

8. Agentforce Builder の画面へ戻り、リフレッシュボタンをクリックすると、作成したデータライブラリが選択できるようになります。

9. 選択して保存します。

10. この時点で、後ほどテストを行うために、最低 1 件はナレッジを用意しておいてください。
以下のような内容で問題ありません。
Title
Custom Preference Center cannot update CRM Email Opt Out fieldSummary
Explains the limitation of the MCA Custom Preference Center regarding the standard CRM Email Opt Out field.Question
Can the MCA Custom Preference Center update the standard CRM Email Opt Out field?Detail (Answer)
The MCA Custom Preference Center is designed to manage consent for Data 360 (Marketing Cloud Next).
If you are referring to the standard CRM Email Opt Out field as “CRM consent,” the value of that field cannot currently be processed or updated by the Custom Preference Center.
If synchronization with CRM consent fields is required, consider implementing a custom solution using a custom form, Flow, or other automation approach.

Prompt Template の調整
1. 続いて、データライブラリに合わせて、プロンプトテンプレート「Answer Questions with Knowledge」も編集しておきます。
こちらは Prompt Builder から開きます。
Prompt Builder を編集するには「プロンプトテンプレートマネージャー」の権限セットが必要です。必要に応じて、対象ユーザーへ付与してください。

2. 今回は、プロンプト本文自体は変更しません。
ただし、デフォルトで設定されている Retriever を削除し、今回作成したデータライブラリ用の Retriever に差し替えます。
まずは名前を付けて保存し、新しいバージョンを作成します。

3. Version 1 が作成されると編集可能になりますので、既存 Retriever を削除し、「リソースの挿入」をクリックします。

4. 「Retriever」を選択します。

5. 続いて、Retriever を構成します。

6. KA_ で始まる Retriever が、データライブラリ由来の Retriever になりますので、そちらを選択してください。

7. 少し下へスクロールすると、「検索パラメーター」のセクションがあります。
「検索テキスト」をクリックすると、入力として利用できる項目が表示されますので、Query を選択します。

8. Input:Query と表示されたことを確認したら、画面へ挿入します。

9. Retriever の挿入が完了したら、設定を保存して有効化します。

ナレッジへのアクセス権
最後に、現在のサービスエージェントユーザーには、ナレッジへのアクセス権がありません。そのため、ナレッジ参照用の権限セットを作成して、ユーザーへ付与します。
Agentforce では、各エージェントに対して、1 人のユーザーが割り当てられます。つまり、Agentforce であっても、内部的には「ユーザー」として動作しているわけです。
そして、このユーザーは、実は最初にエージェントを作成したタイミングで、自動的に作成されています。以下の場面ですね。

そのため、ここで作成されているユーザーへ、権限セットを割り当てる形になります。
1. まずは、権限セットの作成 を開始します。
例:Knowledge Access (Custom)

2. 「オブジェクト設定」を開きます。

3. 「ナレッジ」を選択します。
※ Kav(Knowledge Article Version) の方です。

4. 以下の権限にチェックを入れて保存します。
View All Records(すべてのレコードの参照)
View All Fields(すべての項目の表示)

5. 続いて、権限セットのトップへ戻り、「アプリケーション権限」をクリックします。

6. 「ナレッジの参照を許可(Allow View Knowledge)」へチェックを入れて保存します。

7. さらに、再び権限セットのトップへ戻り、「Data Cloud データスペース管理」をクリックします。

8. 「編集」をクリックします。

9. 利用するデータスペースへチェックを入れて保存します。

これで、以下 3 つの設定が完了している状態になります。
オブジェクト設定
アプリケーション権限
データスペース権限
10. ここまで設定できたら、「割り当ての管理」をクリックします。

11. 「Einstein」という文字列で検索すると、先ほど作成されたユーザーが表示されますので、そのユーザーへ権限セットを割り当てます。

動作確認
1. それでは、すべての設定が完了したので、最後に動作確認を行います。
画面上部の「プレビュー」をクリックします。

2. まずは、先ほど事前作成したナレッジを利用して質問してみます。
質問:Can the MCA Custom Preference Center update the standard CRM Email Opt Out field?

3. すると、ナレッジだけを利用して、回答が返ってきました。

4. 続いて、今度は Web Search の確認を行います。
今回は、皆さんそれぞれの環境で、何らかのサイトのドメインを siteFilter に設定していると思いますので、そのサイト内に存在する内容について質問してみてください。この内容はナレッジには登録していません。
質問:Please tell me about your Salesforce implementation and operational support services.

5. すると、まず最初にナレッジの検索を行い、回答が見つからなかったため、その後、自動的に指定された Web サイトを検索しに行きました。成功です。

いかがでしたでしょうか。
このような、
まずナレッジを確認する
回答できなければ Web Search を行う
最後に必要であれば Escalation を行う
という流れは、実際のサービスエージェントでは非常に重要になります。
従来の Agentforce Builder では、このような制御を細かく調整することが難しい場面もありましたが、新しいスクリプトベースの Agentforce Builder では、かなり柔軟にコントロールできるようになりました。
また、単に Web Search を追加するだけではなく、
「どの順番で判断させるか」
を Reasoning と Actions の組み合わせで制御している点もポイントです。
最初は少し難しく感じるかもしれませんが、実際に動かしてみると理解しやすいと思いますので、ぜひ試してみてください。
今回は以上です。
