Skip to content
解説: LangChain とは?LangChain の Chain の使い方は?

LangChain Chains の奥深さ: モダンな AI ワークフローの力を引き出す

Updated on

LangChain は今も急速に進化しており、その中でも Chain は最も重要な概念の 1 つであり続けています。この記事では、2025 年時点での LangChain の Chain の意味、新しい LCEL (LangChain Expression Language) を用いた仕組み、そして信頼性の高いマルチステップの AI アプリケーションを開発者がどのように構築できるのかを解説します。

本記事のサンプルコードは、非推奨になった LLMChain などのクラスをやめ、代わりに RunnablesPromptTemplateChatModelsシーケンシャルなパイプラインを使う形にアップデートしています。


LangChain とは?(2025 年版の概要)

LangChain は、次のような要素を使って AI アプリケーションを構築するための強力な Python/JavaScript フレームワークです。

  • Large language models (LLMs)
  • Prompt templates
  • Memory
  • Tools & agents
  • Retrieval (RAG)
  • Workflow graphs (LangGraph)

LangChain における最も象徴的な概念が Chain です。

プロンプト、モデル、ツール、変換処理、出力パーサーなどを、ステップごとにデータを渡しながらつなげていく、再利用可能で合成可能なパイプライン。

📘 基本から知りたい場合は、LangChain 入門記事 を参照してください。


LangChain Chains とは?

2023 年までは、Chain は主に LLMChain や独自の Python クラスを使って作られていました。
2025 年現在、推奨される方法は LCEL を使うやり方で、関数型のシンプルなパイプライン構文を採用しています。

chain = prompt | model | output_parser

Chain とは、要するに次のようなものです。

  • 複数ステップを順番に並べたもの
  • それらを 1 つの呼び出し可能なユニットとしてまとめたもの
  • 各ステップの出力が次のステップの入力になるもの

LangChain は現在、次のような種類の Chain を提供しています。

  • Simple Chains(1 つのモデル + 1 つのプロンプト)
  • Sequential Chains(複数ステップでの処理)
  • Parallel Chains(分岐を含むワークフロー)
  • Agents(動的にツールを選択する Chain)

それでは、モダンな例を見ていきましょう。


基本の Chain(2025 年版)

最も基本的な Chain は、1 つのプロンプトで 1 つのモデルを呼び出します。

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
 
prompt = PromptTemplate.from_template(
    "Describe a perfect day in {city}."
)
 
model = ChatOpenAI(model="gpt-4o-mini")
 
chain = prompt | model
 
chain.invoke({"city": "Paris"})

何が行われているのか?

  1. PromptTemplate によって "Describe a perfect day in Paris." という文字列が生成される
  2. LLM がその説明文を生成する
  3. 設定に応じて、出力は ChatMessage もしくは文字列として返される

これが、モダンな LangChain における最もシンプルな Chain です。


応用編: マルチステップのパイプライン

マルチステップの Chain では、複数の処理を組み合わせます。

例:
要約 → 翻訳 を LCEL で実装するケース:

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
 
summarize_prompt = PromptTemplate.from_template(
    "Summarize this text:\n\n{text}"
)
 
translate_prompt = PromptTemplate.from_template(
    "Translate this into Spanish:\n\n{summary}"
)
 
model = ChatOpenAI(model="gpt-4o-mini")
 
summarize_chain = summarize_prompt | model
translate_chain = translate_prompt | model
 
full_chain = summarize_chain | (lambda x: {"summary": x.content}) | translate_chain
 
full_chain.invoke({"text": "Climate change is causing rapid ocean warming..."})

なぜ重要か

これは モダンな LangChain のベストプラクティス を反映しています。

  • 従来の Chain クラスではなく Runnable を利用
  • | 演算子による関数型の合成
  • Python 関数で中間データを整形

LLM を使わない Chain(Transform / Clean 用パイプライン)

すべての Chain に LLM が必要なわけではありません。
前処理後処理専用のパイプラインを作ることもできます。

例:空白除去 → 小文字化 → その後に LLM へ渡す:

def cleanup(text):
    return text.strip().lower()
 
chain = cleanup | model
chain("   WHAT is the    WEATHER   LIKE?   ")

シリアライズ可能なデータを受け取り、返す関数であれば、どんな Python 関数でも Chain の一部として組み込めます。


Sequential Chains(SimpleSequentialChain の代替)

SimpleSequentialChainSequentialChain は非推奨です。
LCEL での等価な表現は、次のように単にステップをつなげるだけです。

chain = step1 | step2 | step3

例:
プロンプトのクリーンアップ → 書き換え → 回答生成

from langchain_openai import ChatOpenAI
 
clean = lambda x: x.strip()
rewrite_prompt = PromptTemplate.from_template(
    "Rewrite this more clearly: {text}"
)
answer_prompt = PromptTemplate.from_template(
    "Answer this question: {question}"
)
 
model = ChatOpenAI(model="gpt-4o-mini")
 
rewrite_chain = rewrite_prompt | model
answer_chain = answer_prompt | model
 
chain = clean | (lambda x: {"text": x}) | rewrite_chain | (lambda x: {"question": x.content}) | answer_chain
 
chain.invoke("   What is LangChain used for?  ")

これが、SimpleSequentialChain のモダンな置き換え方です。


LangChain における Agent の役割(2025 年版)

Agent は、LLM がツールを動的に選択できるようにする仕組みです。

  • 検索エンジン
  • コード実行
  • 電卓
  • 各種 API
  • Retriever
  • カスタム関数

モダンな構文での例:

from langchain.agents import AgentExecutor, load_tools, create_react_agent
from langchain_openai import ChatOpenAI
 
llm = ChatOpenAI(model="gpt-4o-mini")
tools = load_tools(["llm-math"], llm=llm)
 
agent = create_react_agent(llm, tools)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
 
executor.invoke({"input": "If I'm half my dad's age and he'll be 60 next year, how old am I?"})

Agent が真価を発揮するのは、次のような場合です。

  • 複数ステップでの推論が必要なとき
  • 適切なツールを選び分ける必要があるとき
  • 状況に応じた意思決定が何度も発生するタスクのとき

一方で、ステップがあらかじめ固定されているワークフローでは、単純な Chain の方がシンプルで扱いやすいことが多いです。


実用例: 映画レコメンド用ワークフロー(最新版)

ここでは、2 つの LLM をつないだ古いスタイルの Chain を、LCEL を使ってモダンな形に書き直します。

ステップ 1 — ユーザーに好みのジャンルを聞く

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
 
ask_prompt = PromptTemplate.from_template(
    "Ask the user about their favorite movie genres."
)
 
ask_chain = ask_prompt | ChatOpenAI(model="gpt-4o-mini")

ステップ 2 — 映画をおすすめする

recommend_prompt = PromptTemplate.from_template(
    "Based on these genres: {genres}, recommend 5 movies."
)
 
recommend_chain = recommend_prompt | ChatOpenAI(model="gpt-4o-mini")

両者を結合する

chain = ask_chain | (lambda x: {"genres": x.content}) | recommend_chain
chain.invoke({})

メモリを追加する(モダンなやり方)

from langchain.memory import ConversationBufferMemory
 
memory = ConversationBufferMemory(return_messages=True)
 
# pipelines can load memory before passing to next step

このように、メモリを読み書きするステップをパイプラインに組み込むことで、会話コンテキストを維持しながら Chain を進められます。


まとめ

モダンな LangChain(2024–2025)は、LCEL のパイプライン、Runnables、Agent を用いることで、スケーラブルな AI ワークフローをこれまで以上に簡単に構築できるようになりました。用途としては、例えば次のようなものがあります。

  • テキストの前処理・後処理
  • マルチステップのワークフロー構築
  • 各種ツールとの連携
  • 動的な Agent の作成

LangChain は、これらをクリーンかつ信頼性高く接続するための部品を提供してくれます。

まずはシンプルな Chain から試し、必要に応じて複雑な AI アプリケーションへ発展させてみてください。


FAQ(更新版)

  1. LangChain とは何ですか?
    LangChain は、プロンプト、モデル、ツール、メモリ、ワークフローグラフを用いて AI アプリケーションを構築するためのフレームワークです。

  2. SimpleSequentialChain の代わりは何ですか?
    | 演算子でつなぐ LCEL のパイプラインが後継です。

  3. メモリはどう追加しますか?
    ConversationBufferMemorySummaryMemory、あるいは独自のメモリを作り、Chain に注入して使います。

  4. Agent はまだ有用ですか?
    はい。動的なツール選択が必要な場合には特に有用です。ステップが固定されている場合は、Chain の方がシンプルです。

  5. 詳しく学ぶにはどこを見ればいいですか?
    LangChain の公式ドキュメントや、ワークフロー基盤としての LangGraph を参照してください。

📚