Amazon Q in Connect ナレッジベースにおいて、構成や仕様など気になる内容を調べてみた
はじめに
本記事では、Amazon Q in Connect のナレッジベースについて、個人的に気になった構成や仕様、設定可能なパラメータなどを検証した内容をご紹介します。
ナレッジベースの仕組みや設定項目、回答精度を高めるための工夫、デフォルト設定の確認方法など、公式ドキュメントの調査や実際の使用経験から得られた知見をポイントごとに解説します。
Q in Connect ナレッジベース構成の概要
Amazon Q in Connectは、Amazon Bedrock上に構築されたサービスです。
これにより、Bedrockに実装されている安全性やセキュリティの制御機能を活用できます。
Amazon Bedrock を利用: 自動不正検出 AWS を実装します。Amazon Q in Connect は Amazon Bedrock を基盤に構築されているため、ユーザーは Amazon Bedrock に実装されている制御を最大限に活用して、安全性、セキュリティを強制し、人工知能 (AI) の責任ある使用ができます。
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/amazon-q-connect.html
ナレッジベースの仕組みは、RAG(Retrieval-Augmented Generation)構成に基づいています。
この仕組みでは、まずコンテンツを「チャンク」と呼ばれる単位に分割し、それらをベクトル埋め込みに変換してベクトルストアに保存します。クエリ実行時には、関連性の高いチャンクを検索・取得し、それらの情報を基に回答を生成します。
これはAmazon Bedrockのナレッジベースと基本的に同様のアーキテクチャとなっています。
Bedrock ナレッジベースと比較して、Q in Connectのナレッジベースでは、使用されるエンベディングモデル・ベクトルストアの詳細はAWS側で管理されており、技術的な中身は公開されていません。
また、料金体系も大きく異なります。
Bedrockナレッジベースでは、Bedrockのモデルの入力/出力トークン数による料金やベクトルストアのランニングコストが別途発生しますが、Q in Connectでは専用の料金体系として一括で課金されます。
Q in Connectの詳細な料金体系については、以下のブログで解説されていますのでご参照ください。
ナレッジベースの回答精度を上げる手法
Q in Connect のナレッジベースは RAG 構成を採用しているため、RAG の精度向上手法が参考になります。
ナレッジベースの回答精度に最も影響を与える要素の一つが「チャンキング戦略」です。
適切なチャンクサイズや分割方法を選ぶことで、検索精度が向上し、結果として回答の質も高まります。
RAGの精度向上については、以下のAWS公式ブログが参考になります。
このブログでは、チャンクサイズの調整、ドキュメントパースの改善、メタデータによるフィルタリング、ハイブリッド検索などの基本的な改善テクニックから、リランキング、クエリ書き換え、階層チャンキングなどの高度な手法まで、様々なRAG改善アプローチが紹介されています。
また、Amazon Q in Connect向けのナレッジベースのコンテンツの最適化手法については、以下のブログで詳しく解説されています。
このブログでは、コンテンツの構造化、シンプルな言葉遣い、ビジュアル要素への補足説明の追加、専門用語の定義、具体例の活用など、ナレッジベースのコンテンツを最適化するための実践的なアドバイスが記載されています。
データソースで利用可能なファイルサイズ
Amazon Q in Connectナレッジベースでは、1ファイルあたり最大1MBまでのドキュメントが取り込み可能です。
Amazon Q in Connect supports the ingestion of HTML, Word, PDF, and text files up to 1 MB. Note the following:
https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html
これはAmazon Bedrockナレッジベースの最大50MBという制限と比較すると、かなり小さい制約であることがわかります。
大容量のドキュメントを扱う必要がある場合は、コンテンツを複数の小さなファイルに論理的に分割することで、この制限を回避することが可能です。分割する際は、各ファイルが独立して意味を持ちつつも、関連性が維持されるよう注意して分割することをお勧めします。
利用可能なモデル
現在、Amazon Q in Connectのナレッジベースで利用できるモデルは、Anthropicの「claude-3-haiku-20240307-v1」のみです。他のモデルは選択できません。
API リファレンスでも、ドキュメント解析に使用できる基盤モデルとして Claude 3 Haiku のみが指定されています。
設定可能な推論パラメーター
Amazon Q in Connectのナレッジベースでは、temperatureやtop-pなどの推論パラメーターについて、デフォルト値の確認や設定変更を行うことができません。これはAmazon Bedrock ナレッジベースを利用する場合と異なる点です。
Amazon Q in Connectでは、これらのパラメーターはAWS側で最適化された値に固定されており、ユーザーによるカスタマイズはできないようになっています。
一方、Amazon Bedrockの場合は、これらのパラメーターを細かく調整することが可能です。
ナレッジベースのデフォルト設定の確認
Amazon Q in Connectでデフォルトのナレッジベースを使用する場合、チャンキング戦略などの内部設定値を確認することはできません。AWS側で最適化された設定が適用されていますが、その詳細は公開されていません。
一方、自分で作成したカスタムナレッジベースについては、作成時に指定した設定値を確認することが可能です。これにより、自作ナレッジベースの動作をより詳細に把握し、必要に応じて新しいナレッジベースで設定を調整ができます。
デフォルト設定の詳細が非公開であることは、カスタムナレッジベースを作成する際の参考値がないという課題がありますが、一度作成したカスタムナレッジベースの設定を基に、徐々に最適な設定を見つけていくアプローチが有効でしょう。
ナレッジベースの設定変更
Amazon Q in Connectのナレッジベース設定は、作成時に一度だけ設定できるものと、AIエージェント作成・更新時に変更可能なものに分かれています。
それぞれの設定について詳しく説明します。
1. ナレッジベース作成時にのみ設定可能な項目
チャンキング戦略などの精度に影響する以下の設定(vector-ingestion-configuration)は、ナレッジベース作成時にのみ設定可能です。
一度作成したナレッジベースのこれらの設定を変更することはできません。
vector-ingestion-configurationは、ドキュメントの取り込み方法に関する詳細設定で、以下の項目を設定できます。
- chunkingConfiguration
- parsingConfiguration
チャンキング設定(chunkingConfiguration)
ナレッジベース作成時に設定できるチャンキング関連の設定項目です。以下の2つを設定できます。
- chunkingStrategy
- fixedSizeChunkingConfiguration
chunkingStrategy
ドキュメントをどのようにチャンクに分割するかを定義する設定です。
- chunkingStrategy: 以下の4種類のチャンキング戦略から選択できます
- HIERARCHICAL: 階層的に分割(2層構造)
- FIXED_SIZE: 固定サイズでドキュメントを分割
- SEMANTIC: 意味的なまとまりに基づいて分割
- NONE: 分割なし(各ファイルを1つのチャンクとして扱う)
hierarchicalChunkingConfiguration
階層的チャンキング設定です。
階層的チャンキングとは、ドキュメントを親(大きな)チャンクと子(小さな)チャンクの2階層に分割する手法です。
検索時には精度の高い子チャンクが最初に取得され、必要に応じて文脈を広げるために親チャンクに置き換えられます。これにより検索精度と文脈理解のバランスを実現します。
- levelConfigurations: 各階層のトークン設定(親と子の2階層を表す固定サイズ2項目の配列)
- maxTokens: 各階層でチャンクに含める最大トークン数(有効範囲: 1〜8192)
- overlapTokens: 同じ階層内の連続するチャンク間で重複するトークン数(最小値: 1)
設定例(クリックで展開)
aws qconnect create-knowledge-base \
--name <新規ナレッジベースの名前> \
--knowledge-base-type EXTERNAL \
--server-side-encryption-configuration '{
"kmsKeyId": "省略"
}' \
--source-configuration '{
"appIntegrations": {
"appIntegrationArn": "省略"
}
}' \
--vector-ingestion-configuration '{
"chunkingConfiguration": {
"chunkingStrategy": "HIERARCHICAL",
"hierarchicalChunkingConfiguration": {
"levelConfigurations": [
{
"maxTokens": <親チャンク(第1層)の最大トークン数>
},
{
"maxTokens": <子チャンク(第2層)の最大トークン数>
}
],
"overlapTokens": <連続するチャンク間の重複トークン数>
}
},
"parsingConfiguration": {
"parsingStrategy": "BEDROCK_FOUNDATION_MODEL",
"bedrockFoundationModelConfiguration": {
"modelArn": "arn:aws:bedrock:<リージョン>::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
"parsingPrompt": {
"parsingPromptText": "<ドキュメント解析用のプロンプト>"
}
}
}
}'
fixedSizeChunkingConfiguration
固定サイズのチャンキング設定です。
- maxTokens: チャンク内に含める最大トークン数(最小値: 1)
- overlapPercentage: 隣接するチャンク間の重複率(有効範囲: 1〜99%)
semanticChunkingConfiguration
セマンティックチャンキング設定です。
テキストの意味内容に基づいて自然な区切りでドキュメントを分割します。単純な文字数や段落ではなく、内容の関連性を考慮した分割が可能になります。
- breakpointPercentileThreshold: チャンク分割の非類似性閾値(有効範囲: 50〜99)
- bufferSize: 文脈理解のためのバッファサイズ(有効範囲: 0〜1)
- maxTokens: チャンクの最大トークン数(最小値: 1)
NONE
chunkingStrategyがNONEの場合は設定不要です。
設定例(クリックで展開)
aws qconnect create-knowledge-base \
--name <新規ナレッジベースの名前> \
--knowledge-base-type EXTERNAL \
--server-side-encryption-configuration '{
"kmsKeyId": "省略"
}' \
--source-configuration '{
"appIntegrations": {
"appIntegrationArn": "省略"
}
}' \
--vector-ingestion-configuration '{
"chunkingConfiguration": {
"chunkingStrategy": "NONE"
},
"parsingConfiguration": {
"parsingStrategy": "BEDROCK_FOUNDATION_MODEL",
"bedrockFoundationModelConfiguration": {
"modelArn": "arn:aws:bedrock:<リージョン>::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
"parsingPrompt": {
"parsingPromptText": "<ドキュメント解析用のプロンプト>"
}
}
}
}'
解析設定(parsingConfiguration)
parsingConfiguration
ドキュメントの内容を解析するための設定です。デフォルトでは、各ドキュメントの内容をテキストに変換してからチャンクに分割します。
テーブルや画像を含むPDFファイルの処理を改善するために、テキストのページを画像として扱い、モデルを使用して各ページの内容を解釈することができます。
- parsingStrategy: 解析戦略(現在は "BEDROCK_FOUNDATION_MODEL" のみ対応)
- bedrockFoundationModelConfiguration: ドキュメント解析に使用する基盤モデルの設定
- modelArn: 基盤モデルのARN
パターン: arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/anthropic.claude-3-haiku-20240307-v1:0 - parsingPrompt: ドキュメント解釈のためのプロンプト設定
- parsingPromptText: 解釈用プロンプトテキスト(長さ: 1〜10000文字)
- modelArn: 基盤モデルのARN
デフォルトナレッジベースの注意点
Amazon Q in Connectでは、デフォルトのナレッジベースの上記設定値を確認することはできません。
特に、parsingPromptTextは、どのような設定にすべきかデフォルトプロンプトが確認できないため、独自のナレッジベースを作成する際には手探りの状態から始めざるを得ません。適切な設定値の予想すら立てられない状況では、実質的に効果的なナレッジベースの作成が困難です。
PDFファイルの表やレイアウトを適切に解釈するためのプロンプト設計は重要ですが、参考となるベースラインがない中で最適な設定を見つけるのは、非常に非効率で時間のかかるプロセスとなります。AWS側でデフォルト設定の公開や、推奨プロンプトの提供があれば、より効果的なカスタマイズが可能になるでしょう。
2. AIエージェント作成・更新時に設定可能な項目
ナレッジベース自体の作成後でも、AIエージェントの作成または更新時に以下の4つのパラメータをカスタマイズできます。
- associationIdによる使用するナレッジベースの指定
- contentTagFilterによる検索フィルターの設定
- maxResultsによる検索結果数の制御
- overrideKnowledgeBaseSearchTypeによる検索タイプの選択
1. associationId - ナレッジベースの指定
AIエージェントが使用するナレッジベースを指定します。
"associationId": "your-knowledge-base-id",
"associationType": "KNOWLEDGE_BASE"
2. contentTagFilter - コンテンツフィルタリング
タグベースのフィルタリングにより、検索対象を絞り込みます。
コンテンツフィルタリングは、ナレッジベース内のドキュメントに付与されたタグ(メタデータ)に基づいて検索範囲を制限するため、特定の部門や製品カテゴリなど、ユースケースに応じた情報のみを返すことができます。
これにより、不要な情報を除外し、より関連性の高い回答を生成することが可能になります。
"contentTagFilter": {
"tagCondition": {
"key": "department",
"value": "billing"
}
}
複合条件も設定可能です
"contentTagFilter": {
"andConditions": [
{
"key": "department",
"value": "billing"
},
{
"key": "priority",
"value": "high"
}
]
}
3. maxResults - 検索結果数の制御
ナレッジベースから返される検索結果の最大数を指定します。
この値を調整することで、AIエージェントが参照するコンテキスト情報量を制御できます。
値を小さくすると処理速度が向上しますが、必要な情報が欠落するリスクがあり、大きくすると情報量は増えますが、ノイズも増加する可能性があります。
"maxResults": 5
4. overrideKnowledgeBaseSearchType - 検索タイプの選択
検索方法を選択します。この設定により、ナレッジベースの検索精度と関連性を調整できます。
SEMANTIC
: 意味的類似性に基づく検索(ベクトル検索)。質問の意図を理解し、同義語や関連概念も含めた検索が可能です。HYBRID
: キーワード検索とベクトル検索を組み合わせた検索。特定のキーワードや固有名詞を含む検索と意味的な検索を組み合わせることで、より幅広い関連情報を取得できます。
Specifying an overrideKnowledgeBaseSearchType that can be used to control the type of search performed against the knowledge base. The options are SEMANTIC which uses vector embeddings or HYBRID which uses vector embeddings and raw text.
https://docs.aws.amazon.com/connect/latest/adminguide/create-ai-agents.html#cli-ai-agents
"overrideKnowledgeBaseSearchType": "HYBRID"
ハイブリッド検索については以下のブログを参考ください。
AIエージェント作成時の設定例
以下は、AIエージェントを作成する際のAWS CLIコマンド例です。この例では、ナレッジベース関連の設定を含めた手動検索AIエージェントを作成しています。
aws qconnect create-ai-agent \
--assistant-id <YOUR_Q_IN_CONNECT_ASSISTANT_ID> \
--name example_manual_search_ai_agent \
--visibility-status PUBLISHED \
--type MANUAL_SEARCH \
--configuration '{
"manualSearchAIAgentConfiguration": {
"answerGenerationAIPromptId": "<ANSWER_GENERATION_AI_PROMPT_ID_WITH_VERSION_QUALIFIER>",
"associationConfigurations": [
{
"associationType": "KNOWLEDGE_BASE",
"associationId": "<ASSOCIATION_ID>",
"associationConfigurationData": {
"knowledgeBaseAssociationConfigurationData": {
"overrideKnowledgeBaseSearchType": "SEMANTIC",
"maxResults": 5,
"contentTagFilter": {
"tagCondition": { "key": "<KEY>", "value": "<VALUE>" }
}
}
}
}
]
}
}'
ナレッジベースの作成方法
デフォルトのナレッジベースからカスタマイズしたナレッジベースへの変更手順を以下に示します。
1. 統合情報の確認
まず、データソースとなるS3バケットの統合情報を確認します。
aws appintegrations list-data-integrations
{
"DataIntegrations": [
{
"Arn": "arn:aws:app-integrations:ap-northeast-1:111111111111:data-integration/a44bb811-a678-4f1b-9847-65bcf2ca2c79",
"Name": "tests",
"SourceURI": "s3://xxxxxxxx"
},
...
]
}
Arn
はコピーしておきます。
2. 新規ナレッジベースの作成
次に、ナレッジベースを作成します。ここでチャンキング戦略や解析設定などを指定できます。
aws qconnect create-knowledge-base \
--name <新規ナレッジベースの名前> \
--knowledge-base-type EXTERNAL \
--server-side-encryption-configuration '{
"kmsKeyId": "<自身で作成したkmsKeyId>"
}' \
--source-configuration '{
"appIntegrations": {
"appIntegrationArn": "<手順1で確認したappIntegrationArn>"
}
}' \
--vector-ingestion-configuration '{
"chunkingConfiguration": {
"chunkingStrategy": "<FIXED_SIZE|NONE|HIERARCHICAL|SEMANTIC>",
"fixedSizeChunkingConfiguration": {
"maxTokens": <チャンクの最大トークン数>,
"overlapPercentage": <チャンク間の重複率(1-99)>
}
},
"parsingConfiguration": {
"parsingStrategy": "BEDROCK_FOUNDATION_MODEL",
"bedrockFoundationModelConfiguration": {
"modelArn": "arn:aws:bedrock:<リージョン>::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
"parsingPrompt": {
"parsingPromptText": "<ドキュメント解析用のプロンプト>"
}
}
}
}'
3. 対象のアシスタントIDとナレッジベースの関連付けIDの確認
以下を確認します
- assistantId
- Amazon Q in Connect のアシスタントID
- assistantAssociationId
- 現在のアシスタントと関連づけされたデフォルトナレッジベースID
assistantIdの確認
Amazon Q in Connect のアシスタントIDを確認します。これは、どのアシスタントの設定を変更するかを特定するために必要です。
aws qconnect list-assistants
{
"assistantSummaries": [
{
"assistantId": "xxxxxxxxx",
...
}
]
}
assistantAssociationIdの確認
次に、現在のアシスタントとナレッジベースの関連付けID(assistantAssociationId)を確認します。
これは、削除対象(デフォルトのナレッジベース)となる現在の関連付けを特定するために必要です。
aws qconnect list-assistant-associations --assistant-id <assistantId>
{
"assistantAssociationSummaries": [
{
"assistantAssociationId": "14132f1e-c0a4-491b-98f2-1cfaf8d7e822",
...
}
]
}
4. デフォルトのナレッジベースの関連付けを削除
確認したassistantIdとassistantAssociationIdを使用して、デフォルトのナレッジベースとの関連付けを削除します。
aws qconnect delete-assistant-association \
--assistant-id <assistantId> \
--assistant-association-id <assistantAssociationId>
5. アシスタントとナレッジベースの関連付け
最後に、アシスタントと新しく作成したカスタムナレッジベースとの間に新しい関連付けを作成します。
これにより、アシスタントは新しいナレッジベースを使用して質問に回答するようになります。
aws qconnect create-assistant-association \
--assistant-id <assistantId> \
--association-type KNOWLEDGE_BASE \
--association knowledgeBaseId
まとめ
Amazon Q in Connectのナレッジベースは、Amazon Bedrock上に構築されたRAGベースのシステムであり、回答生成機能を提供します。
本記事では、その構成や設定可能なパラメータ、回答精度を高めるための工夫について解説しました。
主なポイントとして、チャンキング戦略(固定サイズ、階層的、セマンティック)の選択、解析設定のカスタマイズなどが回答精度に大きく影響することがわかりました。
また、1ファイルあたり1MBという容量制限や、利用可能なモデルがClaude 3 Haikuに限定されていることなど、実用上の制約も確認しました。
一方で、デフォルト設定の詳細が公開されていないため、カスタムナレッジベースを作成する際の参考値がなく、特にparsingPromptTextなどの最適化が難しい状況です。
より効果的なナレッジベース構築のためには、AWSへのフィードバックを通じてデフォルト設定の公開を求めていくことも重要でしょう。
本記事で解説した設定方法や変更手順を活用し、お客様固有のユースケースに合わせた最適なナレッジベース構成を検証を進めていただければ幸いです。