Amazon Connect AIエージェントで質問内容に応じて複数のナレッジベースを使い分ける(選択的クエリ)方法
はじめに
Amazon ConnectのオーケストレーションAIエージェントでは、複数のナレッジベースを統合して回答させることができます。
以前の記事では、プロンプトで「常にすべてのナレッジベースを同時に検索する」ように強制する方法を紹介しました。
しかし、実際の運用では「人事(HR)に関する質問なら人事用ナレッジベースを」「ITに関する質問ならIT用ナレッジベースを」といったように、ユーザーの質問内容に応じてAIに適切なナレッジベースを判断させたいケースも多いはずです。
本記事では、以下のドキュメントをもとにAIエージェントが文脈を理解し、複数のナレッジベースから適切なものを「選択的にクエリ(Querying knowledge bases selectively)」する設定手順を紹介します。
前提条件(テスト用データの準備)
今回は「人事(HR)」と「ITサポート」の2つのナレッジベースを使い分ける検証を行います。
事前に以下の内容をテキストファイルとして保存し、それぞれ別のS3バケットにアップロードして、Amazon ConnectAIエージェントで2つのナレッジベース(統合)を作成しておきます。

1. 人事(HR)用ナレッジベース
- 統合名:
cm-hirai-s3 - 保存ファイル:
hr_faq.txt
【人事部 FAQ】
Q. 有給休暇の申請方法を教えてください。
A. 有給休暇の申請は、社内ポータルサイトの「勤怠管理システム」から行います。取得希望日の3営業日前までに上長の承認を得る必要があります。
Q. 交通費の精算スケジュールを教えてください。
A. 毎月月末までに「経費精算システム」で申請された交通費は、翌月の給与支払い日に合算して振り込まれます。
2. ITサポート用ナレッジベース
- 統合名:
cm-hirai-s3-2 - 保存ファイル:
it_faq.txt
【ITサポート FAQ】
Q. 社外から社内ネットワーク(VPN)に接続する方法を教えてください。
A. 会社貸与のPCにインストールされている「AnyConnect」アプリを起動し、社員IDとパスワードを入力してください。その後、スマートフォンに届くMFA(多要素認証)を承認すると接続されます。
Q. 社内システムのパスワードを忘れました。
A. パスワードリセットポータル(https://password-reset.example.com)にアクセスし、社員IDと登録済みの予備メールアドレスを入力して再設定を行ってください。
【Tips】ナレッジベースIDの特定方法
AIエージェントのツール設定画面では、ナレッジベースを選択するプルダウンに 「アシスタント関連付けID(Assistant Association ID)」という英数字の羅列しか表示されません。
そのため、設定前にAWS CloudShellを開き、以下のコマンドを実行して「ナレッジベース名」と「関連付けID」の紐付けを確認しておきましょう
以下のスクリプトをコピーし、CloudShellに貼り付けて実行してください。(DOMAIN_NAME="cm-hirai" の部分はご自身の環境に合わせて変更してください)
実行コマンド:
DOMAIN_NAME="cm-hirai"
ASSISTANT_ID=$(aws qconnect list-assistants --query "assistantSummaries[?name=='$DOMAIN_NAME'].assistantId" --output text)
(
echo -e "AssociationId\tKnowledgeBaseName"
echo -e "------------------------------------\t-------------------"
aws qconnect list-assistant-associations \
--assistant-id $ASSISTANT_ID \
--query 'assistantAssociationSummaries[?associationType==`KNOWLEDGE_BASE`].[assistantAssociationId, associationData.knowledgeBaseAssociation.knowledgeBaseId]' \
--output text | while read assoc_id kb_id; do
kb_name=$(aws qconnect list-knowledge-bases --query "knowledgeBaseSummaries[?knowledgeBaseId=='$kb_id'].name" --output text)
echo -e "$assoc_id\t$kb_name"
done
) | column -t
出力例:
AssociationId KnowledgeBaseName
------------------------------------ -------------------
2102f376-6538-4e04-a93e-65c948e114bf cm-hirai-s3-2
4ca0a4dd-62b6-456a-9f03-923773e8109d cm-hirai-s3
この結果から以下が分かります。
- 人事用(
cm-hirai-s3)の画面で選ぶべきIDは4ca0a4dd... - IT用(
cm-hirai-s3-2)の画面で選ぶべきIDは2102f376...
これをメモしておき、次の設定に進みます。
AIプロンプトの作成
AIエージェントが「質問内容に応じて適切なツールを1つだけ選ぶ」ように指示するためのプロンプトを作成します。
Amazon Connectの管理画面から、オーケストレーションタイプのデフォルトAIプロンプトである SelfServiceOrchestration をコピーして新規作成します。

プロンプト内で <core_behavior> セクションを見つけ、その直下に以下の CRITICAL(重要) なルールを追記します。ツールの説明部分には、ユーザーが実際に使うであろう日本語のキーワードを含めます。
<core_behavior>
CRITICAL - Retrieve Tool Selection: You have multiple Retrieve tools. Each queries a different knowledge base. You MUST select only ONE tool per question based on the topic.
- Retrieve_HR: 従業員の福利厚生、給与、休暇、会社のポリシーに関する情報が含まれています。
- Retrieve_IT: ソフトウェアのトラブルシューティング、ハードウェアの要求、VPN、ネットワークの問題に関する情報が含まれています。
Evaluate the question, match it to the most relevant tool, and invoke only that tool.

このプロンプトの意図
この指示は、「複数のRetrieveツールがあるが、トピックに基づいて質問ごとに1つのツールだけを選択しなければならない」とAIに強制するものです。
さらに、各ツールにどのような日本語の情報が含まれているかを明記し、ユーザーの質問(日本語)と直接マッチングしやすくしています。
なお、このプロンプト文は独自に考えたものではなく、AWS公式ドキュメントに「複数のナレッジベースをセットアップする際のベストプラクティス」としてそのまま記載されているものです。

その他のプロンプト内容はデフォルトのまま使用します。
モデルはデフォルトの global.anthropic.claude-haiku-4-5-20251001-v1:0 を選択し、プロンプトを保存します。
AIエージェントの作成とツールの設定
次に、オーケストレーションタイプのAIエージェントを作成し、検索ツールを設定します。
デフォルトの SelfServiceOrchestrator をコピーして作成を開始します。

次に、AIが「どのツールをいつ使うべきか」を正確に判断できるように、各ツールの「指示テキスト(Instruction)」と「例(Examples)」を、ユーザーが実際に使う日本語に合わせて書き換えます。
1つ目のツール(人事用)の設定
デフォルトの「Retrieve」ツールを編集し、先ほどメモした 人事(HR)用のナレッジベースID(4ca0a4dd...) を選択して関連付けます。

- 名前:
Retrieve_HR - 指示テキスト(Instruction)
具体的なトピックと、想定される日本語の質問例(Example questions)を含めます。従業員の福利厚生、給与、休暇、会社のポリシーに関する情報を見つけるために人事ナレッジベースを検索します。 想定される質問例: "有給休暇の申請方法は?", "交通費はいつ振り込まれますか?" RETRIEVEツールの結果を使用して、顧客の質問に情報に基づいた回答を提供してください。 - 例(Examples)
デフォルトのテキストを消去し、人事に関する日本語の回答例に変更します。Good example: <message> 有給休暇の申請は、社内ポータルサイトの「勤怠管理システム」から行います。取得希望日の3営業日前までに上長の承認を得る必要があります。 </message> Example for no results: <message> その人事に関する具体的な情報は見つかりませんでした。 </message>
2つ目のツール(IT用)の追加
「ツールの追加(Add Tool)」から「Retrieve」タイプを選択し、 ITサポート用のナレッジベースID(2102f376...) を選択して関連付けます。

- 名前:
Retrieve_IT - 指示テキスト(Instruction)
IT関連のトピックと質問例を含めます。ソフトウェアのトラブルシューティング、ハードウェアの要求、VPN、ネットワークの問題に関する情報を見つけるためにITナレッジベースを検索します。 想定される質問例: "自宅からVPNに繋ぐには?", "社内システムのパスワードを忘れた" RETRIEVEツールの結果を使用して、顧客の質問に情報に基づいた回答を提供してください。 - 例(Examples)
ITに関する日本語の回答例に変更します。Good example: <message> 社外から社内ネットワーク(VPN)に接続するには、会社貸与のPCにインストールされている「AnyConnect」アプリを起動し、社員IDとパスワードを入力してください。 </message> Example for no results: <message> そのITサポートに関する具体的な情報は見つかりませんでした。 </message>
最後に、先ほど作成したAIプロンプトを設定し、ロケールを日本語(ja_JP)にしてAIエージェントを保存します。

Connectフローの設定
利用するコンタクトフローはシンプルです。
「顧客の入力を取得する」ブロックを配置し、作成したAIエージェントを指定するだけです。

動作確認とログの解説
実際にチャットでテストし、AIが正しくツールを選択しているか確認します。
テスト1:人事系の質問
顧客: 「今月の電車代の精算って、いつの給料に入りますか?」
AI: 「毎月月末までに経費精算システムで申請された交通費は、翌月の給与支払い日に合算して振り込まれます。ですので、今月申請された電車代は、来月の給料に含まれて支給されることになります。」
【裏側の動き(ログの確認)】
CloudWatch Logsの TRANSCRIPT_AGENTIC_MESSAGE を確認すると、AIがどのように考えて回答を生成したのか、3つのステップで確認できます。
① ツールの選択とクエリ生成(completion フィールド)
AIは「電車代の精算」という言葉から「これは人事(HR)の話題だ」と文脈を理解し、Retrieve_HR ツールを選択しています。また、検索クエリもAIが自律的に最適なキーワードに変換しています。
{
"toolUseList": [
{
"toolName": "Retrieve_HR",
"toolUseId": "tooluse_f5O06dX6oiQ5pMHZyLUfY9",
"toolInput": "{\"assistantId\": \"d28ddb7e-edee-4655-a8d3-02cf659d80f6\", \"retrievalQuery\": \"交通費精算給料支給タイミング\", \"retrievalConfiguration\": {\"knowledgeSource\":{}}}"
}
]
}
※LLM自身はナレッジベースIDを知らないため、この時点では knowledgeSource は空({})になっています。
② システムによるID補完と検索実行(parsed_response フィールド)
Connectのシステム側で、自動的に Retrieve_HR ツールに紐づくナレッジベースID(4ca0a4dd...)が補完され、実際の検索APIが実行されます。
ToolUseBlock(ToolUseId=tooluse_f5O06dX6oiQ5pMHZyLUfY9, Name=Retrieve_HR, Input="{\"assistantId\":\"d28ddb7e-edee-4655-a8d3-02cf659d80f6\",\"retrievalQuery\":\"交通費精算給料支給タイミング\",\"retrievalConfiguration\":{\"knowledgeSource\":{\"assistantAssociationIds\":[\"4ca0a4dd-62b6-456a-9f03-923773e8109d\"]}}}")
③ 検索結果の取得(ツール実行結果の parsed_response フィールド)
検索の結果、人事用ナレッジベースから該当するFAQのテキストデータが取得され、AIに渡されます。
{
"status": "success",
"output": "{\"results\":[{\"sourceId\":\"...\",\"contentText\":\"【人事部 FAQ】 ... Q. 交通費の精算スケジュールを教えてください。 A. 毎月月末までに「経費精算システム」で申請された交通費は、翌月の給与支払い日に合算して振り込まれます。\"}]}"
}
AIは、この取得した contentText の内容を読み取り、ユーザーの質問に対する最終的な回答を生成しています。
テスト2:IT系の質問
続けて、同じセッション内でITに関する質問を投げてみます。
顧客: 「ログイン用の暗証番号がわからなくなりました。どうすればいいですか?」
AI: 「社内システムのパスワードを忘れた場合は、パスワードリセットポータルでリセットしていただけます。https://password-reset.example.com にアクセスして、社員IDと登録済みの予備メールアドレスを入力すれば、新しいパスワードを再設定できます。
もし予備メールアドレスを登録していない場合や、リセットポータルにアクセスできない場合は、ITサポートまでお問い合わせください。何かご不明な点はございますか?」
【裏側の動き(ログの確認)】
同様にログを確認すると、今度はAIが「ログイン」「暗証番号」という言葉からITサポートの文脈であると推論し、Retrieve_IT ツールを選択しています。
① ツールの選択とクエリ生成
{
"toolUseList": [
{
"toolName": "Retrieve_IT",
"toolUseId": "tooluse_NznlNhQ54ipHGGZEMnUiUa",
"toolInput": "{\"assistantId\": \"d28ddb7e-edee-4655-a8d3-02cf659d80f6\", \"retrievalConfiguration\": {\"knowledgeSource\":{}}, \"retrievalQuery\": \"ログインパスワード暗証番号忘れた リセット\"}"
}
]
}
② システムによるID補完と検索実行
ToolUseBlock(ToolUseId=tooluse_NznlNhQ54ipHGGZEMnUiUa, Name=Retrieve_IT, Input="{\"assistantId\":\"d28ddb7e-edee-4655-a8d3-02cf659d80f6\",\"retrievalConfiguration\":{\"knowledgeSource\":{\"assistantAssociationIds\":[\"2102f376-6538-4e04-a93e-65c948e114bf\"]}},\"retrievalQuery\":\"ログインパスワード暗証番号忘れた リセット\"}")
③ 検索結果の取得
IT用ナレッジベースから、パスワードリセットに関するFAQが取得されています。
{
"status": "success",
"output": "{\"results\":[{\"sourceId\":\"...\",\"contentText\":\"【ITサポート FAQ】 ... Q. 社内システムのパスワードを忘れました。 A. パスワードリセットポータル(https://password-reset.example.com)にアクセスし、社員IDと登録済みの予備メールアドレスを入力して再設定を行ってください。\"}]}"
}
このように、プロンプトの例と一言一句同じでなくても、AIが質問の意図を汲み取り、適切なナレッジベース(ツール)を自律的に選択して回答を生成できていることが確認できました!
まとめ
AIエージェントに複数のナレッジベースを選択的にクエリさせるためには、以下の設定が重要です。
- AIプロンプトの
<core_behavior>に、質問のトピックに基づいて1つのツールだけを選択するよう指示を追記する - 各Retrieveツールの「指示テキスト(Instruction)」と「例(Examples)」に、そのナレッジベースがどのような情報を含んでいるかをユーザーの言語(日本語)で具体的に記述し、ツール間の役割の重複を避ける
これにより、LLM(Claude)の推論能力を活かして、ユーザーの意図に最も適したナレッジベースだけをピンポイントで検索させることができます。無駄な検索を減らすことで、回答精度の向上や処理速度の改善が期待できるため、用途の異なるナレッジベースを複数統合する際には非常におすすめの設定です。






