Skip to content

Genu(ジェンユー)完全ガイド - 第3章:RAG(Retrieval-Augmented Generation)チャット機能

3.1 RAGチャット機能の概要

RAG(Retrieval-Augmented Generation)チャット機能は、Amazon KendraまたはKnowledge Bases for Amazon Bedrockと連携し、事前に登録された社内データや専門文書に基づいて回答を生成する機能です。

3.1.1 RAGとは

RAG(Retrieval-Augmented Generation)は、「情報の検索」と「大規模言語モデルの文章生成」を組み合わせる手法です。

従来のチャットとの違い

通常のチャット: - LLMの学習時に獲得した知識のみを使用 - 最新情報や社内固有の情報には対応できない - ハルシネーション(誤情報)のリスクが高い

RAGチャット: - 検索システムから取得した参考ドキュメントに基づいて回答生成 - 社内情報や最新情報に対応可能 - ハルシネーションを抑制し、より正確で信頼性の高い情報提供が可能

RAGのメリット

  1. 正確性の向上
  2. 実際のドキュメントに基づいた回答
  3. 事実確認が可能

  4. 最新情報への対応

  5. LLMの学習時期に依存しない
  6. データを更新すれば最新情報に対応

  7. 社内知識の活用

  8. 社内規定、マニュアル、手順書などを活用
  9. ドメイン固有の専門知識に対応

  10. 透明性の確保

  11. 参考にしたドキュメントを明示
  12. 回答の根拠を追跡可能

  13. 学習不要

  14. モデルをFine-tuningする必要がない
  15. データを追加するだけで機能拡張

3.2 RAGの処理フロー

RAGチャット機能は以下の3つのステップで動作します。

3.2.1 ステップ1:クエリ生成

処理内容: - ユーザーが入力した質問を分析 - 検索に適した形式のクエリ(検索キーワード)を生成 - 必要に応じて複数のクエリを生成

ユーザーの質問:
「社内WiFiにスマートフォンを接続する方法を教えてください」

生成されるクエリ:
- "社内WiFi スマートフォン 接続方法"
- "WiFi設定 モバイル デバイス"
- "無線LAN スマホ 接続手順"

3.2.2 ステップ2:データ検索

処理内容: - 生成されたクエリを使用してデータソースを検索 - Amazon KendraまたはKnowledge Basesが関連ドキュメントを取得 - 関連度の高い上位の結果を選択

検索対象: - 事前に登録されたドキュメント(PDF、Word、テキストファイル等) - データベースやWebページ(設定による) - 社内システムのコンテンツ(統合設定による)

検索の特徴: - セマンティック検索:意味的に関連する情報を取得 - キーワード検索:完全一致や部分一致の検索 - メタデータフィルタリング:属性による絞り込み

3.2.3 ステップ3:回答生成

処理内容: - 検索結果の情報を「コンテキスト」としてLLMに提供 - ユーザーの質問と検索結果を組み合わせてプロンプトを構成 - LLMが検索結果に基づいて回答を生成

プロンプトの構造例

以下の参考情報に基づいて、ユーザーの質問に答えてください。
参考情報に記載がない内容については、「情報が見つかりませんでした」と回答してください。

<参考情報>
[検索で取得したドキュメントの内容]
</参考情報>

<質問>
社内WiFiにスマートフォンを接続する方法を教えてください
</質問>

3.3 RAGチャット機能の有効化

Genuでは、RAGチャット機能を有効化するための2つの方法を提供しています。

3.3.1 選択肢1:Amazon Kendraを使用

Amazon Kendraとは

Amazon Kendraは、フルマネージド型のエンタープライズ検索サービスです。

特徴: - 豊富なデータソース対応: - AWS S3 - SharePoint - Salesforce - ServiceNow - データベース(RDS等) - OneDrive - その他多数のコネクタ

  • 高度な検索機能
  • 自然言語検索
  • ファセット検索
  • 同義語辞書
  • カスタムランキング

  • エンタープライズ対応

  • アクセス制御リスト(ACL)
  • ユーザーコンテキスト
  • インクリメンタルクロール

推奨する場合: - 検索基盤の設定をAWSに任せたい - チャット形式だけでなく、検索システムとしても使いたい - 多様なデータソースを統合したい - すでにAmazon Kendraを導入している

有効化手順(CDK使用時)

  1. cdk.jsonの編集

    cd ~/generative-ai-use-cases
    

  2. packages/cdk/cdk.jsonファイルを開く

  3. 20行目のragEnabledを変更:

    変更前: "ragEnabled": false
    変更後: "ragEnabled": true
    

  4. ファイルを保存(Command+S / Ctrl+S)

  5. デプロイ

    npm -w packages/cdk run -- cdk deploy --require-approval never --all
    

Kendraインデックスへのドキュメント追加

  1. AWSコンソールでKendraを開く
  2. 「Amazon Kendra」サービスを検索
  3. 作成されたインデックスを選択

  4. データソースの作成

  5. 「データソースの追加」をクリック
  6. S3コネクタを選択(または他のコネクタ)
  7. データソース名を入力
  8. S3バケットとフォルダを指定

  9. 同期の実行

  10. 「今すぐ同期」をクリック
  11. 初回同期には時間がかかる場合があります

  12. 検索のテスト

  13. Kendraコンソールで検索をテスト
  14. 適切な結果が返されることを確認

3.3.2 選択肢2:Knowledge Bases for Amazon Bedrockを使用

Knowledge Bases for Amazon Bedrockとは

Knowledge Bases for Amazon Bedrockは、Amazon Bedrockのフルマネージド型RAG機能です。

特徴: - 簡単なセットアップ: - ベクトルデータベースへのデータ取り込みを自動管理 - インフラ管理が不要

  • 最適化されたRAG
  • Bedrockモデルとの統合
  • 自動的なチャンキング
  • エンベディングの生成

  • コスト最適化

  • OpenSearch Serverlessの冗長化を無効化可能
  • 利用量が少ない場合のコスト削減

GenUでの実装: - ベクトルデータベース:OpenSearch Serverless - 日本語最適化:日本語検索に最適化された設定 - 柔軟なカスタマイズ:検索パラメータの調整が可能

推奨する場合: - 検索基盤を柔軟にカスタマイズしたい - コストを最適化したい - Amazon S3を中心にデータを蓄積している - RAGに特化した機能が必要

有効化手順(CDK使用時)

  1. cdk.jsonの編集

    cd ~/generative-ai-use-cases
    

  2. packages/cdk/cdk.jsonファイルを開く

  3. 26行目のragKnowledgeBaseEnabledを変更:

    変更前: "ragKnowledgeBaseEnabled": false
    変更後: "ragKnowledgeBaseEnabled": true
    

  4. ファイルを保存(Command+S / Ctrl+S)

  5. デプロイ

    npm -w packages/cdk run -- cdk deploy --require-approval never --all
    

Knowledge Baseへのドキュメント追加

  1. S3バケットの確認
  2. デプロイ時に自動作成されたS3バケットを確認
  3. バケット名は CloudFormationのOutputsに表示されます

  4. ドキュメントのアップロード

    # AWS CLIを使用してアップロード
    aws s3 cp document.pdf s3://[バケット名]/documents/
    

または、AWSコンソールからマニュアルでアップロード

  1. サポートされるファイル形式
  2. PDF
  3. Microsoft Word (.doc, .docx)
  4. Microsoft PowerPoint (.ppt, .pptx)
  5. Microsoft Excel (.xls, .xlsx)
  6. テキストファイル (.txt)
  7. HTML
  8. Markdown (.md)
  9. CSV

  10. 同期(インジェスト)の実行

方法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]

  1. 同期の確認
  2. 同期ステータスを確認
  3. エラーがある場合はログを確認

3.3.3 KendraとKnowledge Basesの比較

観点 Amazon Kendra Knowledge Bases for Amazon Bedrock
セットアップの容易さ やや複雑 簡単
データソース 多様(50+のコネクタ) 主にS3
検索機能 高度(ファセット、同義語等) RAGに最適化
カスタマイズ性 高い 中程度
コスト(小規模) 高め 低め
コスト(大規模) 中程度 中程度
検索以外の用途 可能 RAG専用
日本語対応 良好 GenUで最適化済み
メンテナンス やや必要 少ない

3.4 RAGチャットの使い方

3.4.1 基本的な使用方法

  1. RAGチャット画面を開く
  2. サイドバーから「RAGチャット」を選択

  3. 質問を入力

  4. テキストボックスに質問を入力
  5. 通常のチャットと同じように自然言語で質問

  6. 回答の確認

  7. AIが検索結果に基づいて回答を生成
  8. 回答の下に参考ドキュメントが表示されます

3.4.2 参考ドキュメントの確認

RAGチャットの回答には、以下の情報が表示されます:

表示される情報: - ドキュメント名:参照したファイル名 - 関連度スコア:質問との関連性(0-1の値) - 抜粋テキスト:関連する部分のテキスト - ソースリンク:元ドキュメントへのアクセスリンク

ソースアクセスの仕組み: - Amazon S3の署名付きURLを使用 - 一時的なアクセス権限(通常15分間有効) - セキュアなファイルアクセス

活用方法

1. 回答を確認
2. 参考ドキュメントのリンクをクリック
3. 元のドキュメント全体を確認
4. 情報の正確性を検証
5. 必要に応じて追加の質問を入力

3.4.3 効果的なRAGチャットの使い方

具体的な質問をする

悪い例

WiFiについて教えて
→ 範囲が広すぎて適切な検索ができない

良い例

社内WiFiにiPhoneを接続する具体的な手順を教えてください。
→ 明確な質問で適切なドキュメントが検索される

コンテキストを提供する

新入社員向けのオンボーディング手順で、初日に実施すべきIT関連の手続きを教えてください。

複数の観点から質問する

最初の回答で不十分な場合は、別の角度から質問:

質問1: 社内WiFiの設定方法を教えてください。
[回答を確認]

質問2: WiFi接続ができない場合のトラブルシューティング方法は?
[回答を確認]

質問3: ゲストWiFiと社員用WiFiの違いは何ですか?

3.5 RAGチャットの活用例

3.5.1 社内手順書への質問応答

シナリオ:新入社員が社内システムの使い方を学ぶ

質問例

社内WiFiに接続する方法を教えてください。

期待される回答

社内WiFiへの接続方法は以下の通りです:

1. デバイスのWiFi設定を開く
2. ネットワーク一覧から「CompanyWiFi-Secure」を選択
3. 認証方式:WPA2-Enterprise
4. ユーザー名:社員番号@company.com
5. パスワード:社内ポータルと同じパスワード
6. 接続をクリック

参考ドキュメント:
- IT基盤利用ガイド.pdf (関連度: 0.95)
- 新入社員向けマニュアル.pdf (関連度: 0.87)

3.5.2 製品マニュアルの検索

シナリオ:カスタマーサポート担当者が製品の技術情報を検索

質問例

製品XYZ-100のエラーコードE-503が表示された場合の対処方法を教えてください。

期待される回答

エラーコードE-503は「通信タイムアウト」を示しています。

対処方法:
1. ネットワーク接続を確認してください
2. ファイアウォール設定を確認し、ポート8443が開いていることを確認
3. デバイスを再起動してください
4. 問題が解決しない場合は、サポートセンター(0120-xxx-xxx)にご連絡ください

参考ドキュメント:
- 製品XYZ-100トラブルシューティングガイド.pdf
- エラーコード一覧表.xlsx

3.5.3 法規制や社内規定の確認

シナリオ:経理担当者が経費精算のルールを確認

質問例

出張時の宿泊費の上限額と、領収書の提出要件を教えてください。

期待される回答

出張時の宿泊費については以下の規定があります:

【上限額】
- 国内出張:1泊あたり15,000円
- 海外出張:都市により異なる(出張規定別表参照)

【領収書の提出要件】
1. 宿泊施設が発行した正式な領収書が必要
2. 宿泊者名、日付、金額、宿泊施設名が明記されていること
3. クレジットカードの利用明細書のみでは不可
4. 電子領収書も原本として認められる

参考ドキュメント:
- 経費精算規程.pdf (第3章 出張費用)
- 出張規定改定通知_2024年4月.pdf

3.5.4 技術ドキュメントの検索

シナリオ:開発者が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

3.5.5 FAQ対応

シナリオ:カスタマーサポートがよくある質問に回答

質問例

製品の保証期間と、保証の対象外となるケースを教えてください。

期待される回答

【保証期間】
- 標準保証:購入日から1年間
- 延長保証(オプション):最大3年まで延長可能

【保証対象】
- 正常な使用状況での故障や不具合
- 製造上の欠陥による問題

【保証対象外】
- お客様の過失による破損(落下、水濡れ等)
- 不適切な使用方法による故障
- 分解や改造を行った製品
- 消耗品(バッテリー、ケーブル等)の自然な劣化
- 天災による損傷

参考ドキュメント:
- 製品保証規定.pdf
- よくある質問(FAQ).html

3.6 RAGチャットの高度な活用

3.6.1 フィルタリングとメタデータの活用

ドキュメントにメタデータを付与することで、検索を絞り込むことができます。

メタデータの例: - 部署:人事、経理、営業、開発 - ドキュメントタイプ:規定、マニュアル、FAQ - 最終更新日 - アクセス権限レベル

活用例

# Kendraの場合
質問時にフィルタを指定(実装による)

# Knowledge Basesの場合
S3にアップロード時にメタデータを設定
aws s3 cp document.pdf s3://bucket/path/ \
  --metadata department=hr,doctype=policy

3.6.2 複数ドキュメントからの情報統合

RAGチャットは複数のドキュメントから情報を統合して回答できます。

質問例

入社手続きで必要な書類と、それぞれの提出先を教えてください。

複数ソースからの統合: - 人事規定.pdf → 必要書類のリスト - 新入社員ガイド.pdf → 提出先と期限 - 最新通知.pdf → 最近の変更事項

3.6.3 時系列情報の考慮

最新の情報を優先的に使用するように設定できます。

質問: 在宅勤務の申請手順を教えてください。

回答時の情報源の優先順位:
1. 在宅勤務規定_改定版_2024年.pdf(最新)
2. 在宅勤務規定_2023年.pdf(古い情報として参照)
3. COVID-19対応ガイドライン.pdf(関連情報)

3.7 RAGチャットのチューニング

3.7.1 検索パラメータの調整

検索結果の数: - デフォルト:上位5件 - 推奨範囲:3-10件 - 多すぎるとノイズが増加、少なすぎると情報不足

関連度の閾値: - 関連度スコアの下限を設定 - 無関係なドキュメントを除外

チャンクサイズ(Knowledge Basesの場合): - ドキュメントを分割する単位 - 小さすぎると文脈が失われる - 大きすぎると検索精度が低下 - 推奨:300-1000トークン

3.7.2 プロンプトテンプレートのカスタマイズ

RAGチャットのシステムプロンプトをカスタマイズできます。

デフォルトのプロンプトテンプレート

以下の参考情報に基づいて、ユーザーの質問に答えてください。
参考情報に記載がない内容については、「情報が見つかりませんでした」と回答してください。

<参考情報>
{search_results}
</参考情報>

<質問>
{user_question}
</質問>

カスタマイズ例

あなたは社内ヘルプデスクの担当者です。

以下の社内ドキュメントに基づいて、社員からの質問に丁寧に回答してください。
- 回答は簡潔かつ具体的に
- 手順がある場合は番号付きリストで
- ドキュメントに記載がない場合は、ITヘルプデスク(内線1234)への問い合わせを案内

<参考情報>
{search_results}
</参考情報>

<質問>
{user_question}
</質問>

3.7.3 ドキュメント管理のベストプラクティス

ドキュメントの構造化

  • 明確なタイトル:ファイル名で内容がわかるように
  • 目次の作成:長文ドキュメントには目次を追加
  • セクション分け:見出しを使って構造化
  • メタデータの付与:検索性を向上

更新管理

  • バージョン管理:ファイル名に日付やバージョン番号
  • 古い文書の削除:定期的に不要な文書を削除
  • 更新通知:重要な文書の更新を周知

ファイル形式の最適化

  • PDF:検索可能なテキストレイヤーを含める
  • Word/Excel:シンプルな構造を維持
  • HTML/Markdown:構造化タグを活用

3.8 トラブルシューティング

3.8.1 適切な回答が得られない場合

原因1:関連ドキュメントが見つからない - 対策:ドキュメントが正しくアップロード・同期されているか確認 - 確認方法:Kendra/Knowledge Basesコンソールで検索テスト

原因2:質問が曖昧 - 対策:より具体的な質問をする - 例:「WiFi」→「社内WiFiにiPhoneを接続する方法」

原因3:ドキュメントの品質 - 対策:元のドキュメントを改善 - チェック項目: - テキストが読み取れるか(画像PDFでないか) - 情報が明確に記載されているか - 見出しやセクション分けがされているか

3.8.2 検索パフォーマンスの問題

遅い検索: - ドキュメント数が多すぎる - インデックスの最適化が必要 - リソースのスケールアップを検討

高いコスト: - Knowledge Bases:冗長化設定を確認 - Kendra:Developer Editionの利用を検討 - 不要なドキュメントを削除

3.8.3 同期エラー

エラーの確認

# Knowledge Basesの場合
aws bedrock-agent list-ingestion-jobs \
  --knowledge-base-id [KB_ID] \
  --data-source-id [DS_ID]

一般的なエラーと対処: - ファイル形式エラー:サポートされている形式か確認 - アクセス権限エラー:S3バケットのIAM権限を確認 - ファイルサイズエラー:大きすぎるファイルを分割

3.9 セキュリティとアクセス制御

3.9.1 データの保護

  • 転送時の暗号化:TLS/SSL通信
  • 保管時の暗号化:S3、OpenSearch Serverlessで有効化
  • アクセスログ:CloudTrailで監査

3.9.2 アクセス制御

ドキュメントレベル: - S3バケットポリシー - IAMロール - Cognitoユーザーグループ

ユーザーレベル: - Kendraの場合:ACL(Access Control List) - 部署や役職に応じたアクセス制限

3.9.3 コンプライアンス

  • データレジデンシー:適切なリージョン選択
  • 保持期間:ドキュメントのライフサイクル管理
  • 監査証跡:アクセスログの保管

まとめ

第3章では、RAGチャット機能について、基本的な仕組み、Amazon KendraとKnowledge Basesの選択、効果的な活用方法、チューニング、トラブルシューティングまで詳しく解説しました。RAGを活用することで、社内データに基づいた正確で信頼性の高い情報提供が可能になります。次章では、文章生成、要約、翻訳などの各種生成機能について説明します。