LangChain / LangGraph / LangSmith スキル
このプロジェクトは LangGraph を使用してエージェントワークフローを構築し、LangSmith で評価・監視を行います。
技術スタック概要
| コンポーネント |
用途 |
パッケージ |
| LangGraph |
ステートフルなエージェントワークフロー |
langgraph>=1.0.5 |
| LangChain |
LLM 統合・ツール定義 |
langchain>=1.2.0 |
| LangSmith |
評価・モニタリング・デバッグ |
LangSmith Cloud |
| Checkpointers |
状態永続化 |
langgraph-checkpoint-postgres |
エージェント作成の選択肢
| API |
用途 |
特徴 |
langgraph.prebuilt.create_react_agent |
低レベル制御 |
グラフ構造、カスタムノード、pre_model_hook |
langchain.agents.create_agent |
ミドルウェア |
PII 検出、HITL、要約など組み込み機能 |
クイックリファレンス
LangGraph: create_react_agent(推奨)
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.prebuilt import create_react_agent
# 本番環境: PostgreSQL checkpointer
checkpointer = PostgresSaver.from_conn_string(DATABASE_URL)
# エージェント作成
graph = create_react_agent(
model=model,
tools=tools,
checkpointer=checkpointer,
)
# 実行時は thread_id が必須
config = {"configurable": {"thread_id": "user-123"}}
result = graph.invoke({"messages": messages}, config=config)
LangChain v1.0: create_agent + Middleware
from langchain.agents import create_agent
from langchain.agents.middleware import (
PIIMiddleware,
SummarizationMiddleware,
HumanInTheLoopMiddleware,
)
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[read_email, send_email],
middleware=[
PIIMiddleware("email", strategy="redact"),
SummarizationMiddleware(max_tokens_before_summary=500),
HumanInTheLoopMiddleware(
interrupt_on={"send_email": {"allowed_decisions": ["approve", "reject"]}}
),
],
)
Human-in-the-Loop(HITL)
from langgraph.types import interrupt, Command
def approval_node(state):
# 実行を一時停止して承認を待つ
approved = interrupt("この操作を承認しますか?")
if not approved:
return {"status": "rejected"}
return {"status": "approved"}
# 再開時
graph.invoke(Command(resume=True), config)
Structured Output
from pydantic import BaseModel, Field
from langchain.agents import create_agent
from langchain.agents.structured_output import ToolStrategy
class AnalysisResult(BaseModel):
summary: str = Field(description="分析結果の要約")
confidence: float = Field(ge=0.0, le=1.0)
recommendations: list[str]
# LangChain v1.0: create_agent + ToolStrategy/ProviderStrategy
agent = create_agent(
model="gpt-5.2",
tools=tools,
response_format=ToolStrategy(AnalysisResult),
)
result = agent.invoke({"messages": messages})
print(result["structured_response"]) # AnalysisResult インスタンス
# LangGraph: create_react_agent + response_format
from langgraph.prebuilt import create_react_agent
graph = create_react_agent(
model=model,
tools=tools,
response_format=AnalysisResult,
)
ストリーミング時の注意: with_structured_output でストリーミングする場合は Pydantic ではなく TypedDict を使用する必要があります。詳細は structured-output-streaming.md を参照。
セキュリティ原則
| 原則 |
説明 |
| 最小権限 |
ツールには必要最小限の権限のみ付与 |
| 潜在的悪用の想定 |
LLM は与えられた全権限を使用する可能性がある |
| 多層防御 |
単一の防御策に依存しない |
# ❌ 危険: 広範なファイルアクセス
tools = [FileSystemTool(base_path="/")]
# ✅ 推奨: 制限されたアクセス
tools = [FileSystemTool(base_path="/app/uploads", read_only=True)]
詳細ドキュメント
| トピック |
ファイル |
| LangGraph 詳細 |
langgraph.md |
| LangSmith 評価 |
langsmith.md |
| セキュリティ |
security.md |
| Structured Output ストリーミング |
structured-output-streaming.md |
リリースポリシー
| パッケージ |
現行 LTS |
サポート期限 |
| LangChain 1.x |
ACTIVE |
2.0 リリース後 1 年 |
| LangGraph 1.x |
ACTIVE |
2.0 リリース後 1 年 |
| LangGraph 0.4 |
MAINTENANCE |
2026 年 12 月 |
Python 要件: Python 3.10 以上
Source: TItabashBoilerplates/shadcn-boilerplate — distributed by TomeVault.