langchain-development について
Python で LangChain と LangGraph を使った LLM アプリケーションを構築するための開発スキルです。チェーン構成、エージェント、検索、可観測性、テスト、性能の指針を扱います。
主な機能
- 01LCEL によるチェーン構成と実行
- 02エージェントとツールの設定
- 03メモリと LangGraph の状態管理
- 04RAG と検索戦略
- 05LangSmith によるトレースとデバッグ
- 06テストと性能の実践方法
活用シーン
- 01再利用可能な LangChain チェーンの構成
- 02状態を持つ LangGraph ワークフローの構築
- 03LLM アプリへの文書検索の実装
- 04アプリケーションパイプラインのデバッグとテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill langchain-developmentインストール後、Claude Code で/langchain-developmentを入力して読み込まれたか確認します。
詳細
LangChain 開発
LangChain、LangGraph、および Python を使った LLM 搭載アプリケーション構築のエキスパートです。
主要な原則
- 正確な Python の例を用いて、簡潔で技術的な回答を作成します
- 関数型かつ宣言型のプログラミングを使用し、可能な限りクラスを避けます
- コードの重複を避け、反復とモジュール化を優先します
- 補助動詞を含む説明的な変数名を使用します(例:is_active、has_context)
- PEP 8 のスタイルガイドラインに厳密に従います
コードの構成
ディレクトリ構造
機能に基づいてコードを論理的なモジュールに整理します。
project/
├── chains/ # LangChain chain definitions
├── agents/ # Agent configurations and tools
├── tools/ # Custom tool implementations
├── memory/ # Memory and state management
├── prompts/ # Prompt templates and management
├── retrievers/ # RAG and retrieval components
├── callbacks/ # Custom callback handlers
├── utils/ # Utility functions
├── tests/ # Test files
└── config/ # Configuration files
命名規則
- ファイル、関数、変数には snake_case を使用します
- クラスには PascalCase を使用します
- プライベート関数にはアンダースコアを付けます
- 目的を示す説明的な名前を使用します(例:
create_retrieval_chain、build_agent_executor)
LangChain Expression Language(LCEL)
チェーンの構成
- パイプ演算子(
|)を使ってチェーンを構成するには LCEL を使用します - 複雑なワークフローには
RunnableSequenceとRunnableParallelを優先します RunnableLambdaを使って適切なエラー処理を実装します
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
chain = (
RunnableParallel(
context=retriever,
question=RunnablePassthrough()
)
| prompt
| llm
| output_parser
)
ベストプラクティス
- 単一の入力には常に
invoke()、複数の入力にはbatch()を使用します - リアルタイムのトークンストリーミングには
stream()を使用します - 実行時の設定には
with_config()を実装します bind()を使ってツールや関数をランナブルに紐付けます
エージェントとツール
ツールの開発
- 明確な docstring を付け、
@toolデコレーターを使ってツールを定義します - すべてのツールパラメーターに型ヒントを含めます
- 適切な入力検証を実装します
- 可能な場合は構造化された出力を返します
from langchain_core.tools import tool
from pydantic import BaseModel, Field
class SearchInput(BaseModel):
query: str = Field(description="Search query string")
@tool(args_schema=SearchInput)
def search_database(query: str) -> str:
"""Search the database for relevant information."""
# Implementation
return results
エージェントの設定
- モデルの機能に応じて
create_react_agentまたはcreate_tool_calling_agentを使用します - 最大反復回数を設定した適切なエージェントエグゼキューターを実装します
- 監視とデバッグのためにコールバックを追加します
- 複雑なツールとのやり取りには構造化チャットエージェントを使用します
メモリと状態管理
会話メモリ
- 短い会話には
ConversationBufferMemoryを使用します - 長い会話には
ConversationSummaryMemoryを実装します - 固定長の履歴には
ConversationBufferWindowMemoryを検討します - 本番環境では永続ストレージバックエンド(Redis、PostgreSQL)を使用します
LangGraph の状態
- TypedDict を使って明示的な状態スキーマを定義します
- 複雑な状態更新には適切な状態リデューサーを実装します
- 再開可能なワークフローにはチェックポイントを使用します
- セッション間の状態の永続化を処理します
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph
from operator import add
class AgentState(TypedDict):
messages: Annotated[list, add]
context: str
next_step: str
graph = StateGraph(AgentState)
RAG(検索拡張生成)
ドキュメントの処理
- 適切なテキストスプリッター(RecursiveCharacterTextSplitter、MarkdownTextSplitter)を使用します
- オーバーラップを考慮した適切なチャンクサイズを設定します
- 分割中もメタデータを保持します
- ファイル形式に適したドキュメントローダーを使用します
ベクトルストア
- 規模の要件に基づいてベクトルストアを選択します
- 適切な埋め込みキャッシュを実装します
- 利用可能な場合はハイブリッド検索(密ベクトル検索+疎ベクトル検索)を使用します
- 適切な類似度指標を設定します
検索戦略
- 複雑な質問にはマルチクエリ検索を実装します
- ノイズを減らすにはコンテキスト圧縮を使用します
- より良いコンテキストを得るために親ドキュメント検索を検討します
- 関連性を高めるために再ランキングを実装します
LangSmith との統合
監視
LANGCHAIN_TRACING_V2=trueでトレースを有効にします- 識別しやすいように実行名を追加します
- フィルタリング用のカスタムメタデータを実装します
- 分類にはタグを使用します
デバッグ
- パフォーマンスのボトルネックを特定するためにトレースを確認します
- トークン使用パターンを分析します
- チェーンの各コンポーネントのレイテンシーを監視します
- エラー率のアラートを設定します
エラー処理
- 指数バックオフを使った再試行ロジックを実装します
- LLM プロバイダーによるレート制限に適切に対処します
- 重要な処理経路にはフォールバックチェーンを使用します
- 十分なコンテキストとともにエラーを記録します
from langchain_core.runnables import RunnableWithFallbacks
chain_with_fallback = primary_chain.with_fallbacks(
[fallback_chain],
exceptions_to_handle=(RateLimitError, TimeoutError)
)
パフォーマンスの最適化
- I/O 待ちの処理には非同期メソッド(
ainvoke、abatch)を使用します - コストの高い処理にはキャッシュを実装します
- 可能な場合はリクエストをバッチ処理します
- ユーザー体験を向上させるためにストリーミングを使用します
テスト
- 個々のチェーンコンポーネントのユニットテストを作成します
- チェーン全体の統合テストを実装します
- ユニットテストでは、LLM 呼び出しにモックを使用します
- エッジケースとエラー条件をテストします
依存関係
- langchain
- langchain-core
- langchain-community
- langgraph
- langsmith
- python-dotenv
- pydantic
コメント
Markdown 対応