近年、生成系の人工知能と構造化された企業データの統合は、ソフトウェアエンジニアリングで最も有望な分野の一つになっています。本プロジェクトは — Full Cycle の「AI を用いたソフトウェアエンジニアリング MBA」の一環として開発されたものであり — Python、LangChain、そして pgVector 拡張機能を備えた PostgreSQL を用いた RAG(Retrieval-Augmented Generation)の実践的なアーキテクチャを紹介します。
RAG(Retrieval-Augmented Generation)の概念
RAG は 情報検索(retrieval) と 自然言語生成(generation) を組み合わせたアプローチです。モデルに埋め込まれた知識だけに依存する純粋な AI とは異なり、RAG は外部ソース(データベース、PDF、企業文書)から情報を検索し、回答を生成する前にそれをコンテキストに挿入します。これにより、正確性、トレーサビリティ、そしてデータの継続的な更新が保証されます。
アーキテクチャと主要コンポーネント
アーキテクチャはモジュール化され拡張可能になるよう設計されており、3 つの主要レイヤーで構成されています:
- 取り込み(Ingestion): PDF の内容を読み込み、チャンク(1000 文字、オーバーラップ 150)に分割し、HuggingFace、OpenAI、Gemini といったプロバイダーを使って埋め込み(embeddings)を生成します。
- 保存(Storage): 生成されたベクトルを PostgreSQL に pgVector 拡張機能を使って保存し、ベクトル距離に基づく類似度検索を可能にします。
- 検索と回答(Search & Answer): ベクトルデータベースに問い合わせ、最も関連性の高いコンテキストを取得して言語モデルに送信し、見つかった内容のみに基づいた回答を生成します。
├── docker-compose.yml
├── requirements.txt
├── .env.example
├── document.pdf
└── src/
├── ingest.py # PDF の取り込みとベクトル化のパイプライン
├── search.py # セマンティック検索とコンテキストの構築
└── chat.py # ルールベースのフォールバックを備えた対話型 CLI取り込みパイプライン
取り込みの段階は、テキストコンテンツを数値ベクトル表現に変換する役割を担います。これは、意味的な意味を高次元空間にマッピングする埋め込み(embeddings)を介して行われます。システムは 3 つのプロバイダーをサポートしています:
- 🧠 HuggingFace(ローカル): all-MiniLM-L6-v2 モデル。API に接続できない環境に最適です。
- ☁️ OpenAI(text-embedding-3-small): 高速で、コストパフォーマンスに最適化されています。
- ⚡ Gemini(models/embedding-001): Generative AI エコシステムと直接統合できる Google の代替手段です。
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_postgres import PGVector
embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2')
PGVector.from_documents(
documents=chunks,
embedding=embeddings,
connection=engine,
collection_name='pdf_chunks'
)セマンティック検索と回答の生成
クエリの段階では、システムは質問を受け取り、その埋め込みを生成して、ベクトルデータベースで類似度検索を実行します。最も関連性の高い 10 個のチャンクが連結され、回答のコンテキストを形成するために使用されます。LLM モデルが利用できない場合、システムは明示的なパターン(金額や企業名など)を探すルールベースのフォールバックを適用します。
context = build_context(results)
chain = prompt | llm | StrOutputParser()
response = chain.invoke({"contexto": context, "pergunta": question})他のプロジェクトでの実践的な応用
このアーキテクチャは、さまざまな企業のシナリオや SaaS 製品で再利用できます。実際の応用例には次のようなものがあります:
- 📚 社内サポートアシスタント: 技術マニュアルや社内ポリシーに基づいて疑問に答えられるボット。
- 🏥 健康と栄養: 医療レポートや食品データベースと統合し、パーソナライズされた推奨を行う(MovePro プロジェクトのように)。
- 🏢 コンプライアンスと法務: 法的文書のセマンティック検索で、デューデリジェンスや監査を加速。
- 🛒 E コマース: 説明文やカタログに基づいた、文脈に応じた製品レコメンデーション。
- 📊 データインテリジェンス: ETL パイプラインと組み合わせて、非構造化データの分析や SQL + 埋め込みのハイブリッドクエリを実現。
学んだ教訓と次のステップ
本プロジェクトは、生成 AI と従来のリレーショナルデータベースを組み合わせる力を示しました。主な教訓としては:ベクトルの次元間の一貫性を保つこと、オフライン環境のために論理的なフォールバックを使うこと、そしてプロバイダーの切り替えを容易にするためにコードをモジュール化することです。自然な発展として、次のステップはこのアーキテクチャを FastAPI で REST API として公開し、Next.js でインタラクティブな Web インターフェースを構築することです。
LangChain、PostgreSQL、pgVector を用いた RAG アーキテクチャLangChain を pgVector と統合することは、文脈に応じた AI をモダンな企業アプリケーションにもたらす、最もエレガントでスケーラブルな方法の一つです。データをインテリジェンスに変える堅実な道筋です。
