- HOME >
- Jamstack用語集 >
- LangChain
LangChain
ラングチェーン
LangChain とは
LangChain は、大規模言語モデル(LLM)を使ったアプリケーションを簡単に構築できるフレームワークです。
例え話をしましょう。あなたが料理を作るとします。
LLM API を直接使う(フレームワークなし)
- 材料を一から準備
- 調理器具を揃える
- すべての工程を自分で考える
- 時間がかかり、大変
LangChain を使う
- レシピ(チェーン)が用意されている
- 便利な調理器具(ツール)が揃っている
- 手順が明確で、組み合わせも簡単
- 効率的に料理が完成
LangChain は、LLM アプリケーション開発の「レシピと調理器具」を提供します。
LangChain の主要コンポーネント
LangChain は、いくつかの主要コンポーネントで構成されています。
Models(モデル)
様々な LLM へのインターフェース
対応モデル:
- OpenAI(GPT-4、GPT-3.5)
- Anthropic(Claude)
- Google(Gemini)
- オープンソースモデル(Llama、Mistral)
統一されたインターフェースで簡単に切り替え可能Prompts(プロンプト)
プロンプトテンプレートの管理
例:
template = "次の文章を{language}に翻訳してください: {text}"
再利用可能で、保守しやすいChains(チェーン)
複数のステップを連鎖させる
例: 文書要約チェーン
1. 文書を読み込む
2. 長文を分割
3. 各部分を要約
4. 要約を結合
一連の処理を簡単に構築Agents(エージェント)
LLM が自律的にツールを使って問題解決
動作:
1. ユーザーの質問を受け取る
2. どのツールを使うべきか判断
3. ツールを実行
4. 結果を確認
5. 必要なら別のツールを使う
6. 最終的な答えを返すMemory(メモリ)
会話履歴の保持
種類:
- ConversationBufferMemory: 全履歴を保存
- ConversationSummaryMemory: 要約して保存
- ConversationBufferWindowMemory: 最新N件のみ保存
長い対話でも文脈を維持Retrievers(検索)
関連情報の検索
例:
Vector Database から類似文書を検索
→ RAG(Retrieval Augmented Generation)の実装LangChain の使用例
LangChain を使った実装例を紹介します。
シンプルな質問応答
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# LLM の初期化
llm = OpenAI(temperature=0.7)
# プロンプトテンプレート
template = "質問: {question}\n回答:"
prompt = PromptTemplate(template=template, input_variables=["question"])
# チェーンの作成
chain = LLMChain(llm=llm, prompt=prompt)
# 実行
response = chain.run(question="Pythonとは何ですか?")
Sequential Chain(順次チェーン)
from langchain.chains import SimpleSequentialChain
# チェーン1: 商品アイデアを生成
chain_1 = LLMChain(llm=llm, prompt=idea_prompt)
# チェーン2: 商品名を生成
chain_2 = LLMChain(llm=llm, prompt=name_prompt)
# 順次実行
overall_chain = SimpleSequentialChain(
chains=[chain_1, chain_2]
)
result = overall_chain.run("スマートフォンアクセサリー")
Agent with Tools(ツール付きエージェント)
from langchain.agents import load_tools, initialize_agent
from langchain.agents import AgentType
# ツールの読み込み
tools = load_tools(
["serpapi", "llm-math"], # Google検索、計算
llm=llm
)
# エージェントの初期化
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)
# 実行
agent.run("2024年の東京の人口は?それを2で割ると?")
# エージェントが自動的に:
# 1. Google で検索
# 2. 計算ツールを使用
# 3. 最終的な答えを返す
RAG(検索拡張生成)
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
# Vector Database の準備
embeddings = OpenAIEmbeddings()
vectordb = Chroma.from_documents(
documents=docs,
embedding=embeddings
)
# RAG チェーンの作成
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectordb.as_retriever()
)
# 質問
qa_chain.run("会社の休暇ポリシーは?")
# 自動的に関連文書を検索して回答
LangChain のメリット
LangChain を使うことで、多くのメリットがあります。
メリット 1: 開発速度の向上
従来:
- プロンプト管理を自前で実装
- 複数のステップを手動で連携
- エラーハンドリングを都度実装
→ 数日〜数週間
LangChain:
- 既存のコンポーネントを組み合わせ
- エラーハンドリングも標準装備
→ 数時間〜数日メリット 2: 保守性
プロンプトの管理:
- テンプレート化
- バージョン管理
- 再利用
モデルの切り替え:
- 統一されたインターフェース
- 簡単に別のモデルに変更可能メリット 3: ベストプラクティス
LangChain には、実績のあるパターンが組み込まれている:
- Chain-of-Thought プロンプト
- ReAct パターン
- RAG の実装
車輪の再発明を避けるメリット 4: エコシステム
豊富な統合:
- Vector Databases(Pinecone、Chroma)
- LLM プロバイダー(OpenAI、Anthropic)
- ツール(Google Search、Wikipedia)
すぐに使えるLangChain の主要パターン
LangChain で実装できる主要なパターンです。
パターン 1: Simple Chain
単純な連鎖
例:
入力 → LLM → 出力
用途:
- 単純な質問応答
- テキスト生成パターン 2: Sequential Chain
複数のステップを順次実行
例:
入力 → ステップ1 → ステップ2 → ステップ3 → 出力
用途:
- 複雑な変換
- 段階的な処理パターン 3: Router Chain
入力に応じて異なるチェーンを選択
例:
質問 → 分類 → 専門チェーンA or B or C → 回答
用途:
- マルチドメインの質問応答
- 専門的な処理の振り分けパターン 4: Agent Pattern
LLM が自律的にツールを選択・実行
例:
質問 → エージェント → ツール選択 → 実行 → 回答
用途:
- 複雑な問題解決
- 動的なタスクパターン 5: RAG Pattern
関連情報を検索して回答を生成
例:
質問 → 検索 → 関連文書 → LLM → 回答
用途:
- ドキュメント検索
- 社内ナレッジベースLangChain の課題
LangChain にもいくつかの課題があります。
課題 1: 抽象化のオーバーヘッド
問題:
抽象化レイヤーが多く、パフォーマンスが低下する場合
対策:
- 必要に応じて低レベル API を使用
- パフォーマンスが重要な部分は最適化課題 2: 学習曲線
問題:
多くのコンポーネントと概念を理解する必要
対策:
- 公式ドキュメントを読む
- 簡単な例から始める
- コミュニティのサンプルを参考に課題 3: バージョンの変更
問題:
活発に開発されており、API が変わることがある
対策:
- バージョンを固定
- 変更履歴を確認
- マイグレーションガイドを参照課題 4: デバッグの難しさ
問題:
複雑なチェーンのデバッグが困難
対策:
- verbose モードを有効化
- 各ステップの出力をログに記録
- 小さなチェーンから始めて徐々に拡張LangChain の代替
LangChain 以外のフレームワークもあります。
LlamaIndex
特徴:
- データ接続に特化
- RAG の構築に強い
用途:
- ドキュメント検索
- ナレッジベースの構築Semantic Kernel(Microsoft)
特徴:
- C# と Python で利用可能
- エンタープライズ向け
用途:
- Microsoft エコシステムとの統合
- 企業向けアプリケーションHaystack
特徴:
- 検索と NLP に特化
- エンドツーエンドの NLP パイプライン
用途:
- 検索システム
- 質問応答システム直接 API を使う
シンプルなユースケースでは、LLM API を直接使う方が良い場合も
メリット:
- シンプル
- 完全なコントロール
- 依存関係が少ないLangChain のベストプラクティス
LangChain を効果的に使うためのベストプラクティスです。
1. 小さく始める
最初から複雑なチェーンを作らない
アプローチ:
1. 単純なチェーンから始める
2. 動作を確認
3. 徐々に機能を追加2. プロンプトを管理する
プロンプトテンプレートを活用
メリット:
- 再利用可能
- バージョン管理しやすい
- テストしやすい3. ログを活用する
verbose モードを有効化
例:
chain = LLMChain(llm=llm, prompt=prompt, verbose=True)
各ステップの動作が可視化される4. エラーハンドリング
try-except でエラーを適切に処理
例:
try:
result = chain.run(input)
except Exception as e:
# エラー処理
logging.error(f"Chain failed: {e}")5. コストの監視
LLM の使用量を監視
対策:
- トークン数をカウント
- キャッシュを活用
- 不要な API コールを削減まとめ
LangChain は、大規模言語モデルを使ったアプリケーション開発を大幅に簡単にする強力なフレームワークです。チェーン、エージェント、メモリなど、豊富な機能を提供します。
重要なポイント
- コンポーネント - Models、Prompts、Chains、Agents、Memory
- パターン - Simple、Sequential、Router、Agent、RAG
- 開発速度 - 既存のコンポーネントで迅速に開発
- 保守性 - プロンプトの管理、モデルの切り替えが容易
- エコシステム - 豊富な統合とツール
LangChain が最適な場面
- RAG(検索拡張生成)の実装
- 複数ステップの処理が必要
- エージェント型アプリケーション
- 迅速なプロトタイピング
直接 API を使うべき場面
- 非常にシンプルなユースケース
- パフォーマンスが最優先
- 完全なコントロールが必要
LangChain は、LLM アプリケーション開発のデファクトスタンダードの一つです。適切に活用することで、開発時間を大幅に短縮し、保守しやすいコードを書くことができます。