LangChain Chains の奥深さ: モダンな AI ワークフローの力を引き出す
Updated on
LangChain は今も急速に進化しており、その中でも Chain は最も重要な概念の 1 つであり続けています。この記事では、2025 年時点での LangChain の Chain の意味、新しい LCEL (LangChain Expression Language) を用いた仕組み、そして信頼性の高いマルチステップの AI アプリケーションを開発者がどのように構築できるのかを解説します。
本記事のサンプルコードは、非推奨になった LLMChain などのクラスをやめ、代わりに Runnables、PromptTemplate、ChatModels、シーケンシャルなパイプラインを使う形にアップデートしています。
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_parserChain とは、要するに次のようなものです。
- 複数ステップを順番に並べたもの
- それらを 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"})何が行われているのか?
- PromptTemplate によって
"Describe a perfect day in Paris."という文字列が生成される - LLM がその説明文を生成する
- 設定に応じて、出力は 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 の代替)
SimpleSequentialChain と SequentialChain は非推奨です。
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(更新版)
-
LangChain とは何ですか?
LangChain は、プロンプト、モデル、ツール、メモリ、ワークフローグラフを用いて AI アプリケーションを構築するためのフレームワークです。 -
SimpleSequentialChain の代わりは何ですか?
|演算子でつなぐ LCEL のパイプラインが後継です。 -
メモリはどう追加しますか?
ConversationBufferMemoryやSummaryMemory、あるいは独自のメモリを作り、Chain に注入して使います。 -
Agent はまだ有用ですか?
はい。動的なツール選択が必要な場合には特に有用です。ステップが固定されている場合は、Chain の方がシンプルです。 -
詳しく学ぶにはどこを見ればいいですか?
LangChain の公式ドキュメントや、ワークフロー基盤としての LangGraph を参照してください。