はじめに
こんにちは。株式会社アベリオシステムズでエンジニアをやっている、なかざとです![]()
今回、AWS上でRAGを構築する機会がありましたので、簡単ではありますがアウトプットしていきたいと思います。
RAGとは?
RAGは、大規模言語モデル(LLM)が外部の最新情報や社内文書を検索・参照して、より正確で信頼性の高い回答を生成する技術です。
RAGという名前は、
-
Retrieval(リトーリバル):検索 -
Augmented(オーグメンテッド):拡張 -
Generation(ジェネレーション):生成
の頭文字から付けられています。
RAGはどういった場合に使うのか
具体的にどういった場合に使うかというと、
- 最新のアニメの情報を参照したい
- 社内ドキュメントから必要な製品の情報を取得したい
といった場合に使われます。
そもそもLLMは学習済みの知識からしか生成することは出来ません。
なので、当たり前ですが外部に公開されていない情報は学習していませんし、最新の情報は学習されるまでラグがあります。
こういった場合にRAGを使うことで必要な情報を取得することが出来ます。
ベクトルデータベースとは?
RAGを学ぶ上で必ず出てくるのがベクトルデータベースです。
ベクトルデータベースは、文章や画像などの情報を「意味のかたまり」として扱うために、数値の集合=ベクトルの形に変換して保存する技術です。
AWSですと、
- Amazon Kendra
- Amazon OpenSearch Service
- Aurora PostgreSQL (pgvector)
などがありますが、最近利用できるようになった安価なS3 Vectorsを本記事では利用します。
RAGのメリット/デメリット
RAGを使うと以下のようなメリットがあります
-
最新の情報を使えることによるリアルタイム性
- 追加した最新の情報から回答できる
- 情報は任意のタイミングで更新できる
-
より正確な回答を得られることによる信頼性
- 自分たちで与えた情報源に基づいて回答できる
- 正確な情報から生成するため、ハルシネーションを減らせる
-
情報源の明確化による透明性
- 生成された回答がどの情報をもとにしたものか明確になる
- 回答の根拠を示せる
-
ファインチューニングによる追加学習と比べてコストが低い
逆に以下のようなデメリットがあります。
-
情報源の品質が悪いと精度が低下する
- (当たり前ですが)RAG化する情報が不正確だったり、曖昧なものだと精度が低下
-
レスポンス速度の低下
- RAGなしと比べると、回答に時間がかかるようです
-
データの更新の管理/システムが複雑化
- RAGなしでは意識することがなかった、データをどのタイミングでどのように更新していくか
- どういった構成でベクトルデータベース化などするかなどを考慮する必要がある
-
セキュリティの懸念
- 機密情報の外部への流出リスクを考慮する必要がある
試してみた
では、ここから実際に試してみます。
ドキュメントを保存するS3バケットを作る
まず、ナレッジベース(RAG)のデータソースとしてS3バケットを作成します。
S3バケットを作成したら、PDFやCSVなどの任意のドキュメントファイルをアップロードします。
ドキュメントファイルとは別に、メタデータファイルをアップロードすることで情報の秘匿や情報の最適化が出来るようになるのですが、ここはまだ勉強できていないのでいったんスキップします![]()
Bedrockでナレッジベース(RAG)を作る
S3バケットの準備が出来たら、ナレッジベースを作っていきます。
データソースの指定
データソースとして先ほど作したS3バケットを指定します。
S3バケットの他には現在、
- ウェブクローラー ※Preview
- カスタム
- Confluence ※Preview
- Salesforce ※Preview
- Sharepont ※Preview
が利用できます
埋め込みモデルの指定
次にドキュメントをベクトル化する際に利用するモデルを指定します。
今回は Titan Text Embeddings V2を指定します。
ベクトルデータベースの指定
次にベクトルデータベースとしてS3 Vectorsを指定します。
ナレッジベースが作成できました![]()
ナレッジベースを更新したい場合は、S3バケットにファイルをアップロードし、ナレッジベースの同期を行うことで最新化されます。
では最後にRAGあり/なしで同じ質問をして回答がどう変わるか試してみます![]()
RAGなしで質問してみる
2025年12月にラスベガスで行われたAWSイベントについて質問してみます。
プロンプト:2025年にラスベガスで行われたaws reinventの内容を教えて
出力結果
AWS re:Invent 2025について
申し訳ございませんが、私の知識は2024年4月までに限定されているため、2025年のAWS re:Inventについての情報は持っていません。
参考:最近のre:Inventの傾向
過去のre:Inventでは以下のような発表が行われてきました:
新しいAWSサービスの発表
既存サービスの大幅なアップデート
生成AI・機械学習関連の新機能
セキュリティ・コンプライアンスの強化
基調講演(キーノート)での戦略発表
情報の入手方法
2025年のre:Inventの内容については、以下をご確認ください:
AWS公式サイト: aws.amazon.com/reinvent
AWSブログ: aws.amazon.com/blogs
YouTube: AWS公式チャンネルでセッション動画が公開されます
Twitter/X: #reinvent ハッシュタグ
もし具体的にお知りになりたい技術領域があれば、それについてお手伝いできることがあるかもしれません。
うまく回答がもらえませんでした![]()
RAGありで質問してみる
以下のPDFドキュメントをナレッジベースに取り込んで、質問してみます。
https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2025_AWS-reInvent-Recap.pdf
プロンプト:2025年にラスベガスで行われたaws reinventの内容を教えて
出力結果
AWS re:Invent 2025は、2025年12月1日から12月5日までラスベガスで開催された、AWSによるクラウドコンピューティングに関する世界最大規模の「学習型」カンファレンスです。
イベントの規模は非常に大きく、現地参加者は60,000人以上、CEO基調講演のストリーミング視聴者は200万人以上に達しました。
コンテンツとしては、5つのキーノート、AWSのリーダーによる15の分野ごとに未来とビジョンを語るInnovation Talks、多数のブレイクアウトセッション、多数のネットワーキングパーティ、re:Play partyなどが実施されました。
また、次回のAWS re:Invent 2026は2025年11月30日から12月4日に開催予定であることも発表されています。[1][2]
プロンプト:bedrockに関して何か話されましたか?
出力結果
AWS re:Invent 2025では、Amazon Bedrockに関して以下の内容が発表されました:
1. Amazon BedrockがOpenAI Responses APIをサポートし、長時間実行される推論ワークロードで非同期推論を実現できるようになりました。新しいOpenAI API互換サービスエンドポイントを介して利用可能で、ストリーミングモードと非ストリーミングモードの双方をサポートしています。
2. Amazon Nova 2 Liteへの対応が開始され、近日中に拡張予定とされています。バージニアリージョンで一般利用が開始されました。
3. Amazon Bedrock Knowledge Basesのマルチモーダル検索機能が発表されました。
4. Amazon Bedrock AgentCore Runtimeが双方向ストリーミングに対応しました。
5. Amazon Bedrock AgentCore Evaluations、Policy in Amazon Bedrock AgentCoreなどの新機能が発表されました。
6. Amazon Nova Actが一般利用開始になりました。
これらのアップデートにより、ラベル付きデータが不要で、データがAWS環境から外に出ることなく、汎用モデルをそのまま使うという妥協を回避できるカスタマイズが可能になっています。[1][2]
良い感じに取得できましたね![]()
おまけ
最後に生成AIでこんなの出来るんだなーっていう簡単な共有です。
今回は、BedrockのClaude Sonnet4.5で試しました!
生成AIでグラフの値を読み取れるか試してみる
サンプルのグラフ画像のデータを取得できるか試してみます。
プロンプト:添付したグラフ画像について、グラフの各数値をjson形式でアウトプットして
出力結果
{
"title": "売上額の推移",
"unit": "万円",
"data": [
{ "month": "1月", "A商品": 250, "B商品": 300 },
{ "month": "2月", "A商品": 450, "B商品": 160 },
{ "month": "3月", "A商品": 250, "B商品": 280 },
{ "month": "4月", "A商品": 200, "B商品": 180 },
{ "month": "5月", "A商品": 230, "B商品": 200 },
{ "month": "6月", "A商品": 250, "B商品": 160 },
{ "month": "7月", "A商品": 220, "B商品": 200 },
{ "month": "8月", "A商品": 185, "B商品": 350 },
{ "month": "9月", "A商品": 240, "B商品": 200 },
{ "month": "10月", "A商品": 280, "B商品": 180 },
{ "month": "11月", "A商品": 380, "B商品": 280 },
{ "month": "12月", "A商品": 470, "B商品": 400 }
]
}
良い感じに取れました![]()
生成AIでPDFの値を読み取れるか試してみる
サンプルの製品情報PDFのデータを取得できるか試してみます。
プロンプト:添付した製品情報について、PDFの各数値をjson形式でアウトプットして
出力結果
{
"注文情報": {
"注文ID": 3,
"ご注文日": "2018年10月9日",
"ご注文金額": "3,000JPY",
"お支払方法": "credit",
"お届け日": "指定なし"
},
"顧客情報": {
"氏名": "test test", "敬称": "様"
},
"販売店情報": {
"店名": "スターフィールド株式会社", "郵便番号": "171-0033", "住所": "東京都豊島区高田3-9-7"
},
"発送先": {
"郵便番号": "804", "住所": "高雄市鼓山區峰山町二箇1142", "宛名": "test test 様", "電話番号": "0227580037"
},
"商品明細": [
{
"商品名": "test0820 ひまわり空色Tシャツ", "価格": "3,000JPY", "数量": 1, "小計": "3,000円", "税区分": "内税"
}
],
"金額合計": {
"商品代金合計": "3,000円",
"送料": "0円",
"手数料": "0円",
"調整費": "0円",
"使用ポイント": "-0Pt",
"クーポン": "-0円",
"請求金額": "3,000円"
}
}
こちらも良い感じに取れました![]()
ファイルがもっとぼやけてたり、手書きだったらどうなるか?などいろいろ試す必要はあるとは思いますが、一定の品質は担保できそうです!
おわりに
今回は、AWSでRAGを簡単に構築し、実際に質問の回答が返ってくるか試しました。
- RAGってなんかよく聞くけど、なんのことかわからない
- 簡単にRAGを構築してみたいが、どのように作れば変わらない
って方の参考になれば幸いです![]()


