プログラミング・スキルアップ

LangChain入門2026|RAG・Agent実装の最短ルート

読了時間: 約17分

PythonでAIアプリを作ろうとして最初にぶつかる壁がある。OpenAI APIを直接叩くだけなら簡単だが、「検索結果を参照して回答させたい」「外部ツールを呼び出したい」となった途端、コードが爆発的に複雑になる。

LangChainはその複雑さを吸収するフレームワークだ。2022年10月の公開以来、GitHubスター数は10万超。PythonでのAIアプリ開発における事実上の標準になっている。

この記事では、LangChainのインストールから、RAG(検索拡張生成)やAIエージェントの実装までをコード付きで一気に進める。Python 3.10以上が動く環境があれば、1時間で動くものが作れるはずだ。

1. LangChainとは何か|なぜ「AI開発の標準」になったのか

LLM(大規模言語モデル)を組み込んだアプリを開発するためのPython/TypeScriptフレームワーク。名前の由来は「Language(言語モデル)」と「Chain(処理の連鎖)」。ChatGPTの登場より1か月前、2022年10月にリリースされた。

なぜここまで普及したのか。理由は明快で、LLM単体では解決できない問題を標準化された方法で解決できるから。具体的には以下の3つ。

  • RAG: 外部データを検索してLLMに渡す仕組み。ハルシネーション対策の定番
  • Agent: LLMが自律的にツール(Web検索、DB、APIなど)を呼び出す仕組み
  • Chain: 複数の処理をパイプラインでつなぐ仕組み。プロンプト→LLM→パーサーを一連の流れに

OpenAI APIを直接使う場合、RAGを実装するだけで「文書の分割→ベクトル化→保存→検索→プロンプト挿入→生成」の全工程を自前で書く必要がある。このフレームワークなら数十行で済む。実際に両方のアプローチで書き比べてみたが、コード量は5分の1以下になった。

ただし正直なところ、「抽象化が多すぎる」という批判は根強い。筆者自身もv0.1時代に「ChainがChainを呼ぶ入れ子構造」で3時間デバッグした経験がある。v0.3で大幅にシンプル化されたとはいえ、内部構造を理解せずにコピペするとハマる。この記事ではコードの意味を一つずつ追いながら進める。

2. LangChain・LangGraph・LangSmithの関係を整理する

エコシステムは名前が似たプロジェクトが複数あって混乱しやすい。「LangGraphって何が違うの?」という質問はStack Overflowでも頻出。ここで整理しておく。

プロジェクト役割いつ使う?
LangChainLLMアプリ開発のコアフレームワークRAG・Chain・基本的なAgent構築
LangGraphマルチステップのAIエージェント構築複雑なエージェント(状態管理・条件分岐)
LangSmithトレーシング・評価・デバッグ本番運用時のモニタリング・品質管理
LangServeLangChainアプリのAPI化作ったChainをREST APIとして公開

初学者がまず触るべきはLangChain本体だけ。LangGraphはエージェントが複雑になってから、LangSmithは本番デプロイ後に入れればいい。

AIエージェントの概念全体を把握したいなら「AIエージェント完全ガイド2026」が参考になる。

3. インストールと環境構築(5分)

Python 3.10以上が必要。仮想環境を作ってからインストールする。

# 仮想環境の作成
python3 -m venv .venv
source .venv/bin/activate

# LangChainのインストール
pip install -U langchain langchain-openai langchain-community

# RAGに必要なパッケージ
pip install langchain-text-splitters faiss-cpu bs4

OpenAI APIキーを環境変数に設定する。

export OPENAI_API_KEY="sk-your-api-key-here"

OpenAI以外のモデルも使える。Claude(Anthropic)を使うならlangchain-anthropic、Gemini(Google)ならlangchain-google-genaiをインストールする。

APIコストを抑えるコツ

開発中はgpt-4o-miniを使うこと。GPT-4oの1/10以下の料金で、テストには十分な精度がある。本番環境だけGPT-4oやClaude Opus 4.6に切り替える、という運用がコスパ最強。

Pythonの基礎からやりたい場合は「Python独学ロードマップ2026」を先に読んでほしい。

4. 最初のChainを作る|LCEL入門

v0.3で導入されたLCEL(LangChain Expression Language)が、このフレームワークの心臓部。パイプ演算子|で処理をつなぐ記法で、Unixのパイプと同じ発想だと思えばいい。初めて見たとき「Pythonでこんな書き方できるのか」と驚いた。

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

# 1. プロンプトテンプレート
prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたはPythonの専門家です。簡潔に回答してください。"),
    ("human", "{question}")
])

# 2. LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 3. 出力パーサー
parser = StrOutputParser()

# 4. LCELでChainを構築
chain = prompt | llm | parser

# 5. 実行
result = chain.invoke({"question": "リスト内包表記とmap関数、どちらが速い?"})
print(result)

prompt | llm | parserの3つをパイプでつなぐだけ。プロンプトに変数を埋め込み、LLMに送り、出力をテキストとして受け取る。この「テンプレート→モデル→パーサー」がLangChainの最小構成だ。

LCELの利点はストリーミング対応が組み込みで付いてくること。chain.invoke()chain.stream()に変えるだけで、トークン単位でリアルタイム出力される。ChatGPTのようなUXをそのまま再現できる。

# ストリーミング出力
for chunk in chain.stream({"question": "FastAPIの非同期処理を説明して"}):
    print(chunk, end="", flush=True)

ここは見落としがちだが、LCELで組んだChainは自動でRunnableインターフェースを実装する。つまりinvokestreambatchainvoke(非同期)が全て使える。別途コードを書く必要がない。

5. RAGを実装する|社内文書検索チャットボット

RAG(Retrieval-Augmented Generation)は、外部データを検索してLLMに渡すことでハルシネーションを抑える手法。このフレームワークが最も得意とする領域で、求人票でも「RAG実装経験」が頻繁に求められている。

5-1. 全体の流れ

ドキュメント読み込み → テキスト分割 → ベクトル化 → 保存
                                                    ↓
質問 → ベクトル検索 → 関連チャンクを取得 → プロンプトに挿入 → LLM回答

5-2. 実装コード

from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

# 1. ドキュメント読み込み(WebページをソースにするRAG)
loader = WebBaseLoader("https://docs.python.org/3/tutorial/classes.html")
docs = loader.load()

# 2. テキスト分割
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
chunks = splitter.split_documents(docs)

# 3. ベクトルストアに保存
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)

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

# 5. RAG用プロンプト
rag_prompt = ChatPromptTemplate.from_messages([
    ("system", """以下のコンテキストに基づいて質問に回答してください。
コンテキストに含まれない情報は「わかりません」と回答してください。

コンテキスト:
{context}"""),
    ("human", "{question}")
])

# 6. RAG Chainを構築
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | rag_prompt
    | ChatOpenAI(model="gpt-4o-mini")
    | StrOutputParser()
)

# 7. 実行
answer = rag_chain.invoke("Pythonのクラスで__init__メソッドの役割は?")
print(answer)

このコードでやっていることを分解すると、WebページをLangChainのDocumentとして読み込み、1000文字単位に分割し、OpenAIのEmbeddingsでベクトル化してFAISS(Facebook AI Similarity Search)に保存。質問が来たら類似度の高い3チャンクを検索し、プロンプトに挿入してLLMが回答する、という流れだ。

筆者も最初はチャンクサイズの設定で悩んだが、1000文字・オーバーラップ200文字が多くのケースで安定する。技術文書なら500文字に縮めたほうが精度が上がることもある。

FAISSとChromaの使い分け

ローカル開発ではFAISS(インメモリ、高速)が手軽。本番で永続化が必要ならChromaDBやQdrantを検討するといい。LangChainはベクトルストアの差し替えが1行で済むので、最初はFAISSで始めて問題ない。

プロンプトエンジニアリングの基礎を押さえたいなら「プロンプトエンジニアリング入門」も参照してほしい。RAGの精度はプロンプト設計で大きく変わる。

6. AI Agentを作る|ツール呼び出しの基礎

Agentは、LLMが「次に何をすべきか」を自律的に判断し、外部ツールを呼び出す仕組み。検索するだけでなく、計算し、APIを叩き、ファイルを読む。1ターンで完結しない「行動するLLM」だ。

from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate

# 1. ツールを定義
@tool
def calculate(expression: str) -> str:
    """数式を計算して結果を返す。例: '2 + 3 * 4'"""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"計算エラー: {e}"

@tool
def get_word_count(text: str) -> str:
    """テキストの文字数を数える"""
    return f"{len(text)}文字"

# 2. プロンプト
prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたは計算やテキスト分析ができるアシスタントです。"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")
])

# 3. Agentを作成
llm = ChatOpenAI(model="gpt-4o-mini")
tools = [calculate, get_word_count]
agent = create_tool_calling_agent(llm, tools, prompt)

# 4. AgentExecutorで実行
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = executor.invoke({"input": "123 * 456の計算結果は?"})
print(result["output"])

@toolデコレータで関数をツールに変換するのがポイント。docstringがそのままLLMへのツール説明文になるため、何ができるツールなのかを簡潔に書くことが重要だ。

verbose=Trueを設定すると、LLMの思考過程(どのツールを選び、どんな引数で呼び出したか)が全て表示される。デバッグ時には必須のオプション。

Agentの注意点

Agentは自律的に行動するため、意図しないツール呼び出しが起きることがある。max_iterationsを設定してループを防止し、本番ではツールの実行を人間が承認するフローを入れるべきだ。

より複雑なエージェント(状態管理、条件分岐、並列実行)が必要になったらLangGraphの出番。ただし、基本的なツール呼び出しはLangChain単体で十分対応できる。

7. 現場で役立つ実践Tips

7-1. モデルの切り替えが1行で済む設計にする

APIコスト比較でOpenAIからClaudeに乗り換えることになった。変更箇所を探したら、たった1行だった。これがLLMプロバイダーの抽象化だ。OpenAIからClaudeに切り替えたいとき、変更するのはモデルの初期化部分だけ。

# OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")

# Claude に切り替え(この1行だけ変える)
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-4-6-20250514")

残りのChainやRAGのコードは一切変更不要。これがフレームワークを使う最大の恩恵だ。

7-2. デバッグにはLangSmithを使う

「プロンプトを変えたら精度が下がった」「どこでエラーが起きているかわからない」。こうした問題はLangSmithのトレーシングで一発解決する。環境変数を2つ設定するだけで有効になる。

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY="ls__your-api-key"

7-3. コスト管理の鉄則

LLM APIは従量課金なので、コストが読みにくい。実際に運用してわかった鉄則をまとめた。

  • 開発中はgpt-4o-miniを徹底: GPT-4oの1/10のコスト。テストには十分
  • RAGのチャンク数を絞る: search_kwargs={"k": 3}k=5にするとトークン消費が1.5倍に
  • キャッシュを活用: LangChainはSQLiteCacheInMemoryCacheを使って同じクエリの再実行を防げる
  • LangSmithで消費トークンを可視化: 月末に驚かないために

FastAPIと組み合わせてAPIサーバーにしたいなら「FastAPI入門2026」を参照。LangChainのChainをFastAPIのエンドポイントに載せるのが、プロダクション化の王道パターンだ。

8. よくある質問

LangChainとLlamaIndexの違いは?

LlamaIndexはRAG(検索拡張生成)に特化したフレームワーク。データの取り込みとインデックス構築に強い。LangChainはRAGに加えてAgent、Chain、ツール連携など汎用的なAIアプリ開発をカバーする。RAGだけならLlamaIndex、それ以上ならLangChainという棲み分けだ。

LangChainのバージョンは何を使えばいい?

2026年4月時点ではv0.3系が最新で安定版。v0.2以前の記事やチュートリアルはAPIが大幅に変わっているため注意が必要。pip install -U langchainで最新版をインストールすれば問題ない。

OpenAI以外のモデルでも使える?

Claude(Anthropic)、Gemini(Google)、Ollama(ローカルLLM)、Azure OpenAIなど主要なLLMプロバイダー全てに対応。モデルの初期化部分を1行変えるだけで切り替え可能だ。

学習にどのくらい時間がかかる?

Pythonの基礎があれば、Chain・RAG・Agentの基本は1日で理解できる。ただしLangGraphやLangSmithまで含めた本番レベルのアプリ開発には1〜2週間は見ておくべきだろう。

LangChainは転職に有利?

AIエンジニア求人の8割以上でLangChainの経験が歓迎スキルに挙がっている。特にRAGの実装経験は即戦力として評価されやすい。転職市場の詳細は「AIエンジニア転職完全ガイド2026」を参照。

まとめ

OpenAI APIを素で触っていたときは、RAGの実装だけで丸2日かかった。LangChainでは同じものが午前中で動いた。RAGとAgentの実装を標準化したことが、現場での採用理由を端的に説明している。

この記事のポイント

  • LangChainはPythonでRAG・Agent・Chainを構築するフレームワーク。GitHubスター10万超
  • LCEL(パイプ演算子)でプロンプト→LLM→パーサーを簡潔に記述できる
  • RAGは数十行で実装可能。FAISS + OpenAI Embeddingsが最小構成
  • Agentは@toolデコレータでツールを定義し、LLMに自律的に呼び出させる
  • モデル切り替えは1行。OpenAI→Claude→Geminiを自由に差し替えられる

まずはSection 4のChainを動かすところから始めてほしい。そこからRAG、Agentと段階的に進めれば、1日でLangChainの核心は掴める。

Pythonの基礎固めには「Python独学ロードマップ2026」、AIエンジニアへの転職を考えているなら「AIエンジニア転職完全ガイド2026」もあわせてどうぞ。

参考書籍

LangChainとAIアプリ開発をさらに深く学びたい方向け。