この記事では、LangChainを使った代表的な応用手法「RAG(Retrieval Augmented Generation:検索拡張生成)」について解説します。
RAGは「社内文書を理解できるAI」「ナレッジベースを使った質問応答システム」を実現する中核技術であり、生成AIの実務利用を支える重要な仕組みです。
まずはかんたんに:RAGの考え方を直感的に理解する
RAGの基本的な考え方はシンプルです。
「AIが答える前に、関連する情報を検索してから考えさせる」。これだけです。
たとえば、あなたがAIに「自社製品の返品ポリシーを教えて」と質問するとします。
ChatGPTなどの汎用AIは一般知識は得意ですが、社内ルールまでは知りません。
しかし、LangChainとRAGを組み合わせると、AIは次のような流れで回答できます。
- 質問内容をベクトル検索で解析
- 社内文書データベースから関連箇所を抽出
- 抽出したテキストをプロンプトに埋め込み
- AIがそれを参考に回答を生成
つまり、RAGは「AIの知識を社内データで補う技術」なのです。
人間で例えるなら、AIに“辞書”や“マニュアル”を見せながら答えさせるようなイメージです。
もう少し深く知る:RAGの仕組みとLangChainでの構成
RAGシステムをLangChainで構築するとき、主に以下の4つの要素が関わります。
1. データの準備(Document Loaders)
まず、AIが参照できる「知識源」を用意します。
LangChainには PyPDFLoader
や TextLoader
、UnstructuredFileLoader
などがあり、PDF・Markdown・HTMLなど様々な形式を取り込めます。
このステップでは、どんな情報をAIに読ませるかが最も重要です。
ノイズの多い文書や古いバージョンの資料を含むと、誤回答の原因になります。
2. ベクトル化とインデックス化(Embeddings & Vector Stores)
文書を数値ベクトルに変換し、検索可能な形に保存します。
LangChainでは OpenAIEmbeddings
や HuggingFaceEmbeddings
を利用し、保存先として Chroma
、FAISS
、Pinecone
などを選択します。
これにより「意味が似ている文書」を高速に検索できるようになります。
単語の一致ではなく“意味の近さ”で探せるのがRAGの強みです。
3. 検索(Retrieval)
ユーザーが質問をすると、システムは同じくその質問をベクトル化し、ベクトルDBから類似する文書を取得します。
LangChainでは RetrievalQA
クラスを使うと、この「検索+生成」の流れを簡単に構築できます。
4. 回答生成(Augmented Generation)
取得した文書をプロンプトの一部としてAIに渡します。
つまり「以下の情報を参考にして質問に答えてください」と明示するわけです。
これにより、AIは自社の文書を参照しながら、より正確な回答を返すことができます。
まとめると、RAGのデータフローは次のようになります:
質問 → ベクトル検索 → 関連文書取得 → AIが文書+質問を統合して回答
LangChainはこの一連の流れを「Chain(鎖)」として構成し、柔軟に組み合わせ・拡張できる点が強みです。
使用例:LangChainでRAGを構築するPythonコード
以下は、LangChainを使ってRAGを実装する最小構成サンプルです。
# LangChainによるRAG構築サンプル
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# 1. 文書をロード
loader = TextLoader("manual.txt", encoding="utf-8")
documents = loader.load()
# 2. 文書を分割(長文は小さくチャンク化)
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=100)
docs = text_splitter.split_documents(documents)
# 3. ベクトル化+保存
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)
# 4. 検索+生成のRAGチェーン構築
qa = RetrievalQA.from_chain_type(
llm=OpenAI(model_name="gpt-4-turbo"),
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# 5. 実行
query = "返品ポリシーを教えて"
result = qa.run(query)
print(result)
このコードを実行すると、manual.txt
の内容を元にAIが回答を生成します。
例えば、FAQ・製品仕様・契約書などをまとめておけば、自動応答やサポート業務を強化できます。
注意点:
- 検索精度は「分割サイズ」や「Embeddingモデル」に大きく依存します。
- ベクトルDBの更新・削除機能を活用して、最新情報を保つことが大切です。
- 生成結果には常に検証プロセスを設けましょう(AIの“思い込み”対策)。
まとめ:RAGは「AIがデータを活用するための知的検索システム」
RAGは、LLMを単なる会話エンジンから「知識を持つアシスタント」へ進化させる技術です。
LangChainを使えば、このRAGの流れを柔軟に構築し、自社データや顧客情報を活用するAIシステムを作れます。
初心者へのアドバイス:
- まずは小規模なテキストデータでRAGの動作を体験する
- Chromaを使えばローカル環境でも簡単に試せる
中級者へのヒント:
- 複数のデータソース(PDF・DB・API)を統合する
- LangSmithを使ってRAGの動作ログを可視化する
- RAG+エージェント構成で「動くAIリサーチャー」を構築する
LangChainのRAGは、単なる検索機能ではなく「AIの思考を補助するデータ基盤」です。
これを使いこなせば、AIが“自社の知識を理解して答える時代”を実現できます。