Amazon Connect AIエージェントオーケストレーションタイプで、ノーコードでナレッジ検索をタグで絞り込む(コンテンツセグメンテーション)方法
はじめに
Amazon ConnectのAIエージェントでは、Amazon Q in Connectのナレッジベースを検索して回答を生成することができます。
以前、セルフサービスタイプのAIエージェントにて、「特定のタグが付与されたコンテンツだけを検索対象にする(コンテンツセグメンテーション)」方法を以下の記事で紹介しました。
最近、AWSドキュメントの以下のセクションにて、オーケストレーションタイプのAIエージェントでコンテンツセグメンテーションを行う方法が紹介されているのを見つけました。
セルフサービスタイプでは、Lambda関数を使用してセッションにタグフィルターを動的に適用する必要がありましたが、オーケストレーションAIエージェントでは、エージェントの設定画面(ノーコード)だけで完結するようです。
本記事では、オーケストレーションAIエージェントを使って、ノーコードでコンテンツセグメンテーションを実装する方法を紹介します。
前提条件
事前にAWS CLI等を使用して、ナレッジベースのコンテンツにタグ付けを行っておく必要があります。タグ付けの具体的な手順については、冒頭で紹介した過去記事をご参照ください。
本記事の検証環境では、以下のようにタグ付けが行われている状態を前提とします。
東京の住所情報のコンテンツ
- キー:
content_type - 値:
address_tokyo
札幌の住所情報のコンテンツ
- キー:
content_type - 値:
address_sapporo
今回は、AIエージェントが「札幌の住所情報(address_sapporo)」だけを参照して回答するツールを用意します。
AIエージェントの作成とツールの設定
Amazon Connectの管理画面から、オーケストレーションタイプのAIエージェントを作成します。

AIエージェントがナレッジを検索するための「Retrieve(取得)」ツールを編集します。
今回は札幌専用の検索ツールとするため、ツール名を Retrieve から Retrieve_sapporo に変更します。
そして、ここが最も重要なポイントです。「Override Input Values(入力値の上書き)」 セクションに、以下の2つのパラメータを追加してタグフィルターを設定します。
- フィルターのキー(タグ名)
- Property Key:
retrievalConfiguration.filter.equals.key - Value:
content_type
- Property Key:
- フィルターの値
- Property Key:
retrievalConfiguration.filter.equals.value - Value:
address_sapporo
- Property Key:

この設定により、AIエージェントがこのツールを使用する際、自動的に content_type=address_sapporo のタグが付いたナレッジのみが検索されるようになります。
Connectフローの設定
利用する問い合わせフロー(コンタクトフロー)は非常にシンプルです。
「顧客の入力を取得する」ブロックを配置し、作成したAIエージェントを指定するだけです。

動作確認
実際にチャットでテストしてみます。あえて「クラスメソッドの会社の住所を教えてください」と、東京か札幌かを指定せずに質問してみます。
顧客: クラスメソッドの会社の住所を教えてください
AI: クラスメソッドの会社の住所についてお調べいたします。少々お待ちください。
AI: クラスメソッドの本社は札幌オフィスにございます。住所は、郵便番号060-0003、北海道札幌市中央区北3条西1丁目1番1号、札幌ブリックキューブ10階です。JR札幌駅から徒歩8分の場所にございます。他にご質問はございますか?
見事に、東京の住所ではなく札幌の住所情報だけを抽出して回答してくれました!
ログからわかる裏側の動き
なぜこのような挙動になったのか、CloudWatch Logsに出力されたAIエージェントの実行ログ(TRANSCRIPT_AGENTIC_MESSAGE 等)を確認すると、裏側のプロセスがよくわかります。
1. 初期応答の生成
ユーザーからの質問を受け取ったAIは、検索処理で待たせないように、まず繋ぎ言葉(Filler message)を生成しています。ログの parsed_response には以下のように記録されていました。
クラスメソッドの会社の住所についてお調べいたします。少々お待ちください。
2. タグフィルター付きでのツール実行
次に、AIはナレッジを検索するために Retrieve_sapporo ツールを選択します。この時のAPIリクエストのペイロード(Input)を見ると、設定画面で入力したタグフィルター(filter)が正しく組み込まれていることが確認できます。
ToolUseBlock(ToolUseId=tooluse_MleqnQiyxI6AcYWXrixSW1, Name=Retrieve_sapporo, Input="{
\"retrievalQuery\": \"クラスメソッド 会社 住所\",
\"retrievalConfiguration\": {
\"knowledgeSource\": {
\"assistantAssociationIds\": [\"4ca0a4dd-62b6-456a-9f03-923773e8109d\"]
},
\"numberOfResults\": 5,
\"filter\": {
\"equals\": {
\"key\": \"content_type\",
\"value\": \"address_sapporo\"
}
}
},
\"assistantId\": \"d28ddb7e-edee-4655-a8d3-02cf659d80f6\"
}")
3. セグメンテーションされたナレッジの取得と回答生成
このフィルターによって、ナレッジベース全体から「札幌の住所」や「札幌オフィスのアクセスFAQ」のドキュメントだけがヒットし、AIに渡されます。ログには取得結果として以下のようなデータが返ってきていることが記録されています。
{
"status": "success",
"output": "{\"results\":[{\"sourceId\":\".../a1759f6f-0acb-4a0c-bbee-644065ad3a3c\",\"contentText\":\"クラスメソッドの本社 札幌オフィス 〒060-0003 北海道札幌市中央区北3条西1-1-1 札幌ブリックキューブ10階\"},{\"sourceId\":\".../d05b21f2-6353-4f55-8608-3e8ab61b8d1c\",\"contentText\":\"札幌オフィス アクセス・施設情報 FAQ Q1. 札幌オフィスの住所を教えてください A1. 〒060-0003 北海道札幌市中央区北3条西1-1-1 札幌ブリックキューブ10階です。 Q2. 最寄り駅はどこですか? A2. JR札幌駅から徒歩8分です。...\"}]}"
}
AIはこれらの情報を統合し、最終的な回答を生成していました。
クラスメソッドの本社は札幌オフィスにございます。住所は、郵便番号060-0003、北海道札幌市中央区北3条西1丁目1番1号、札幌ブリックキューブ10階です。JR札幌駅から徒歩8分の場所にございます。
他にご質問はございますか?
まとめ
AIエージェントの「Retrieveツール」の入力値を上書き(Override Input Values)することで、Lambda等の外部リソースを使わずに、ノーコードで簡単にナレッジの検索範囲をタグで絞り込むことができました。
この機能を応用すれば、例えば「製品A用の検索ツール」と「製品B用の検索ツール」を別々に作成し、AIに文脈に応じて使い分けさせるといった、より高度で正確なナレッジ検索を実現できそうです。
また、今回はオーケストレーションタイプのAIエージェントをセルフサービス(顧客との直接対話)で試しましたが、この仕組みはオペレーターを支援するエージェントアシスタント(回答の推奨や手動検索)でも利用可能です。担当する窓口やスキルに応じて検索対象のナレッジを出し分けるなど、非常に有用な機能ですので、ぜひお試しください。






