Retrieval Augmented Generation (RAG) を支える技術と Amazon Bedrock を使用した構築例 -作成編-

記事タイトルとURLをコピーする

はじめに

本記事では、基礎編 に続いて、実際に Knowledge base を参照して回答を生成するチャット AI を Amazon Bedrock で構築するための一例を紹介します。

モデルアクセスを有効にする

既にアクセスが有効になっている場合は、本セクションは読み飛ばしてください。

本セクションでは Bedrock から基盤モデル(FM: Foundation Model)へのアクセスを有効化する手順を紹介します。

Amazon Bedrock のマネジメントコンソール

Bedrock のコンソールを開き、左メニューの「モデルアクセス」を押下します。遷移後の画面ではモデルの一覧が確認できますが、デフォルトでは各モデルの Access status が Available to request の状態になっています。これを利用できる状態にするために以下のどちらかを実施します。本記事では Anthropic のモデルを使用します。

有効化対象 手順
全てのモデル 「Enable all models」>「Next」>「Submit」
個別のモデル 「Enable specific models」>「利用するモデルにチェック」>「Next」>「Submit」

※ モデルを有効化しただけでは課金対象にはなりません。
※ 手順の中で所属等を入力する申請フォームが表示されることがあります。

Anthropic のモデルが有効化された

モデル一覧の画面のリロードまたはリロード UI を押下しデータを最新化すると、上記のように Access status が Access granted に変わったことが確認できます。これでモデルを利用する準備が整いました。

Knowledge Base を設定する

データソースのアップロード

このようなデモを実施するときに、まだ学習されていないであろう最新のデータをソースとしていました。しかし、最近のモデルは Web 検索機能を持っていたり、時間が経てば学習済みになってしまうことから、今回は独自のデータを生成 AI に作成してもらいました。本記事の末尾に記載の「秘宝CLOUDを求めて」物語をソースとします。

tale-data-source-bucket-{account_number} という名前の S3 バケットを作成し、そこにマークダウン形式で物語のデータを格納しました。

Knowledge Base の設定

左メニューの Builder tools から「Knoledge Bases」>「Create」>「Knowledge Base with vector store」を押下し設定フォームを開きます。各ステップの設定値について以下に記載します(指定がない場合はデフォルトのまま進めてください)。

Step 1 Provide Knowledge Base details

項目
Knowledge Base name tale-data-knowledge-base
Data source Amazon S3

Step 2 Configure data source

項目
Data source name tale-data-source
S3 URI tale-data-source-bucket-{account_number}
Chunking strategy Fixed-size chunking
Max tokens 50
Overlap percentage between chunks 10

Step 3 Configure data storage and processing

項目
Embeddings model Titan Text Embeddings V2
Vector store Amazon OpenSearch Serverless

Step 4 Review and create

設定を確認し「Create Knowledge Base」を押下します。

データソースの同期

「Knowledge Bases」>「tale-data-knowledge-base」>「Data source の tale-data-source に✅」>「Sync」を押下します。

Last sync time から最新の同期の時刻が確認できます。

LLM に物語の内容について問い合わせてみる

入力

Knowledge Bases のコンソールの右側メニューを開くと Test Knowledge Base と見出しのついたテストを実行できる UI が表示されます。

「Select model」>「Anthropic」>「Claude 3.7 Sonnet v1」>「Apply」を押下します。そして、メッセージフィールドに以下の文言を入力し「Run」を押下します。

フィン・アラストールはどのようなキャラクターか

出力

レスポンスのメッセージは以下です。

フィン・アラストールは若き指導者で、かつて情報都市サイロスで若年にして設計責任者を務めた経歴を持ちます。彼は冷静な戦略家でありながら、人を鼓舞する力も備え、リーダーシップの天稟(天性の才能)を持っています。また、問いを重視し、すぐに答えを求めない姿勢がクラウディア思想に近いと言われています。 物語の中では「つなぎ手」としての役割を担い、「過去と未来、知識と行動、人と人」をつなぐことの重要性を説いています。[1][2][3]

加えて、参照されたチャンクデータは以下のものが返されました。

chunk 1

冷静な戦略家でありながら、人を鼓舞する力も備え、リーダーシップの天稟を持つ。 問いを重視し、すぐに答えを求めない姿勢がクラウディア思想に近いと言われる。 - **エレナ・グレイス** セキュリティと知識管理のスペシャリスト。 秩序を重んじ、構造化された思考で複雑な問題を分析する。 過去に情報漏洩事件の解決にあたった経験を持ち、「信頼とは何か」を常に自問している。 - **リオ・ヴェイル** 俊敏なクラウド技術の探求者。動的構成・スケーラビリティに情熱を燃やす現場主義の天才。

chunk 2

今、時代は再び“雲の力”を必要としている。 混乱と過剰な情報が渦巻くこの世界で、 真に必要な問いを立て、それに応じるための力。 “つなぐ者”を求めて、伝説の山に挑む者たちが現れた。 風を読み、コードを編み、未知の課題を乗り越えながら—— 彼らの物語が、今、始まる。 --- ## 登場人物(拡張版) - **フィン・アラストール** 若き指導者。かつて情報都市サイロスで若年にして設計責任者を務めた経歴を持つ。 冷静な戦略家でありながら、人を鼓舞する力も備え、リーダーシップの天稟を持つ。

chunk 3

彼らの選択、葛藤、発見、そして“つなぎ”の行為。 最後の問いが投げかけられる。 「お前たちは、何を“つなぎたい”のか?」 誰も即答はしなかった。 沈黙のあと、フィンが言った。 「過去と未来。知識と行動。人と人——」 「“つなぐこと”……情報を、想いを、人を。“つなぐ者”こそが、これからの時代の導き手だ。」 その瞬間、CLOUDは開かれた。 --- ## エピローグ(拡張版) 彼らは“つなぎ手”として世界に戻った。 技術者でもあり、語り部でもある存在として。 かつてのクラウディアがそうであったように、 今度は彼らが未来に“文脈”を手渡す番だった。

boto3 から呼び出す例

boto3 経由で RAG を用いた回答を生成させる例とレスポンスを記載します。詳細は boto3 document AgentsforBedrockRuntime / Client / retrieve_and_generate を参照ください。

プログラム例

import json


import boto3


bar_client = boto3.client('bedrock-agent-runtime')
knowledge_base_id = 'FMXZKIC3ER'


model_id = 'anthropic.claude-3-5-sonnet-20240620-v1:0'
user_prompt = 'フィン・アラストールはどのようなキャラクターか'

response = bar_client.retrieve_and_generate(
    input={
        'text': user_prompt
    },
    retrieveAndGenerateConfiguration={
        'knowledgeBaseConfiguration': {
            'knowledgeBaseId': knowledge_base_id,
            'modelArn': f'arn:aws:bedrock:{boto3.Session().region_name}::foundation-model/{model_id}'
        },
        'type': 'KNOWLEDGE_BASE'
    }
)

print(response)

レスポンス

{
    "ResponseMetadata": {
        "RequestId": "10e5e509-80e5-4d0a-b28c-17b00cb8a24d",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "date": "Mon, 21 Apr 2025 08:39:52 GMT",
            "content-type": "application/json",
            "content-length": "4840",
            "connection": "keep-alive",
            "x-amzn-requestid": "10e5e509-80e5-4d0a-b28c-17b00cb8a24d",
        },
        "RetryAttempts": 0,
    },
    "citations": [
        {
            "generatedResponsePart": {
                "textResponsePart": {
                    "span": {"end": 230, "start": 0},
                    "text": 'フィン・アラストールは若き指導者として描かれています。彼は以前、情報都市サイロスで若くして設計責任者を務めた経歴を持っています。フィンの特徴として、冷静な戦略家であると同時に、人々を鼓舞する力も備えており、リーダーシップの才能を持っています。\n\nフィンは問いを重視する姿勢を持ち、即座に答えを求めない態度がクラウディア思想に近いと言われています。また、彼は"つなぐ者"としての役割を担っており、過去と未来、知識と行動、人と人をつなぐことの重要性を認識しています。',
                }
            },
            "retrievedReferences": [
                {
                    "content": {
                        "text": "今、時代は再び“雲の力”を必要としている。 混乱と過剰な情報が渦巻くこの世界で、 真に必要な問いを立て、それに応じるための力。 “つなぐ者”を求めて、伝説の山に挑む者たちが現れた。 風を読み、コードを編み、未知の課題を乗り越えながら—— 彼らの物語が、今、始まる。 --- ## 登場人物(拡張版) - **フィン・アラストール** 若き指導者。かつて情報都市サイロスで若年にして設計責任者を務めた経歴を持つ。 冷静な戦略家でありながら、人を鼓舞する力も備え、リーダーシップの天稟を持つ。",
                        "type": "TEXT",
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://tale-data-source-bucket-xxxxxx/hihou_cloud_story_long.md"
                        },
                        "type": "S3",
                    },
                    "metadata": {
                        "x-amz-bedrock-kb-source-uri": "s3://tale-data-source-bucket-xxxxxx/hihou_cloud_story_long.md",
                        "x-amz-bedrock-kb-chunk-id": "1%3A0%3ArbT-QZYxxxxxxyh41G",
                        "x-amz-bedrock-kb-data-source-id": "FHxxxxxxR9",
                    },
                },
                {
                    "content": {
                        "text": "冷静な戦略家でありながら、人を鼓舞する力も備え、リーダーシップの天稟を持つ。 問いを重視し、すぐに答えを求めない姿勢がクラウディア思想に近いと言われる。 - **エレナ・グレイス** セキュリティと知識管理のスペシャリスト。 秩序を重んじ、構造化された思考で複雑な問題を分析する。 過去に情報漏洩事件の解決にあたった経験を持ち、「信頼とは何か」を常に自問している。 - **リオ・ヴェイル** 俊敏なクラウド技術の探求者。動的構成・スケーラビリティに情熱を燃やす現場主義の天才。",
                        "type": "TEXT",
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://tale-data-source-bucket-xxxxxx/hihou_cloud_story_long.md"
                        },
                        "type": "S3",
                    },
                    "metadata": {
                        "x-amz-bedrock-kb-source-uri": "s3://tale-data-source-bucket-xxxxxx/hihou_cloud_story_long.md",
                        "x-amz-bedrock-kb-chunk-id": "1%3A0%3ArrT-QZYBWjxxxxxx41G",
                        "x-amz-bedrock-kb-data-source-id": "FHxxxxxxR9",
                    },
                },
                {
                    "content": {
                        "text": "彼らの選択、葛藤、発見、そして“つなぎ”の行為。 最後の問いが投げかけられる。 「お前たちは、何を“つなぎたい”のか?」 誰も即答はしなかった。 沈黙のあと、フィンが言った。 「過去と未来。知識と行動。人と人——」 「“つなぐこと”……情報を、想いを、人を。“つなぐ者”こそが、これからの時代の導き手だ。」 その瞬間、CLOUDは開かれた。 --- ## エピローグ(拡張版) 彼らは“つなぎ手”として世界に戻った。 技術者でもあり、語り部でもある存在として。 かつてのクラウディアがそうであったように、 今度は彼らが未来に“文脈”を手渡す番だった。",
                        "type": "TEXT",
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://tale-data-source-bucket-xxxxxx/hihou_cloud_story_long.md"
                        },
                        "type": "S3",
                    },
                    "metadata": {
                        "x-amz-bedrock-kb-source-uri": "s3://tale-data-source-bucket-xxxxxx/hihou_cloud_story_long.md",
                        "x-amz-bedrock-kb-chunk-id": "1%3A0%3AtrT-QZYBxxxxxxyh41H",
                        "x-amz-bedrock-kb-data-source-id": "FHxxxxxxR9",
                    },
                },
            ],
        }
    ],
    "output": {
        "text": 'フィン・アラストールは若き指導者として描かれています。彼は以前、情報都市サイロスで若くして設計責任者を務めた経歴を持っています。フィンの特徴として、冷静な戦略家であると同時に、人々を鼓舞する力も備えており、リーダーシップの才能を持っています。\n\nフィンは問いを重視する姿勢を持ち、即座に答えを求めない態度がクラウディア思想に近いと言われています。また、彼は"つなぐ者"としての役割を担っており、過去と未来、知識と行動、人と人をつなぐことの重要性を認識しています。'
    },
    "sessionId": "da9b62ac-xxxx-xxxx-xxxx-7cb8c65a665f",
}

まとめ

今回、架空の物語を作成してその内容について問い合わせた場合に、LLM が適切な回答を返すことができるかを Knowledge Base for Amazon Bedrock の機能を使用して検証しました。

フィン・アラストールというキャラクターがどのような性質を持っているかを問い合わせると、人物紹介セクション及び本文から該当人物に関係する文章を参照して、適切に説明できていることを確認できました。

ここではチャンク戦略において固定長チャンクオプションを指定しましたが、文章の意味合いに応じたチャンクサイズを動的に決定するセマンティックチャンクのオプションも追加されています。そのようにチャンク戦略やその他の手法を用いて RAG の精度をどのように向上できるかについても検証していきたいと思います。

架空物語本文

折角なので表紙を描いてもらいました。

# 秘宝CLOUDを求めて
## ~千の雲を越えて、智慧の山を登る者たち~

---

## プロローグ(拡張版)

遥か昔、この世界には「クラウディア」と呼ばれる空に浮かぶ文明が存在した。  
彼らは重力に縛られることを拒み、大地から意志を離し、天空を住まいとした叡智の民であった。  
雲を計算し、風を情報として捉え、雷鳴を電力と見なすその文化は、  
大地の民にとってはまるで魔法のような技術に満ちていた。

クラウディアの都市は、雲の層を積み重ねるようにして浮かんでいた。  
その中心に位置する知識の神殿——「アークノート」には、  
あらゆる文明の記録、対話の痕跡、設計と意図が蓄積されていたという。

しかし、その文明も突然、天空の彼方へと消え去った。  
残されたのは、空に浮かぶ巨大な山、「クラウドピーク」と、  
伝説の遺産とされる“秘宝CLOUD”の存在のみ。

それはただのデータではない。  
すべての情報が結びつき、必要とされる瞬間に正しく届き、意味を持って活用される、  
いわば“智慧の中枢”。  
クラウディアの哲学と設計が結晶となったもの。

今、時代は再び“雲の力”を必要としている。

混乱と過剰な情報が渦巻くこの世界で、  
真に必要な問いを立て、それに応じるための力。  
“つなぐ者”を求めて、伝説の山に挑む者たちが現れた。

風を読み、コードを編み、未知の課題を乗り越えながら——  
彼らの物語が、今、始まる。

---

## 登場人物(拡張版)

- **フィン・アラストール**  
 若き指導者。かつて情報都市サイロスで若年にして設計責任者を務めた経歴を持つ。  
 冷静な戦略家でありながら、人を鼓舞する力も備え、リーダーシップの天稟を持つ。  
 問いを重視し、すぐに答えを求めない姿勢がクラウディア思想に近いと言われる。

- **エレナ・グレイス**  
 セキュリティと知識管理のスペシャリスト。  
 秩序を重んじ、構造化された思考で複雑な問題を分析する。  
 過去に情報漏洩事件の解決にあたった経験を持ち、「信頼とは何か」を常に自問している。

- **リオ・ヴェイル**  
 俊敏なクラウド技術の探求者。動的構成・スケーラビリティに情熱を燃やす現場主義の天才。  
 自由を愛し、束縛を嫌う性格だが、仲間のためにはどんな危険にも飛び込む。  
 “動きの中にこそ最適がある”が口癖。

- **老導師ノヴァ**  
 雲の道を知り尽くす伝説の案内人。かつてクラウドピークの登攀に3度成功したと言われる。  
 その知識は神話と現実の狭間にあり、確証が持てぬ分、より深みを感じさせる。  
 問いをもって問いに答える人物。

---

## 第一章:雲の起点(拡張版)

クラウドピークの麓に立ったとき、彼らの視界は灰色の霧に包まれていた。  
地図に記されたこの地点——「雲の起点(クラウド・オリジン)」は、  
いかなる観測装置をもってしても形を捉えられない場所だった。

空は不気味なまでに静かで、風すら迷っているようだった。  
しかし、その静寂の中には、どこか規則的な振動が潜んでいた。  
それはあたかも、クラウディアの記憶がこの地に息づいているかのようだった。

(以下省略:次セルで続きを出力)

---

## 第二章:迷宮インフラ(拡張版)

ミドルアーキ・ラビリンス——それは山腹にそびえる巨大構造体だった。  
迷宮のように入り組んだ通路、ループする依存関係、断絶された設計思想。  
この空間そのものが、時を経て分岐と変容を繰り返した“構造の墓場”だった。

「ルートが……更新されてる?前回の地図と違う。」  
リオが驚きの声を上げる。

> 「拡張性がなければ、この山の上には登れない。進化を前提に道を作るのが俺たちのやり方だ。」  
> — リオ

彼は足元のコンソールを操作し、リアルタイムで道を再構築していく。  
かつての設計思想を尊重しつつ、未来の変化にも対応できる柔軟性を重視する道。

チームはルールベースではなく、予測と学習で進化するナビゲーションに切り替え、  
迷宮を“柔らかく”突破していく。

---

## 第三章:認証の空洞(拡張版)

谷を抜けた先には、空にぽっかりと空いた巨大な空洞があった。  
そこにはかつてクラウディアが用いていた古代の認証機構が眠っていた。

光の輪が彼らの前に現れ、ひとつずつ問いかけてくる。

「あなたは誰か?」「何を知っているか?」「なぜ、それを知るに値するのか?」

エレナは胸元の端末を静かに閉じた。

> 「認証は信頼の扉。技術だけでなく、私たち自身の行動がそれを開く。」  
> — エレナ

彼女は過去の事件で培った“透明性”の技術を用い、  
自身の活動ログとチームの行動履歴を可視化する。

それは自己をさらけ出す勇気でもあった。

問いの先に、扉は音もなく開いた。

---

## 第四章:記憶の雲樹林(拡張版)

記憶の雲樹林——それは時の層が積もったような森林だった。  
一本一本の雲樹は、クラウディアの知識を記録する“生きたアーカイブ”だった。

木々の間には、途切れた記憶の断片が漂っている。  
音のない記録。意味を失ったタグ。忘れ去られた構成。

> 「知識とは、保存されるだけでは意味がない。紐づけられ、問い直され、呼び起こされて初めて力になる。」  
> — フィン

彼は一つの断片を拾い上げる。そこには古代の子供が未来に宛てた手紙があった。

それは「問い」を育てる種だった。

---

## 最終章:CLOUDの間(拡張版)

頂上には白い霧のホールがあった。中央には巨大な鏡——それが秘宝CLOUDだった。

彼らが近づくと、鏡は言葉を発した。

> 「そなたたちは、単なる知識ではなく、それを統べる“問いの力”を持っておる。」

CLOUDは彼らの軌跡をすべて見ていた。  
彼らの選択、葛藤、発見、そして“つなぎ”の行為。

最後の問いが投げかけられる。

「お前たちは、何を“つなぎたい”のか?」

誰も即答はしなかった。

沈黙のあと、フィンが言った。

「過去と未来。知識と行動。人と人——」

「“つなぐこと”……情報を、想いを、人を。“つなぐ者”こそが、これからの時代の導き手だ。」

その瞬間、CLOUDは開かれた。

---

## エピローグ(拡張版)

彼らは“つなぎ手”として世界に戻った。  
技術者でもあり、語り部でもある存在として。

かつてのクラウディアがそうであったように、  
今度は彼らが未来に“文脈”を手渡す番だった。

そして、クラウドピークの麓にはまた新たな登山者たちの影が見える。

クラウドの旅は、ここから始まるのだ——。
2021年4月新卒入社。目に見えて、動かせるものが好き。