langchain
エージェント、チェーン、RAGを活用したLLMアプリケーションを構築するためのフレームワークで、OpenAI・Anthropic・Googleなど複数のプロバイダーや500以上のインテグレーションに対応し、ReActエージェント・ツール呼び出し・メモリ管理・ベクトルストア検索をサポートします。チャットボット・QAシステム・自律エージェント・RAGアプリケーションの開発に適しており、迅速なプロトタイピングから本番環境へのデプロイまで幅広く活用できます。
description の原文を見る
Framework for building LLM-powered applications with agents, chains, and RAG. Supports multiple providers (OpenAI, Anthropic, Google), 500+ integrations, ReAct agents, tool calling, memory management, and vector store retrieval. Use for building chatbots, question-answering systems, autonomous agents, or RAG applications. Best for rapid prototyping and production deployments.
SKILL.md 本文
LangChain - エージェント & RAG を使用した LLM アプリケーションの構築
LLM を使用したアプリケーション構築のための最も人気のあるフレームワーク。
LangChain を使用すべき場面
LangChain を使用すべき場合:
- ツール呼び出しと推論を備えたエージェントの構築 (ReACtパターン)
- RAG (検索拡張生成) パイプラインの実装
- LLM プロバイダーを簡単に切り替える必要がある場合 (OpenAI、Anthropic、Google)
- 会話メモリを備えたチャットボットの作成
- LLM アプリケーションのラピッドプロトタイピング
- LangSmith の可観測性を使用した本番環境でのデプロイ
メトリクス:
- GitHub スター: 119,000 以上
- 272,000 以上のリポジトリ が LangChain を使用
- 500 以上の統合 (モデル、ベクトルストア、ツール)
- 3,800 以上の貢献者
代わりに代替案を使用する:
- LlamaIndex: RAG に特化、ドキュメント Q&A に最適
- LangGraph: 複雑なステートフルワークフロー、より多くの制御
- Haystack: 本番環境の検索パイプライン
- Semantic Kernel: Microsoft エコシステム
クイックスタート
インストール
# コアライブラリ (Python 3.10+)
pip install -U langchain
# OpenAI 対応
pip install langchain-openai
# Anthropic 対応
pip install langchain-anthropic
# 一般的な拡張機能
pip install langchain-community # 500+ 統合
pip install langchain-chroma # ベクトルストア
基本的な LLM の使用
from langchain_anthropic import ChatAnthropic
# モデルを初期化
llm = ChatAnthropic(model="claude-sonnet-4-5-20250929")
# シンプルな補完
response = llm.invoke("量子コンピューティングを2文で説明してください")
print(response.content)
エージェントの作成 (ReACtパターン)
from langchain.agents import create_agent
from langchain_anthropic import ChatAnthropic
# ツールを定義
def get_weather(city: str) -> str:
"""都市の現在の天気を取得します。"""
return f"{city}は晴れ、気温は72°F"
def search_web(query: str) -> str:
"""ウェブで情報を検索します。"""
return f"検索結果: {query}"
# エージェントを作成 (<10行!)
agent = create_agent(
model=ChatAnthropic(model="claude-sonnet-4-5-20250929"),
tools=[get_weather, search_web],
system_prompt="あなたは便利なアシスタントです。必要に応じてツールを使用してください。"
)
# エージェントを実行
result = agent.invoke({"messages": [{"role": "user", "content": "パリの天気はどうですか?"}]})
print(result["messages"][-1].content)
コアコンセプト
1. モデル - LLM の抽象化
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI
# プロバイダーを簡単に切り替え
llm = ChatOpenAI(model="gpt-4o")
llm = ChatAnthropic(model="claude-sonnet-4-5-20250929")
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp")
# ストリーミング
for chunk in llm.stream("詩を書く"):
print(chunk.content, end="", flush=True)
2. チェーン - 順序付きの操作
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# プロンプトテンプレートを定義
prompt = PromptTemplate(
input_variables=["topic"],
template="{topic} について 3 文で要約を作成"
)
# チェーンを作成
chain = LLMChain(llm=llm, prompt=prompt)
# チェーンを実行
result = chain.run(topic="機械学習")
3. エージェント - ツール使用推論
ReAct (推論 + 行動) パターン:
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.tools import Tool
# カスタムツールを定義
calculator = Tool(
name="Calculator",
func=lambda x: eval(x),
description="数学計算に便利です。入力: 有効な Python 式。"
)
# ツール付きエージェントを作成
agent = create_tool_calling_agent(
llm=llm,
tools=[calculator, search_web],
prompt="利用可能なツールを使用して質問に答える"
)
# エグゼキューターを作成
agent_executor = AgentExecutor(agent=agent, tools=[calculator], verbose=True)
# 推論を実行
result = agent_executor.invoke({"input": "25 * 17 + 142 は何ですか?"})
4. メモリ - 会話履歴
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
# 会話を追跡するメモリを追加
memory = ConversationBufferMemory()
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 複数ターンの会話
conversation.predict(input="やあ、私はアリスです")
conversation.predict(input="私の名前は何ですか?") # 「アリス」を記憶
RAG (検索拡張生成)
基本的な RAG パイプライン
from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
# 1. ドキュメントを読み込む
loader = WebBaseLoader("https://docs.python.org/3/tutorial/")
docs = loader.load()
# 2. チャンクに分割
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
splits = text_splitter.split_documents(docs)
# 3. 埋め込みとベクトルストアを作成
vectorstore = Chroma.from_documents(
documents=splits,
embedding=OpenAIEmbeddings()
)
# 4. レトリーバーを作成
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# 5. QA チェーンを作成
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=retriever,
return_source_documents=True
)
# 6. クエリを実行
result = qa_chain({"query": "Python デコレータとは何ですか?"})
print(result["result"])
print(f"ソース: {result['source_documents']}")
メモリを備えた会話型 RAG
from langchain.chains import ConversationalRetrievalChain
# 会話メモリ付き RAG
qa = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=retriever,
memory=ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
)
# 複数ターンの RAG
qa({"question": "Python は何に使われていますか?"})
qa({"question": "ウェブ開発についてさらに詳しく説明できますか?"}) # コンテキストを記憶
高度なエージェントパターン
構造化された出力
from langchain_core.pydantic_v1 import BaseModel, Field
# スキーマを定義
class WeatherReport(BaseModel):
city: str = Field(description="都市名")
temperature: float = Field(description="華氏での気温")
condition: str = Field(description="天気の状態")
# 構造化された応答を取得
structured_llm = llm.with_structured_output(WeatherReport)
result = structured_llm.invoke("サンフランシスコの天気は? 気温65°F、晴天")
print(result.city, result.temperature, result.condition)
並列ツール実行
from langchain.agents import create_tool_calling_agent
# エージェントは独立したツール呼び出しを自動的に並列化
agent = create_tool_calling_agent(
llm=llm,
tools=[get_weather, search_web, calculator]
)
# これは get_weather("Paris") と get_weather("London") を並列で呼び出す
result = agent.invoke({
"messages": [{"role": "user", "content": "パリとロンドンの天気を比較"}]
})
ストリーミングエージェント実行
# エージェントのステップをストリーム
for step in agent_executor.stream({"input": "AI トレンドを調査"}):
if "actions" in step:
print(f"ツール: {step['actions'][0].tool}")
if "output" in step:
print(f"出力: {step['output']}")
一般的なパターン
マルチドキュメント QA
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
# 複数のドキュメントを読み込む
docs = [
loader.load("https://docs.python.org"),
loader.load("https://docs.numpy.org")
]
# ソース引用付き QA
chain = load_qa_with_sources_chain(llm, chain_type="stuff")
result = chain({"input_documents": docs, "question": "numpy 配列の使い方は?"})
print(result["output_text"]) # ソース引用を含む
エラーハンドリング付きカスタムツール
from langchain.tools import tool
@tool
def risky_operation(query: str) -> str:
"""失敗する可能性のある危険な操作を実行します。"""
try:
# ここに操作を記述
result = perform_operation(query)
return f"成功: {result}"
except Exception as e:
return f"エラー: {str(e)}"
# エージェントはエラーを優雅に処理
agent = create_agent(model=llm, tools=[risky_operation])
LangSmith の可観測性
import os
# トレーシングを有効化
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
os.environ["LANGCHAIN_PROJECT"] = "my-project"
# すべてのチェーン/エージェントは自動的にトレース
agent = create_agent(model=llm, tools=[calculator])
result = agent.invoke({"input": "123 * 456 を計算"})
# smith.langchain.com でトレースを表示
ベクトルストア
Chroma (ローカル)
from langchain_chroma import Chroma
vectorstore = Chroma.from_documents(
documents=docs,
embedding=OpenAIEmbeddings(),
persist_directory="./chroma_db"
)
Pinecone (クラウド)
from langchain_pinecone import PineconeVectorStore
vectorstore = PineconeVectorStore.from_documents(
documents=docs,
embedding=OpenAIEmbeddings(),
index_name="my-index"
)
FAISS (類似性検索)
from langchain_community.vectorstores import FAISS
vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())
vectorstore.save_local("faiss_index")
# 後で読み込む
vectorstore = FAISS.load_local("faiss_index", OpenAIEmbeddings())
ドキュメントローダー
# ウェブページ
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://example.com")
# PDF
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("paper.pdf")
# GitHub
from langchain_community.document_loaders import GithubFileLoader
loader = GithubFileLoader(repo="user/repo", file_filter=lambda x: x.endswith(".py"))
# CSV
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("data.csv")
テキストスプリッター
# 再帰的 (一般的なテキストに推奨)
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n\n", "\n", " ", ""]
)
# コード対応
from langchain.text_splitter import PythonCodeTextSplitter
splitter = PythonCodeTextSplitter(chunk_size=500)
# セマンティック (意味別)
from langchain_experimental.text_splitter import SemanticChunker
splitter = SemanticChunker(OpenAIEmbeddings())
ベストプラクティス
- シンプルに始める - ほとんどの場合
create_agent()を使用 - ストリーミングを有効化 - 長い応答に対するより優れた UX
- エラーハンドリングを追加 - ツールは失敗する可能性があります
- LangSmith を使用 - エージェントのデバッグに不可欠
- チャンクサイズを最適化 - RAG には 500-1000 文字
- プロンプトをバージョン管理 - 本番環境での変更を追跡
- 埋め込みをキャッシュ - 費用がかかるため、可能な場合はキャッシュ
- コストを監視 - LangSmith でトークン使用量を追跡
パフォーマンスベンチマーク
| 操作 | レイテンシ | 備考 |
|---|---|---|
| シンプルな LLM 呼び出し | ~1-2秒 | プロバイダーによる |
| 1つのツール付きエージェント | ~3-5秒 | ReAct推論のオーバーヘッド |
| RAG 検索 | ~0.5-1秒 | ベクトル検索 + LLM |
| 1000ドキュメントの埋め込み | ~10-30秒 | モデルに依存 |
LangChain vs LangGraph
| 機能 | LangChain | LangGraph |
|---|---|---|
| 最適用途 | クイックエージェント、RAG | 複雑なワークフロー |
| 抽象化レベル | 高い | 低い |
| 開始コード | <10行 | ~30行 |
| 制御 | シンプル | 完全な制御 |
| ステートフルワークフロー | 限定的 | ネイティブ |
| 循環グラフ | なし | あり |
| ヒューマンインループ | 基本 | 高度 |
LangGraph を使用すべき場合:
- サイクル付きのステートフルワークフローが必要
- 細粒度の制御が必要
- マルチエージェントシステムの構築
- 複雑なロジックを持つ本番アプリケーション
リファレンス
Agents ガイド- ReAct、ツール呼び出し、ストリーミングRAG ガイド- ドキュメントローダー、レトリーバー、QA チェーン統合ガイド- ベクトルストア、LangSmith、デプロイメント
リソース
- GitHub: https://github.com/langchain-ai/langchain ⭐ 119,000+
- ドキュメント: https://docs.langchain.com
- API リファレンス: https://reference.langchain.com/python
- LangSmith: https://smith.langchain.com (可観測性)
- バージョン: 0.3+ (安定版)
- ライセンス: MIT
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。