AI

LangChainの応用例:RAG(Retrieval Augmented Generation)

この記事では、LangChainを使った代表的な応用手法「RAG(Retrieval Augmented Generation:検索拡張生成)」について解説します。
RAGは「社内文書を理解できるAI」「ナレッジベースを使った質問応答システム」を実現する中核技術であり、生成AIの実務利用を支える重要な仕組みです。

まずはかんたんに:RAGの考え方を直感的に理解する

RAGの基本的な考え方はシンプルです。
「AIが答える前に、関連する情報を検索してから考えさせる」。これだけです。

たとえば、あなたがAIに「自社製品の返品ポリシーを教えて」と質問するとします。
ChatGPTなどの汎用AIは一般知識は得意ですが、社内ルールまでは知りません。
しかし、LangChainとRAGを組み合わせると、AIは次のような流れで回答できます。

  1. 質問内容をベクトル検索で解析
  2. 社内文書データベースから関連箇所を抽出
  3. 抽出したテキストをプロンプトに埋め込み
  4. AIがそれを参考に回答を生成

つまり、RAGは「AIの知識を社内データで補う技術」なのです。
人間で例えるなら、AIに“辞書”や“マニュアル”を見せながら答えさせるようなイメージです。

もう少し深く知る:RAGの仕組みとLangChainでの構成

RAGシステムをLangChainで構築するとき、主に以下の4つの要素が関わります。

1. データの準備(Document Loaders)

まず、AIが参照できる「知識源」を用意します。
LangChainには PyPDFLoaderTextLoaderUnstructuredFileLoader などがあり、PDF・Markdown・HTMLなど様々な形式を取り込めます。

このステップでは、どんな情報をAIに読ませるかが最も重要です。
ノイズの多い文書や古いバージョンの資料を含むと、誤回答の原因になります。

2. ベクトル化とインデックス化(Embeddings & Vector Stores)

文書を数値ベクトルに変換し、検索可能な形に保存します。
LangChainでは OpenAIEmbeddingsHuggingFaceEmbeddings を利用し、保存先として ChromaFAISSPinecone などを選択します。

これにより「意味が似ている文書」を高速に検索できるようになります。
単語の一致ではなく“意味の近さ”で探せるのがRAGの強みです。

3. 検索(Retrieval)

ユーザーが質問をすると、システムは同じくその質問をベクトル化し、ベクトルDBから類似する文書を取得します。
LangChainでは RetrievalQA クラスを使うと、この「検索+生成」の流れを簡単に構築できます。

4. 回答生成(Augmented Generation)

取得した文書をプロンプトの一部としてAIに渡します。
つまり「以下の情報を参考にして質問に答えてください」と明示するわけです。
これにより、AIは自社の文書を参照しながら、より正確な回答を返すことができます。

まとめると、RAGのデータフローは次のようになります:

質問 → ベクトル検索 → 関連文書取得 → AIが文書+質問を統合して回答

LangChainはこの一連の流れを「Chain(鎖)」として構成し、柔軟に組み合わせ・拡張できる点が強みです。

使用例:LangChainでRAGを構築するPythonコード

以下は、LangChainを使ってRAGを実装する最小構成サンプルです。

Python

# 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が“自社の知識を理解して答える時代”を実現できます。