ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

Amazon Bedrock で RAG を構築してみた - Knowledge Bases + エージェントで社内文書AIアシスタントを作る

この記事を共有する

目次

こんにちは、パーソル&サーバーワークスの高橋です。

今回は Amazon Bedrock の Knowledge Bases(以下KB) と エージェント を使い、RAG(Retrieval-Augmented Generation)を実際に構築してみました。
「自分の資料をAIに読ませて、根拠付きで答えさせる」仕組みを、GUI操作だけで体験できたので、その手順と学びを共有します。


はじめに:RAGとは?

RAG(Retrieval-Augmented Generation)は、AIが回答する際に外部データを検索して根拠にする仕組みです。

通常のLLM(大規模言語モデル)は学習済みの一般知識しか持たないため、「自社の社内規定は?」のような組織固有の質問には答えられません。
RAGを使うと、自社の文書を検索し、その内容に基づいて回答を生成できます。

普通のAI:
  「有給何日?」→「日本の法律だと一般的に...」(一般論)
RAG付きAI:
  「有給何日?」→ 自社の資料を検索 → 該当箇所を発見 →
  「当社では入社1年目10日、2年目11日...」(自社資料に基づく回答+引用付き)

今回登場するAWSサービス

手順に入る前に、今回使うサービスをざっくり紹介します。

サービス概要
Amazon Bedrock各社のLLM(Claude、Titanなど)をAPI経由で使えるフルマネージドサービス。モデルの学習・運用が不要
Bedrock Knowledge Bases自社データをLLMに検索させる仕組み(RAG)をノーコードで構築できるBedrockの機能
Bedrock エージェントLLMに「判断」させる司令塔。KBを使うか一般知識で答えるかを自動で振り分ける
Amazon Titan Text Embeddings V2テキストを「意味を表すベクトル(数値の配列)」に変換するAmazon製の埋め込みモデル
Amazon S3AWSのオブジェクトストレージ。今回はテスト文書の格納場所として使用
Amazon S3 VectorsS3上でベクトルの保存と類似度検索ができるサービス。低コストなベクトルストア
Claude Haiku 4.5Anthropic社のLLM。軽量・高速・低コストで、エージェントの回答生成に使用

用語解説

用語意味
RAGRetrieval-Augmented Generation の略。外部データを検索し、その結果を根拠にLLMが回答を生成する仕組み
チャンク長い文書を検索しやすいように分割した小さな塊(約300トークン≒150〜200文字程度)。質問に関連する部分だけをピンポイントで取り出すために分割する
埋め込み(Embedding)テキストを「意味を表す数値ベクトル」に変換すること。意味が似ている文は、ベクトルも近い値になる
ベクトルストア埋め込みベクトルを保存し、「質問に意味が近いチャンク」を高速に検索するためのデータベース
セマンティック検索キーワードの一致ではなく「意味の近さ」で検索する方式。「有給休暇」と「年次休暇」のような表現の違いも対応できる
ハルシネーションLLMが根拠なく事実と異なる回答を生成してしまう現象。RAGのGrounding(根拠づけ)で軽減できる
LLMLarge Language Model(大規模言語モデル)の略。ChatGPTやClaudeなど、テキストを生成するAIモデルの総称

今回作ったもの

2つの構成を段階的に作りました。

構成① Knowledge Base のみ(エージェントなし)

まずはシンプルに「自社文書を検索して回答する」RAGの基本構成です。

構成図①:Knowledge Baseのみ

この構成では、文書に関連する質問には根拠付きで回答しますが、文書にないことを聞くと「情報がありません」と返します。

構成② エージェント追加(自動振り分け)

次に、エージェントを追加して「文書にあればRAGで、なければ一般知識で」と自動で使い分ける構成にしました。

構成図②:エージェントあり


手順1:テスト文書を用意してS3にアップロード

今回は検証用に架空の社内規定集を作成しました。有給休暇、リモートワーク制度、評価制度、情報セキュリティポリシーなどを記載したテキストファイルです。

テスト文書の内容(一部抜粋):

社内規定集(2026年4月改定版)
■ 有給休暇
- 入社1年目:10日
- 入社2年目:11日
- 入社3年目:12日
- 入社4年目:14日
- 入社5年目:16日
- 入社6年目:18日
- 入社7年目以降:20日(上限)
■ リモートワーク制度
- 対象者:入社6ヶ月以上の正社員
- 申請方法:勤怠管理システム「AttendPro」から前日17時までに申請
- 上限:週3日まで
- リモートワーク手当:月額5,000円
(以下、福利厚生・評価制度・情報セキュリティなど全4章)

S3バケットを作成し、このファイルをアップロードします。

S3にテスト文書をアップロード


手順2:Knowledge Baseを作成

Bedrockコンソールからナレッジベースを作成します。

  1. Bedrock → ナレッジベース → 「ベクトルストアを含むナレッジベース」を選択
  2. データソースにS3バケットを指定(他にもConfluence、Google Drive、Sharepointなど選択できます)
  3. 埋め込みモデルに Titan Text Embeddings V2 を選択
  4. ベクトルストアは 「Amazon S3 Vectors - 新規」を選択

ポイント:ベクトルストアに「S3 Vectors」を選ぶと、OpenSearch Serverlessに比べてコストが大幅に安くなります。ハンズオンにはこちらがおすすめです。


手順3:同期(Sync)を実行

作成したKnowledge Baseの「データソース」セクションから「同期」を実行します。

この操作で裏側では以下が自動実行されます:

  1. 取り込み:S3からファイルを読み込む
  2. チャンク分割:文書を約300トークンの小さな塊に分割
  3. 埋め込み生成:各チャンクをTitan Embeddingsでベクトルに変換
  4. インデックス化:ベクトルをS3 Vectorsに格納

ステータスが「利用可能」になれば完了です。


手順4:RAGのテスト(Knowledge Base経由)

ナレッジベース詳細画面の「ナレッジベースをテスト」パネルから質問を投げます。

質問:「有給休暇は入社何年目から何日もらえますか?」

回答:

  • 入社1年目:10日
  • 入社2年目:11日
  • 入社3年目:12日
  • ...
  • 入社7年目以降:20日(上限)

回答末尾に [1][2] という引用元チャンクの番号が表示されます。「どの文書のどの部分から情報を取ったか」が確認でき、これがRAGの「根拠ある回答」です。


手順5:RAGなし(素のLLM)との比較

同じ質問をBedrock Playground(Knowledge Baseを使わない素のClaude)にも投げてみました。

結果比較:

項目RAGあり(Knowledge Base)RAGなし(Playground)
回答内容自社規定の具体的な数字労働基準法の法定日数(一般論)
引用元チャンク番号付きで表示なし
正確性自社に即した正確な情報一般的には合っているが自社のルールではない

この差がRAGの価値です。素のLLMでは返せない「組織固有の情報」を、根拠付きで回答できるようになります。


手順6:文書にないことを質問してみる

ナレッジベースに「日本の首都はどこですか?」と質問してみました。

文書にない質問への回答

回答:「提供された検索結果には、日本の首都に関する情報は含まれていません。」

文書に根拠がないことは「わからない」と正直に答えます。これがハルシネーション(でっちあげ)の防止です。
ただし、本当に一般的な質問にも答えてほしい場合は不便ですよね。次のステップでこれを解決します。


手順7:エージェントで「自動振り分け」を実現

Knowledge Base単体だと「文書にないこと=答えない」になります。
実用的には「文書にあればRAGで、なければ一般知識で」と自動で使い分けたい。これを実現するのが Bedrock エージェント です。

エージェント作成手順

  1. Bedrock → エージェント → 「エージェントを作成」
  2. モデルに Claude Haiku 4.5 を選択
  3. 指示文を設定:
    あなたは社内アシスタントです。ナレッジベースに関連情報がある場合は、それを根拠に回答してください。ナレッジベースに情報がない場合は、あなた自身の一般知識で回答してください。回答は日本語でお願いします。
  4. 保存 → ナレッジベースセクションで先ほど作成したKBを紐づけ
  5. 保存 → 準備(Prepare)

ナレッジベースに情報がある質問「有給休暇は入社何年目から何日もらえますか?」と ナレッジベースに情報がない質問「日本の首都は?」を質問してみました。

エージェントのテスト結果

テスト結果

質問回答の根拠結果
有給休暇は何日もらえますか?Knowledge Base(自社文書)入社1年目10日、2年目11日...と具体的に回答
日本の首都はどこですか?一般知識「東京です」と回答

エージェントが自動で「KB検索すべきか」「一般知識で答えるべきか」を判断してくれます。これでKnowledge Base単体の弱点が解消され、実用的なアシスタントになりました。


コストについて

今回の構成(S3 Vectors使用)のコスト感です。

項目コスト
S3バケット(テキスト数KB保存)ほぼ0円
S3 Vectors(ベクトル保存)数円/日
Knowledge Base・エージェント(存在するだけ)0円
モデル呼び出し(数回のテスト)数十円
合計(当日テスト+数日放置)数百円程度

まとめ

Amazon Bedrock の Knowledge Bases とエージェントを使って、「自分の資料に基づいて答えるAIアシスタント」をGUI操作だけで構築しました。

今回確認できたことは以下の通りです:

  • RAGあり → 自社文書の具体的な内容を引用付きで回答できる
  • RAGなし → 一般論しか返らず、自社固有の情報は答えられない
  • 文書にないことを質問 → 「情報がない」と正直に返す(ハルシネーション防止)
  • エージェントを追加 → KB検索と一般知識の自動振り分けが可能

コードを一行も書かずにここまで構築できるのは、すごく便利だと感じました!
RAGに興味がある方は、ぜひ手を動かして試してみてください。

参考ドキュメント

この記事は私が書きました

高橋 憲太

記事一覧

パーソル&サーバーワークスの高橋です。 猫も犬も好きです。

高橋 憲太

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。