-
Notifications
You must be signed in to change notification settings - Fork 9
chapter3_rag_functionality
RAG(Retrieval-Augmented Generation)チャット機能は、Amazon KendraまたはKnowledge Bases for Amazon Bedrockと連携し、事前に登録された社内データや専門文書に基づいて回答を生成する機能です。
RAG(Retrieval-Augmented Generation)は、「情報の検索」と「大規模言語モデルの文章生成」を組み合わせる手法です。
通常のチャット:
- LLMの学習時に獲得した知識のみを使用
- 最新情報や社内固有の情報には対応できない
- ハルシネーション(誤情報)のリスクが高い
RAGチャット:
- 検索システムから取得した参考ドキュメントに基づいて回答生成
- 社内情報や最新情報に対応可能
- ハルシネーションを抑制し、より正確で信頼性の高い情報提供が可能
-
正確性の向上
- 実際のドキュメントに基づいた回答
- 事実確認が可能
-
最新情報への対応
- LLMの学習時期に依存しない
- データを更新すれば最新情報に対応
-
社内知識の活用
- 社内規定、マニュアル、手順書などを活用
- ドメイン固有の専門知識に対応
-
透明性の確保
- 参考にしたドキュメントを明示
- 回答の根拠を追跡可能
-
学習不要
- モデルをFine-tuningする必要がない
- データを追加するだけで機能拡張
RAGチャット機能は以下の3つのステップで動作します。
処理内容:
- ユーザーが入力した質問を分析
- 検索に適した形式のクエリ(検索キーワード)を生成
- 必要に応じて複数のクエリを生成
例:
ユーザーの質問:
「社内WiFiにスマートフォンを接続する方法を教えてください」
生成されるクエリ:
- "社内WiFi スマートフォン 接続方法"
- "WiFi設定 モバイル デバイス"
- "無線LAN スマホ 接続手順"
処理内容:
- 生成されたクエリを使用してデータソースを検索
- Amazon KendraまたはKnowledge Basesが関連ドキュメントを取得
- 関連度の高い上位の結果を選択
検索対象:
- 事前に登録されたドキュメント(PDF、Word、テキストファイル等)
- データベースやWebページ(設定による)
- 社内システムのコンテンツ(統合設定による)
検索の特徴:
- セマンティック検索:意味的に関連する情報を取得
- キーワード検索:完全一致や部分一致の検索
- メタデータフィルタリング:属性による絞り込み
処理内容:
- 検索結果の情報を「コンテキスト」としてLLMに提供
- ユーザーの質問と検索結果を組み合わせてプロンプトを構成
- LLMが検索結果に基づいて回答を生成
プロンプトの構造例:
以下の参考情報に基づいて、ユーザーの質問に答えてください。
参考情報に記載がない内容については、「情報が見つかりませんでした」と回答してください。
<参考情報>
[検索で取得したドキュメントの内容]
</参考情報>
<質問>
社内WiFiにスマートフォンを接続する方法を教えてください
</質問>
Genuでは、RAGチャット機能を有効化するための2つの方法を提供しています。
Amazon Kendraは、フルマネージド型のエンタープライズ検索サービスです。
特徴:
-
豊富なデータソース対応:
- AWS S3
- SharePoint
- Salesforce
- ServiceNow
- データベース(RDS等)
- OneDrive
- その他多数のコネクタ
-
高度な検索機能:
- 自然言語検索
- ファセット検索
- 同義語辞書
- カスタムランキング
-
エンタープライズ対応:
- アクセス制御リスト(ACL)
- ユーザーコンテキスト
- インクリメンタルクロール
推奨する場合:
- 検索基盤の設定をAWSに任せたい
- チャット形式だけでなく、検索システムとしても使いたい
- 多様なデータソースを統合したい
- すでにAmazon Kendraを導入している
-
cdk.jsonの編集
cd ~/generative-ai-use-cases
-
packages/cdk/cdk.jsonファイルを開く -
20行目の
ragEnabledを変更:変更前: "ragEnabled": false 変更後: "ragEnabled": true
-
ファイルを保存(Command+S / Ctrl+S)
-
デプロイ
npm -w packages/cdk run -- cdk deploy --require-approval never --all
-
AWSコンソールでKendraを開く
- 「Amazon Kendra」サービスを検索
- 作成されたインデックスを選択
-
データソースの作成
- 「データソースの追加」をクリック
- S3コネクタを選択(または他のコネクタ)
- データソース名を入力
- S3バケットとフォルダを指定
-
同期の実行
- 「今すぐ同期」をクリック
- 初回同期には時間がかかる場合があります
-
検索のテスト
- Kendraコンソールで検索をテスト
- 適切な結果が返されることを確認
Knowledge Bases for Amazon Bedrockは、Amazon Bedrockのフルマネージド型RAG機能です。
特徴:
-
簡単なセットアップ:
- ベクトルデータベースへのデータ取り込みを自動管理
- インフラ管理が不要
-
最適化されたRAG:
- Bedrockモデルとの統合
- 自動的なチャンキング
- エンベディングの生成
-
コスト最適化:
- OpenSearch Serverlessの冗長化を無効化可能
- 利用量が少ない場合のコスト削減
GenUでの実装:
- ベクトルデータベース:OpenSearch Serverless
- 日本語最適化:日本語検索に最適化された設定
- 柔軟なカスタマイズ:検索パラメータの調整が可能
推奨する場合:
- 検索基盤を柔軟にカスタマイズしたい
- コストを最適化したい
- Amazon S3を中心にデータを蓄積している
- RAGに特化した機能が必要
-
cdk.jsonの編集
cd ~/generative-ai-use-cases
-
packages/cdk/cdk.jsonファイルを開く -
26行目の
ragKnowledgeBaseEnabledを変更:変更前: "ragKnowledgeBaseEnabled": false 変更後: "ragKnowledgeBaseEnabled": true
-
ファイルを保存(Command+S / Ctrl+S)
-
デプロイ
npm -w packages/cdk run -- cdk deploy --require-approval never --all
-
S3バケットの確認
- デプロイ時に自動作成されたS3バケットを確認
- バケット名は CloudFormationのOutputsに表示されます
-
ドキュメントのアップロード
# AWS CLIを使用してアップロード aws s3 cp document.pdf s3://[バケット名]/documents/または、AWSコンソールからマニュアルでアップロード
-
サポートされるファイル形式:
- Microsoft Word (.doc, .docx)
- Microsoft PowerPoint (.ppt, .pptx)
- Microsoft Excel (.xls, .xlsx)
- テキストファイル (.txt)
- HTML
- Markdown (.md)
- CSV
-
同期(インジェスト)の実行
方法1:AWSコンソールから
- Amazon Bedrockコンソールを開く
- 「Knowledge bases」を選択
- 作成されたKnowledge baseを選択
- 「データソース」タブから同期を実行
方法2:AWS CLIから
aws bedrock-agent start-ingestion-job \ --knowledge-base-id [KNOWLEDGE_BASE_ID] \ --data-source-id [DATA_SOURCE_ID]
-
同期の確認
- 同期ステータスを確認
- エラーがある場合はログを確認
| 観点 | Amazon Kendra | Knowledge Bases for Amazon Bedrock |
|---|---|---|
| セットアップの容易さ | やや複雑 | 簡単 |
| データソース | 多様(50+のコネクタ) | 主にS3 |
| 検索機能 | 高度(ファセット、同義語等) | RAGに最適化 |
| カスタマイズ性 | 高い | 中程度 |
| コスト(小規模) | 高め | 低め |
| コスト(大規模) | 中程度 | 中程度 |
| 検索以外の用途 | 可能 | RAG専用 |
| 日本語対応 | 良好 | GenUで最適化済み |
| メンテナンス | やや必要 | 少ない |
-
RAGチャット画面を開く
- サイドバーから「RAGチャット」を選択
-
質問を入力
- テキストボックスに質問を入力
- 通常のチャットと同じように自然言語で質問
-
回答の確認
- AIが検索結果に基づいて回答を生成
- 回答の下に参考ドキュメントが表示されます
RAGチャットの回答には、以下の情報が表示されます:
表示される情報:
- ドキュメント名:参照したファイル名
- 関連度スコア:質問との関連性(0-1の値)
- 抜粋テキスト:関連する部分のテキスト
- ソースリンク:元ドキュメントへのアクセスリンク
ソースアクセスの仕組み:
- Amazon S3の署名付きURLを使用
- 一時的なアクセス権限(通常15分間有効)
- セキュアなファイルアクセス
活用方法:
1. 回答を確認
2. 参考ドキュメントのリンクをクリック
3. 元のドキュメント全体を確認
4. 情報の正確性を検証
5. 必要に応じて追加の質問を入力
悪い例:
WiFiについて教えて
→ 範囲が広すぎて適切な検索ができない
良い例:
社内WiFiにiPhoneを接続する具体的な手順を教えてください。
→ 明確な質問で適切なドキュメントが検索される
例:
新入社員向けのオンボーディング手順で、初日に実施すべきIT関連の手続きを教えてください。
最初の回答で不十分な場合は、別の角度から質問:
質問1: 社内WiFiの設定方法を教えてください。
[回答を確認]
質問2: WiFi接続ができない場合のトラブルシューティング方法は?
[回答を確認]
質問3: ゲストWiFiと社員用WiFiの違いは何ですか?
シナリオ:新入社員が社内システムの使い方を学ぶ
質問例:
社内WiFiに接続する方法を教えてください。
期待される回答:
社内WiFiへの接続方法は以下の通りです:
1. デバイスのWiFi設定を開く
2. ネットワーク一覧から「CompanyWiFi-Secure」を選択
3. 認証方式:WPA2-Enterprise
4. ユーザー名:社員番号@company.com
5. パスワード:社内ポータルと同じパスワード
6. 接続をクリック
参考ドキュメント:
- IT基盤利用ガイド.pdf (関連度: 0.95)
- 新入社員向けマニュアル.pdf (関連度: 0.87)
シナリオ:カスタマーサポート担当者が製品の技術情報を検索
質問例:
製品XYZ-100のエラーコードE-503が表示された場合の対処方法を教えてください。
期待される回答:
エラーコードE-503は「通信タイムアウト」を示しています。
対処方法:
1. ネットワーク接続を確認してください
2. ファイアウォール設定を確認し、ポート8443が開いていることを確認
3. デバイスを再起動してください
4. 問題が解決しない場合は、サポートセンター(0120-xxx-xxx)にご連絡ください
参考ドキュメント:
- 製品XYZ-100トラブルシューティングガイド.pdf
- エラーコード一覧表.xlsx
シナリオ:経理担当者が経費精算のルールを確認
質問例:
出張時の宿泊費の上限額と、領収書の提出要件を教えてください。
期待される回答:
出張時の宿泊費については以下の規定があります:
【上限額】
- 国内出張:1泊あたり15,000円
- 海外出張:都市により異なる(出張規定別表参照)
【領収書の提出要件】
1. 宿泊施設が発行した正式な領収書が必要
2. 宿泊者名、日付、金額、宿泊施設名が明記されていること
3. クレジットカードの利用明細書のみでは不可
4. 電子領収書も原本として認められる
参考ドキュメント:
- 経費精算規程.pdf (第3章 出張費用)
- 出張規定改定通知_2024年4月.pdf
シナリオ:開発者がAPIの使用方法を確認
質問例:
認証APIの使用方法と、アクセストークンの更新手順を教えてください。
期待される回答:
認証APIの使用方法:
【初回認証】
エンドポイント: POST /api/v1/auth/login
リクエストボディ:
{
"username": "ユーザー名",
"password": "パスワード"
}
レスポンス:
{
"access_token": "...",
"refresh_token": "...",
"expires_in": 3600
}
【トークンの更新】
エンドポイント: POST /api/v1/auth/refresh
ヘッダー: Authorization: Bearer [refresh_token]
レスポンス:
{
"access_token": "新しいアクセストークン",
"expires_in": 3600
}
参考ドキュメント:
- API仕様書_v2.3.pdf
- 認証フロー設計書.md
シナリオ:カスタマーサポートがよくある質問に回答
質問例:
製品の保証期間と、保証の対象外となるケースを教えてください。
期待される回答:
【保証期間】
- 標準保証:購入日から1年間
- 延長保証(オプション):最大3年まで延長可能
【保証対象】
- 正常な使用状況での故障や不具合
- 製造上の欠陥による問題
【保証対象外】
- お客様の過失による破損(落下、水濡れ等)
- 不適切な使用方法による故障
- 分解や改造を行った製品
- 消耗品(バッテリー、ケーブル等)の自然な劣化
- 天災による損傷
参考ドキュメント:
- 製品保証規定.pdf
- よくある質問(FAQ).html
ドキュメントにメタデータを付与することで、検索を絞り込むことができます。
メタデータの例:
- 部署:人事、経理、営業、開発
- ドキュメントタイプ:規定、マニュアル、FAQ
- 最終更新日
- アクセス権限レベル
活用例:
# Kendraの場合
質問時にフィルタを指定(実装による)
# Knowledge Basesの場合
S3にアップロード時にメタデータを設定
aws s3 cp document.pdf s3://bucket/path/ \
--metadata department=hr,doctype=policy
RAGチャットは複数のドキュメントから情報を統合して回答できます。
質問例:
入社手続きで必要な書類と、それぞれの提出先を教えてください。
複数ソースからの統合:
- 人事規定.pdf → 必要書類のリスト
- 新入社員ガイド.pdf → 提出先と期限
- 最新通知.pdf → 最近の変更事項
最新の情報を優先的に使用するように設定できます。
例:
質問: 在宅勤務の申請手順を教えてください。
回答時の情報源の優先順位:
1. 在宅勤務規定_改定版_2024年.pdf(最新)
2. 在宅勤務規定_2023年.pdf(古い情報として参照)
3. COVID-19対応ガイドライン.pdf(関連情報)
検索結果の数:
- デフォルト:上位5件
- 推奨範囲:3-10件
- 多すぎるとノイズが増加、少なすぎると情報不足
関連度の閾値:
- 関連度スコアの下限を設定
- 無関係なドキュメントを除外
チャンクサイズ(Knowledge Basesの場合):
- ドキュメントを分割する単位
- 小さすぎると文脈が失われる
- 大きすぎると検索精度が低下
- 推奨:300-1000トークン
RAGチャットのシステムプロンプトをカスタマイズできます。
デフォルトのプロンプトテンプレート:
以下の参考情報に基づいて、ユーザーの質問に答えてください。
参考情報に記載がない内容については、「情報が見つかりませんでした」と回答してください。
<参考情報>
{search_results}
</参考情報>
<質問>
{user_question}
</質問>
カスタマイズ例:
あなたは社内ヘルプデスクの担当者です。
以下の社内ドキュメントに基づいて、社員からの質問に丁寧に回答してください。
- 回答は簡潔かつ具体的に
- 手順がある場合は番号付きリストで
- ドキュメントに記載がない場合は、ITヘルプデスク(内線1234)への問い合わせを案内
<参考情報>
{search_results}
</参考情報>
<質問>
{user_question}
</質問>
- 明確なタイトル:ファイル名で内容がわかるように
- 目次の作成:長文ドキュメントには目次を追加
- セクション分け:見出しを使って構造化
- メタデータの付与:検索性を向上
- バージョン管理:ファイル名に日付やバージョン番号
- 古い文書の削除:定期的に不要な文書を削除
- 更新通知:重要な文書の更新を周知
- PDF:検索可能なテキストレイヤーを含める
- Word/Excel:シンプルな構造を維持
- HTML/Markdown:構造化タグを活用
原因1:関連ドキュメントが見つからない
- 対策:ドキュメントが正しくアップロード・同期されているか確認
- 確認方法:Kendra/Knowledge Basesコンソールで検索テスト
原因2:質問が曖昧
- 対策:より具体的な質問をする
- 例:「WiFi」→「社内WiFiにiPhoneを接続する方法」
原因3:ドキュメントの品質
- 対策:元のドキュメントを改善
- チェック項目:
- テキストが読み取れるか(画像PDFでないか)
- 情報が明確に記載されているか
- 見出しやセクション分けがされているか
遅い検索:
- ドキュメント数が多すぎる
- インデックスの最適化が必要
- リソースのスケールアップを検討
高いコスト:
- Knowledge Bases:冗長化設定を確認
- Kendra:Developer Editionの利用を検討
- 不要なドキュメントを削除
エラーの確認:
# Knowledge Basesの場合
aws bedrock-agent list-ingestion-jobs \
--knowledge-base-id [KB_ID] \
--data-source-id [DS_ID]一般的なエラーと対処:
- ファイル形式エラー:サポートされている形式か確認
- アクセス権限エラー:S3バケットのIAM権限を確認
- ファイルサイズエラー:大きすぎるファイルを分割
- 転送時の暗号化:TLS/SSL通信
- 保管時の暗号化:S3、OpenSearch Serverlessで有効化
- アクセスログ:CloudTrailで監査
ドキュメントレベル:
- S3バケットポリシー
- IAMロール
- Cognitoユーザーグループ
ユーザーレベル:
- Kendraの場合:ACL(Access Control List)
- 部署や役職に応じたアクセス制限
- データレジデンシー:適切なリージョン選択
- 保持期間:ドキュメントのライフサイクル管理
- 監査証跡:アクセスログの保管
第3章では、RAGチャット機能について、基本的な仕組み、Amazon KendraとKnowledge Basesの選択、効果的な活用方法、チューニング、トラブルシューティングまで詳しく解説しました。RAGを活用することで、社内データに基づいた正確で信頼性の高い情報提供が可能になります。次章では、文章生成、要約、翻訳などの各種生成機能について説明します。