はじめに:LangChainとは何か
ChatGPTのAPIを触ったことがある人なら、「APIを呼び出すだけでは業務システムに組み込めない」という壁にぶつかったことがあるはずです。
例えば、次のような処理を考えます:
- ユーザーからの質問を受け取る
- 関連ドキュメントを検索する(RAG)
- 検索結果をプロンプトに組み込む
- AIに回答を生成させる
- 回答をJSON形式で構造化して出力する
- エラーがあれば別モデルにフォールバックする
これをOpenAI APIの生呼び出しで実装すると、数百行のコードと複雑なエラーハンドリングが必要です。LangChainを使えば、これを数行のパイプラインで表現できます。
LangChainは、大規模言語モデルを活用したアプリケーションを構築するためのPythonフレームワークです。2022年10月にHarrison Chase氏によって開発が始まり、2023年のLLMブームとともに急速に普及しました。現在ではAIアプリ開発のデファクトスタンダードとして世界中で使われています。
コンポーザビリティ — 部品を繋ぐだけでAIアプリを作る
LangChainの設計思想で最も重要なのが**「コンポーザビリティ」**という概念です。各機能を独立した部品として定義し、パイプ演算子(|)で繋いで複雑な処理を構築します。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
# プロンプトテンプレート
prompt = ChatPromptTemplate.from_messages([
("system", "ユーザーの質問にJSON形式で答えてください。"),
("user", "{question}")
])
# モデル
model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# JSON出力パーサー
parser = JsonOutputParser()
# パイプ演算子で部品を繋ぐ — これだけでチェーン完成
chain = prompt | model | parser
# 実行
result = chain.invoke({"question": "日本の首都はどこですか?"})
print(result)
# 出力例: {'answer': '東京都'}
各部品は独立しているため、モデルを別のものに変えるのも1行の書き換えで済みます。これがコンポーザビリティの力です。
モデルの抽象化 — 1行で切り替える
LangChainのもう一つの実用的な利点は、OpenAI、Anthropic、Googleのモデルを同じインターフェースで扱える点です。
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI
# OpenAI
model_openai = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# Anthropic
model_anthropic = ChatAnthropic(model="claude-3-5-sonnet-20241022", temperature=0)
# Google
model_google = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0)
# どれも同じ .invoke() で呼べる
response = model_openai.invoke("こんにちは")
print(response.content)
プロバイダーごとのAPI仕様の違いはLangChainが吸収してくれます。モデルを乗り換えるたびにコードを書き直す必要はありません。
LCEL(LangChain Expression Language)
LangChain 0.3系でチェーンを構築する際の中核がLCELです。パイプ演算子を使った記法で、以下の機能を提供します:
-
ストリーミング:
stream()メソッドで出力を少しずつ受け取る -
非同期:
ainvoke()メソッドで非同期実行 -
バッチ処理:
batch()メソッドで複数入力を一括処理 -
フォールバック:
.with_fallbacks()でエラー時の代替処理を指定
# フォールバックの例:OpenAIがエラーの時はClaudeに切り替え
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
primary = ChatOpenAI(model="gpt-4o-mini")
fallback = ChatAnthropic(model="claude-3-5-sonnet-20241022")
model = primary.with_fallbacks([fallback])
# これだけでエラー時の自動切り替えができる
response = model.invoke("複雑な質問...")
LangChainで何が作れるか
代表的な適用範囲を紹介します:
チャットボット — 会話の文脈を記憶し、前後の発言を踏まえた回答を生成するAIボット。メモリ機能とプロンプトテンプレートを組み合わせて構築します。
ドキュメントQAシステム — 社内文書やFAQを読み込み、質問に対してドキュメントの内容に基づいた回答を生成するシステム。RAG(Retrieval-Augmented Generation)技術を使用します。
AIエージェント — AIが自律的にツール(Web検索、計算機、API呼び出し等)を選択し、複数ステップを経て目的を達成するシステム。ReActエージェントと呼ばれる手法が主流です。
データ分析アシスタント — CSVやデータベースの内容を自然言語で問い合わせ、AIが分析結果を返すシステム。
パッケージ構成
LangChain 0.3系では、パッケージが細分化されており必要なものだけをインストールできます:
# 基本パッケージとOpenAI統合
pip install langchain langchain-openai
# AnthropicとGoogleも使う場合
pip install langchain-anthropic langchain-google-genai
主要パッケージ:
| パッケージ | 役割 |
|---|---|
langchain |
中核となるチェーン・エージェント等 |
langchain-core |
基本的な抽象化とインターフェース |
langchain-openai |
OpenAIモデル用統合 |
langchain-anthropic |
Anthropicモデル用統合 |
langchain-google-genai |
Google Gemini用統合 |
まとめ
LangChainは、AIアプリケーション開発を劇的にシンプルにするフレームワークです。コンポーザビリティによる部品の組み合わせ、モデルの抽象化による1行切り替え、LCELによる直感的なチェーン構築が主要な強みです。
本記事では「はじめに」と「第1章」の一部を紹介しました。本書では10章にわたり、プロンプト設計、チェーン、メモリ、RAG、エージェント、構造化出力、Streamlitでの実践アプリ構築、本番運用設計まで体系的に解説しています。
著者の葉山悠希(はやま ゆうき)です。AI活用の技術書をシリーズ化して執筆しています。