FastAPI × MySQL × OpenAI APIによるRAGシステムを構築
今回は、Python / FastAPIをベースに、MySQLとOpenAI APIを組み合わせたRAG(Retrieval-Augmented Generation:検索拡張生成)環境を構築しました。
開発している「AIドキュメント生成システム」では、単純に生成AIへ質問を送信するだけではなく、社内文書、設計書、仕様書、既存システムのソースコードなどを登録し、その内容を検索したうえでAIの回答や各種ドキュメント生成に利用できる仕組みを実装しています。
RAGとは?
RAG(Retrieval-Augmented Generation)は、日本語では「検索拡張生成」と呼ばれます。
通常の生成AIは、モデルが学習した知識やユーザーが入力したプロンプトをもとに回答を生成します。
一方、RAGでは、あらかじめ登録した文書などから質問に関連する情報を検索し、その情報をコンテキストとして生成AIへ渡します。
これにより、生成AIがもともと持っていない企業固有の情報、システム固有の仕様、社内文書、既存プログラムなどを活用した回答生成が可能になります。
今回構築したシステム
今回のRAGシステムでは、主に以下の技術を使用しています。
| 分類 | 使用技術 |
|---|---|
| 開発言語 | Python |
| Web/APIフレームワーク | FastAPI |
| データベース | MySQL |
| AI | OpenAI API |
| ベクトル化 | Embedding |
| Webサーバー | Nginx |
| アプリケーションサーバー | Gunicorn / Uvicorn |
| OS | Ubuntu |
| フロントエンド | HTML / Jinja2 / Bootstrap |
Webアプリケーションとして構築しているため、ブラウザから文書やソースコードの登録、検索、AIへの質問、ドキュメント生成などを行えるようにしています。
RAGの基本的な処理フロー
今回実装したRAGの基本的な流れは次のようになります。

このように、「検索」と「生成AI」を組み合わせているところがRAGの大きな特徴です。
1. 文書・プログラムを登録
最初に、AIに参照させたい文書や既存システムのソースコードをシステムへ登録します。
例えば、
- 要件定義書
- 基本設計書
- 詳細設計書
- 運用手順書
- 業務マニュアル
- Pythonソースコード
- C#ソースコード
- その他の社内資料
などをRAGの情報源として利用できます。
2. テキストをチャンクに分割
大きな文書をそのままAIへ渡すのではなく、一定サイズの**チャンク(Chunk)**に分割します。
例えば、
1つの設計書
↓
Chunk 1
Chunk 2
Chunk 3
Chunk 4
……
という形です。
文書を適切な単位に分割することで、ユーザーの質問に関係する部分だけを効率よく検索できるようになります。
3. Embeddingによるベクトル化
分割したチャンクをEmbeddingモデルを利用してベクトル化します。
Embeddingでは、文章の意味を数値の集合として表現します。
単純なキーワード一致ではなく、文章の「意味的な近さ」を利用して検索できることが特徴です。
例えば、
「ユーザー認証の処理を教えてください」
という質問に対して、完全に同じ文字列が文書内に存在しなくても、ログイン処理や認証処理など、意味的に関連性の高い情報を検索対象にできます。
4. ベクトル情報をMySQLへ保存
生成したベクトル情報と元のテキスト情報をMySQLへ登録します。
これにより、
元文書 → チャンク → ベクトル情報
という関係を保持し、後からユーザーの質問に関連する情報を検索できるようにしています。
5. 質問に関連する情報を検索
ユーザーが質問すると、その質問についてもEmbeddingを実行します。
そして、登録済みのベクトル情報と比較し、質問と意味的に近いチャンクを抽出します。
ここがRAGにおける「Retrieval(検索)」の部分になります。
6. OpenAI APIへコンテキストを渡す
検索した情報をそのまま回答として表示するのではありません。
検索結果から必要な情報をコンテキストとしてまとめ、
ユーザーの質問 + RAGで検索した関連情報
をOpenAI APIへ送信します。
生成AIは、このコンテキストを参考に最終的な回答を生成します。
この仕組みにより、一般的なAIの知識だけでは回答することが難しい、システム固有・企業固有の情報についても回答できるようになります。
AI質問だけではなくドキュメント生成にも利用
今回開発したシステムでは、RAGを単純な「社内AI質問システム」として利用するだけではありません。
登録した設計情報やソースコードを利用して、
- システム仕様書
- 詳細設計書
- プログラム仕様書
- 処理フロー
- クラス図
- その他の設計ドキュメント
などを生成する機能にも利用しています。
つまり、
既存資産をRAGへ登録 → 必要な情報を検索 → 生成AIでドキュメント化
という流れです。
既存システムのソースコードから設計情報を抽出するような、リバースエンジニアリング用途にも応用できます。
RAGを導入するメリット
今回実際にシステムを構築して感じたRAGのメリットは、生成AIを企業・システム固有の情報へ拡張できることです。
特に、
「AIが知っていることを質問する」
という使い方から、
「自社が持っている情報をAIに活用させる」
という使い方へ発展させられる点が重要だと考えています。
既存の文書やソースコードを生成AIと組み合わせることで、情報検索だけでなく、ドキュメント作成、システム解析、ナレッジ活用などへの展開が可能になります。
今後の展開
今後はRAGの検索精度をさらに向上させながら、
- チャンク分割方法の最適化
- 検索精度の改善
- コンテキスト生成方法の改善
- RAGデータの管理機能強化
- セキュリティ対策
- ログ・監査機能の強化
- AIエージェントへの発展
なども検討していきたいと思います。
AIドキュメント生成システムのプレゼン映像です。参考にご覧ください。
共有する:
コメントを送信