AIに質問して「なんか違うな…」と思った経験はありませんか?それは、AIが学習したデータだけでは、最新の情報やあなたの会社の内部情報を持っていないからです。この問題を解決するのが、RAG(Retrieval-Augmented Generation)という技術です。
この記事では、RAGがどのように機能するのか、実際にどのようなステップでRAGを構築していくのかを、3つのプロセスに分けて解説します。
プロセス1:情報を集めて整理する「データの準備」
RAGの最初のステップは、AIに教えたい「あなたの情報」を準備することです。これは、あなたがAIに回答させたいドキュメント、マニュアル、FAQなどを集めて整理する作業です。
- データの分割(Chunking): あなたのドキュメントを、意味が通じる小さな塊(チャンク)に分割します。例えば、一つの長大なマニュアルを、章や段落ごとに区切るイメージです。この分割が適切でないと、必要な情報がうまく見つけられなくなります。
- ベクトルの生成(Embedding): 分割したテキストのチャンクを、ベクトルという数値のリストに変換します。このベクトルは、テキストの意味を数学的に表現したもので、意味が似ているテキストはベクトル空間内で近い場所に配置されます。この変換には、OpenAIの
text-embedding-3-small
のような「埋め込みモデル」を使います。 - データベースへの保存: 生成したベクトルを、ベクトルデータベースと呼ばれる特殊なデータベースに保存します。このデータベースは、似た意味を持つベクトルを高速に見つけ出すことに特化しています。ChromaDBやPineconeといったサービスがよく使われます。
プロセス2:システムを組み立てる「パイプラインの構築」
情報を準備できたら、次にその情報を使ってAIに回答させる仕組み(パイプライン)を組み立てます。
- ユーザーからの質問を受け取る: ユーザーが「〇〇について教えて」と質問を入力します。
- 質問をベクトル化: 質問文を、先ほどチャンクを変換したのと同じ埋め込みモデルを使ってベクトルに変換します。
- 関連情報を検索: 変換した質問のベクトルをベクトルデータベースに送り、最も似ている(関連性の高い)チャンクを複数見つけ出します。これが「Retrieval(検索)」のプロセスです。
- AIに情報を渡す: 取得した関連情報とユーザーの元の質問を、セットで生成AI(LLM)に渡します。
- 回答を生成: LLMは、渡された情報と質問を基に、より正確で根拠のある回答を生成します。これが「Generation(生成)」のプロセスです。
この一連の流れをプログラムで実装するには、LangChainやLlamaIndexといったフレームワークが非常に便利です。これらのツールを使うと、複雑なパイプラインを簡単に組み立てることができます。
プロセス3:精度を高める「チューニングと評価」
RAGは一度作ったら終わりではありません。より良い回答を生成するためには、継続的な改善が必要です。
- プロンプトの調整: AIに送る指示文(プロンプト)を工夫します。「以下の情報を参考にして、簡潔に回答してください」といった指示を加えることで、回答の質をコントロールできます。
- チャンク分割の見直し: 質問に対する回答が不正確な場合、チャンクの分割方法が適切でない可能性があります。より最適な分割方法を試行錯誤し、精度を改善します。
- 評価と改善: RAGが生成した回答の正確性を評価し、問題点があればパイプラインの各ステップを見直します。例えば、「ハルシネーション」(AIが嘘の情報を生成すること)を減らすための工夫を凝らします。
これらのプロセス全体を経験することが、RAGエンジニアとして求められる実務能力です。単にAIを呼び出すだけでなく、その前後のデータ処理、システム設計、そして精度を改善するプロセス全体に携わることが重要です。