【ITニュース解説】How to Use RAG with Amazon Bedrock + Nova for Building Chatbots
2025年09月25日に「Dev.to」が公開したITニュース「How to Use RAG with Amazon Bedrock + Nova for Building Chatbots」について初心者にもわかりやすく解説しています。
ITニュース概要
LLMは訓練データにない質問に弱い。RAGは外部データを参照し、LLMの回答を正確にする技術だ。Amazon BedrockとNovaでRAGチャットボット構築手順を解説する。
ITニュース解説
現代のIT分野において、大規模言語モデル(LLM)は日々進化し、まるで人間が書いたかのような自然な文章を生成できるようになった。しかし、LLMには一つの課題がある。それは、彼らの知識が訓練されたデータに限定されるという点だ。たとえば、ある特定の商品の最新情報や、企業の内部マニュアルといった、LLMが訓練された後に登場した情報や一般に公開されていない専門知識については、正確な回答を生成できない可能性がある。質問に対して素晴らしい、文法的に正しい回答が返ってきたとしても、それが必ずしも事実に基づいているとは限らない。
このような課題を解決し、LLMがより正確で、文脈に沿った、信頼できる回答を生成できるようにする技術が、RAG(Retrieval-Augmented Generation:検索拡張生成)である。RAGは、ユーザーの質問に関連する情報を外部の知識源から「検索(Retrieve)」し、その情報を使ってLLMに回答を「生成(Generate)」させる仕組みだ。これにより、LLMは自身の学習データだけでなく、提供された最新かつ正確な情報も考慮して回答を作成できるようになる。
RAGは大きく分けて次の三つのステップで構成される。一つ目は、ユーザーの質問に基づいて、関連する外部データを検索するステップ。二つ目は、検索で得られた知識データを元の質問に加えてプロンプトを「拡張(Augment)」するステップ。そして三つ目は、拡張されたプロンプトをLLMに渡し、回答を「生成」させるステップである。このように、特定のデータから文脈を検索することで、LLMは自身の訓練データだけに頼るのではなく、関連性の高い情報を使って応答を生成できるようになる。
一般的なRAGアプリケーションは、主に二つの主要な部分から成り立っている。一つは「インデックス作成(Indexing)」だ。これは、AIに参照させたいデータ(ドキュメントなど)を、AIが素早く検索できるように整理し、特別な形式で保存するプロセスである。もう一つは「検索と生成(Retrieval and Generation)」で、ユーザーが質問した際に、インデックス化されたデータの中から最も関連性の高い情報を見つけ出し、その情報をAIモデルに渡して回答を生成させる、RAG本来のワークフローを指す。
この記事では、このRAGの仕組みを使って、特定のドキュメントに基づいて回答を生成するシンプルなチャットボットを構築する具体的な方法が示されている。使用される主なツールは、AIアプリケーション構築フレームワークであるLangChain、Amazon Bedrockで利用できるAmazon Titan Embeddingモデル(テキストを数値データに変換)、Amazon Nova for Chatモデル(回答を生成するAIモデル)、そして埋め込みデータを効率的に保存・検索するためのベクトルデータベースであるChromaだ。
チャットボット構築の最初のフェーズは「インデックス作成」である。この段階では、AIが参照すべきドキュメントを準備する。具体的な手順は次の通りだ。まず、参照したいデータ源(この記事の例ではPDFファイル)をシステムに読み込む(ロード)。次に、大きなドキュメントを意味のある小さな塊(チャンク)に分割する(分割)。これは、RecursiveCharacterTextSplitterのようなツールを使って、約1000文字のチャンクに分割し、文脈が途切れないように少し重複させる工夫も行われる。最後に、分割されたテキストのチャンクを、AIが検索しやすい形式で保存する(保存)。この際、テキストはそのままではなく、「埋め込み(Embedding)」と呼ばれる数値のベクトルに変換される。埋め込みは、テキストの意味を数値で表現したもので、コンピュータがテキストの意味を理解し、似ているものを探し出すのに役立つ。Amazon Titan Embeddingモデルがこの変換を担い、変換された埋め込みはChromaというベクトルデータベースに格納される。このステップが完了すると、AIモデルが質問されたときに参照すべきドキュメントの情報が、検索可能な形で整頓され、データベースに格納された状態となる。
インデックス作成が完了したら、次にユーザーからの質問を受け取り、回答を生成する「検索と生成」のコア部分を構築する。まず、回答生成のためにAmazon Nova for Chatモデルを初期化する。これが、最終的にユーザーへの応答を作成するAIの「脳」となる。処理の途中で「質問」「検索された関連情報(コンテキスト)」「最終的な回答」といった情報を保持するための「状態(State)」も定義される。ユーザーが質問を入力すると、retrieve関数が動作し、質問内容に基づいてベクトルデータベース(Chroma)から最も関連性の高いドキュメントのチャンクを数点(この例では上位4つ)検索する。これは、質問とインデックス化されたドキュメントの埋め込みベクトルの類似度を計算することで行われる。そして、generate関数では、検索されたドキュメントの内容とユーザーの質問を組み合わせて、一つのプロンプトを作成する。このプロンプトには、システムに対する指示(システムプロンプト)も含まれる。この拡張されたプロンプトを初期化したAmazon Novaチャットモデルに渡し、回答を生成させる。もし関連情報が見つからなかった場合は、「回答できません」といったメッセージが返される。これらのステップ(情報検索と回答生成)を一連の流れとして実行できるように、LangChainのStateGraphという機能を使ってRAGのパイプラインが構築される。これにより、「ユーザーの質問を受け取る」→「関連情報を検索する」→「AIに回答を生成させる」という一連の処理が自動的に実行されるようになる。
最終的に、この一連のプロセスを通じて、ユーザーは質問を投入でき、システムはその質問に対する回答を、インデックス化されたドキュメントの内容に基づきAmazon Novaモデルが生成した形で提示する。このシステムを利用するには、Amazon Bedrockおよび関連するAmazon TitanとNovaモデルへのアクセス権限が必要となる。RAGは、AIを現実世界の具体的な用途に応用するための強力な手法であり、LLMの能力を最大限に引き出し、より正確で信頼性の高い情報提供を可能にする、システムエンジニアが理解しておくべき重要な技術である。