renue

ARTICLE

LangChainとは?使い方・RAG構築・LangGraphとの違いを解説

公開日: 2026/4/3

LangChainの仕組み・使い方・RAG構築方法・LangGraphとの違いを解説。

LangChainとは?

LangChainとは、GPT-4やClaudeなどの大規模言語モデル(LLM)を活用したアプリケーション開発を効率化するオープンソースフレームワークです。2022年にHarrison Chase氏によって開発され、GitHubのスター数は9万を超える最も注目されるAI開発ライブラリの一つです。

LangChainの最大の特徴は、LLMの呼び出しだけに留まらず、外部データとの連携・ツール実行・複数ステップのワークフロー構築まで一貫してサポートする点にあります。プロンプト管理・チェーン処理・エージェント制御・メモリ管理など、実用的なAIアプリ開発に必要な機能がモジュール化されており、これらを組み合わせることで複雑なAIシステムを迅速に構築できます。

LangChainが解決する課題

LLMを単体で呼び出すだけでは、以下のような課題があります。

  • 最新情報や社内ドキュメントなど、モデルの学習データ外の情報を参照できない
  • 複数のLLM呼び出しや外部ツール連携を管理するコードが複雑になる
  • 会話の文脈(メモリ)を適切に保持・管理する仕組みが必要になる
  • 検索・計算・APIコールなどのツールをLLMに使わせるための実装コストが高い

LangChainはこれらをすべて抽象化し、開発者がアプリのロジックに集中できる環境を提供します。

LangChainの主要コンポーネント

LangChainは複数のモジュールで構成されています。それぞれの役割を理解することで、目的に応じた適切な使い方ができます。

1. Models(モデル)

OpenAI・Anthropic・Google Geminiなど、さまざまなLLMプロバイダーへの統一インターフェースを提供します。プロバイダーを切り替えても、コードの大部分を変更せずに済むため、モデル選定の柔軟性が高まります。

2. Prompts(プロンプト)

プロンプトテンプレートを管理する仕組みです。変数の埋め込みや、Few-shotプロンプトの構造化など、再利用可能なプロンプト設計が可能になります。

3. Chains(チェーン)とLCEL

複数の処理ステップを連結する仕組みです。現在はLCEL(LangChain Expression Language)を使って、パイプ演算子(|)でコンポーネントをつなぐ宣言的な記述が主流となっています。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_template("{topic}について100字で説明してください")
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model | StrOutputParser()

result = chain.invoke({"topic": "機械学習"})
print(result)

4. Agents(エージェント)

LLM自身がどのツールをどの順番で使うかを判断しながら処理を進める仕組みです。ChainはあらかじめワークフローをコードとしてLLMに固定するのに対し、Agentは「次に何をするか」をLLMが動的に決定します。

5. Tools(ツール)

Agentが利用できる機能の単位です。Web検索・計算機・データベース検索・APIコールなど、LangChainには多数のビルトインツールが用意されており、カスタムツールの作成も容易です。

6. Memory(メモリ)

会話履歴を保持・参照する仕組みです。会話バッファメモリ・サマリーメモリ・ウィンドウメモリなど、用途に応じた種類があります。

7. Document Loaders・Text Splitters・Vector Stores

外部ドキュメントをLLMが扱える形式に変換するコンポーネント群です。RAG(Retrieval-Augmented Generation)構築の中核を担います。

LangChainのインストールと基本的な使い方

インストール

LangChainはpipで簡単にインストールできます。使用するLLMプロバイダーに応じて追加パッケージも必要です。

# 基本インストール
pip install langchain

# OpenAI利用の場合
pip install langchain-openai

# Anthropic(Claude)利用の場合
pip install langchain-anthropic

# RAGに必要なパッケージ
pip install langchain-community chromadb

基本的なLLM呼び出し

import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

os.environ["OPENAI_API_KEY"] = "your-api-key"

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
response = model.invoke([HumanMessage(content="LangChainとは何ですか?")])
print(response.content)

プロンプトテンプレートの活用

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたは{role}の専門家です。"),
    ("human", "{question}")
])

chain = prompt | model
response = chain.invoke({
    "role": "AI開発",
    "question": "RAGとファインチューニングの使い分けは?"
})
print(response.content)

RAG(Retrieval-Augmented Generation)の構築

RAGとは、LLMの回答を生成する前に外部ドキュメントから関連情報を検索し、その情報をコンテキストとして与えることで回答精度を高める手法です。社内ドキュメントQ&AシステムやナレッジベースチャットボットなどはRAGの代表的なユースケースです。

RAGの基本フロー

  1. ドキュメント読み込み:PDF・Word・Webページなどを読み込む(Document Loaders)
  2. テキスト分割:ドキュメントを適切なチャンクに分割する(Text Splitters)
  3. ベクトル化:テキストを数値ベクトルに変換する(Embeddings)
  4. ベクトルDB保存:ベクトルをデータベースに格納する(Vector Stores)
  5. 検索:クエリに類似したドキュメントを取得する(Retrievers)
  6. 回答生成:取得したコンテキストとともにLLMで回答を生成する

LangChainによるRAG実装例

from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 1. ドキュメント読み込み
loader = TextLoader("./company_docs.txt", encoding="utf-8")
documents = loader.load()

# 2. テキスト分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

# 3&4. ベクトル化 & ベクトルDB保存
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)

# 5. Retriever作成
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# 6. RAGチェーン構築
prompt = ChatPromptTemplate.from_template("""
以下のコンテキストを参考に質問に回答してください。
コンテキスト: {context}
質問: {question}
""")

model = ChatOpenAI(model="gpt-4o-mini")

def format_docs(docs):
    return "

".join(doc.page_content for doc in docs)

rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt | model | StrOutputParser()
)

answer = rag_chain.invoke("会社の有給休暇ポリシーは?")
print(answer)

RAG品質向上のポイント

サブクエリを生成するアプローチがLangGraphとの組み合わせで有効であり、基本的なRAGを超えた高度な検索戦略が注目されています。具体的には以下の手法が効果的です。

  • チャンクサイズの最適化:コンテンツの性質に応じてchunk_sizeとchunk_overlapを調整する
  • Re-ranking:検索結果を関連度で並び替えて精度を向上させる
  • Hybrid Search:ベクトル検索とキーワード検索を組み合わせる
  • Query Expansion:クエリを複数のサブクエリに分解して幅広く検索する
  • Contextual Compression:取得したドキュメントから関連部分のみを抽出する

LangChainとLangGraphの違い

LangGraphはLangChainチームが開発したグラフベースのオーケストレーションフレームワークで、LangChainの拡張として位置づけられます。両者の違いを理解することで、適切な技術選定ができます。

アーキテクチャの違い

項目LangChainLangGraph
処理構造線形チェーン(DAG)グラフ・ステートマシン
状態管理限定的明示的な状態管理
ループ・分岐不可(基本的に一方向)ループ・条件分岐が可能
Human-in-the-loop対応困難ネイティブサポート
デバッグ性中程度高い(状態追跡が容易)
学習曲線緩やか急(グラフの概念理解が必要)
適した用途RAG・単純なチャットボット複雑なエージェント・マルチエージェント

LangGraphのシンプルな例

from langgraph.graph import StateGraph, END
from typing import TypedDict

class AgentState(TypedDict):
    messages: list
    step: int

def process_node(state: AgentState) -> AgentState:
    state["step"] += 1
    return state

def should_continue(state: AgentState) -> str:
    if state["step"] >= 3:
        return END
    return "process"

workflow = StateGraph(AgentState)
workflow.add_node("process", process_node)
workflow.set_entry_point("process")
workflow.add_conditional_edges("process", should_continue)

app = workflow.compile()
result = app.invoke({"messages": [], "step": 0})

どちらを選ぶべきか

シンプルなRAGシステムや一方向のパイプラインであればLangChainのみで十分です。一方、エージェントが状態を保ちながら複数ステップを繰り返す・人間の承認を挟む・複数エージェントが協調するといった複雑なシステムにはLangGraphが適しています。2026年時点では、本番環境レベルのエージェントシステムはLangGraphで構築するケースが増えています。

LangChainの実践的なユースケース

1. 社内ドキュメント検索システム

社内マニュアル・規程・過去の提案書などをRAGで検索可能にするシステムです。新入社員のオンボーディングや担当者の情報収集にかかる時間を大幅に削減できます。

2. カスタマーサポートボット

製品マニュアルやFAQをベクトルDBに格納し、ユーザーの質問に対して関連情報を引き出しながら回答するボットです。LLMの幻覚リスクを抑えつつ、正確な製品情報に基づいた回答が可能です。

3. コード生成・レビュー支援

社内コーディング規約や過去のコードベースをコンテキストとして与え、一貫性のあるコード生成や自動レビューを実現します。

4. 議事録・ドキュメント自動生成

会議の文字起こしや録音データから構造化された議事録を自動生成します。LangChainのチェーン処理で要約・アクションアイテム抽出・議事録フォーマット化を連続実行できます。

5. マルチエージェントシステム

調査エージェント・執筆エージェント・レビューエージェントなど、役割の異なるエージェントが協調して複雑なタスクを処理するシステムです。LangGraphと組み合わせることで実現しやすくなります。

LangChainエコシステム:関連ツール

LangSmith

LangChainアプリケーションのデバッグ・テスト・監視・評価を行うプラットフォームです。各ステップの入出力・レイテンシ・トークン消費量をトレースでき、本番運用には欠かせないツールです。

LangServe

LangChainのチェーンやエージェントをREST APIとして簡単にデプロイするためのライブラリです。FastAPIベースで構築されており、自動的にSwagger UIも生成されます。

LangFlow

LangChainコンポーネントをGUIのドラッグ&ドロップで組み合わせてワークフローを構築できるローコードツールです。プロトタイピングや非エンジニアとの協業に活用できます。

LangChain導入時の注意点

  • バージョン管理:LangChainは活発に開発されており、バージョン間でAPIが変わることがある。本番環境ではバージョンを固定することを推奨
  • オーバーエンジニアリングに注意:シンプルなLLM呼び出しにLangChainは不要な場合もある。複雑さに応じて採用を判断する
  • コスト管理:チェーンが長くなるほどトークン消費が増える。LangSmithでトークン使用量を監視することが重要
  • セキュリティ:外部ツールやAPIと連携する際は、権限管理・入力バリデーション・機密情報の取り扱いに注意が必要
  • ハルシネーション対策:RAGを使っても完全にハルシネーションをなくせるわけではない。重要な情報は出典確認の仕組みを設ける

AIを活用した業務改善・システム構築はRenueにご相談ください

LangChainやLangGraphを活用したRAGシステム・AIエージェント・社内ナレッジ検索など、実用的なAI導入を支援します。技術選定から設計・実装・運用まで一貫してサポートします。

  • 社内ドキュメント検索・Q&Aシステムの構築
  • 業務自動化エージェントの設計・開発
  • LLMを活用したデータ分析・レポート生成
  • 既存システムへのAI機能追加
無料相談はこちら

よくある質問(FAQ)

Q1. LangChainは無料で使えますか?

LangChain自体はオープンソース(MIT License)で無料で利用できます。ただし、OpenAIやAnthropicなどのLLMプロバイダーのAPIは有料です。また、LangSmithには無料プランと有料プランがあります。

Q2. LangChainを使うのにどのくらいのPython知識が必要ですか?

Pythonの基本文法(変数・関数・クラス・リスト操作)を理解していれば始められます。LangChainのドキュメントは豊富で、公式チュートリアルも充実しています。LLMのAPIを直接呼び出す経験があると、LangChainの抽象化がより理解しやすくなります。

Q3. LangChainとOpenAI APIを直接使う場合の違いは何ですか?

OpenAI APIを直接使う場合は、LLMの呼び出し・プロンプト管理・会話履歴の管理をすべて自前で実装する必要があります。LangChainを使うと、これらの処理が抽象化されており、特にRAGやエージェント・複数ステップのワークフロー構築が大幅に楽になります。一方、シンプルな1回のLLM呼び出しにはLangChainを使わない方がコードが簡潔な場合もあります。

Q4. RAGとファインチューニングはどう使い分けるべきですか?

RAGは最新情報・社内固有情報・頻繁に更新されるデータを参照させたい場合に適しています。データの追加・更新が容易で、出典の明示が可能です。ファインチューニングは特定のスタイル・フォーマット・ドメイン特有の表現をモデルに学習させたい場合に適しており、推論時のコンテキスト長を節約できます。多くのケースではRAGが最初の選択肢となります。

Q5. LangChainとLangGraphは同時に使えますか?

はい、組み合わせて使うことができます。実際、LangGraphはLangChainの上に構築されており、LangChainのコンポーネント(プロンプト・モデル・ツール等)をLangGraphのノード内で利用できます。RAGの検索・回答生成はLangChainで実装し、全体のワークフロー制御はLangGraphで管理するというアーキテクチャが一般的です。

Q6. LangChainは本番環境での利用に向いていますか?

はい、適切な設計があれば本番環境でも利用できます。本番運用にはLangSmithによるモニタリング・エラーハンドリングの実装・レスポンスキャッシュの活用・適切なバージョン固定が重要です。2026年現在、多くの企業がLangChain/LangGraphを用いた本番AIシステムを運用しています。