# Langchain

> LangChain/LangGraph/LangSmith ガイダンス。エージェント実装、Persistence、Interrupts（HITL）、Time travel、Structured Output、Evaluation についての質問に使用。Python ベースの LLM オーケストレーション、セキュリティベストプラクティス、本番環境対応の実装支援を提供。 Use when this capability is needed.

- Skill: `tomevault-io/langchain-21` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/langchain-21`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/langchain-21/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/langchain-21

---


# 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（推奨）

```python
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

```python
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）

```python
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

```python
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](structured-output-streaming.md) を参照。

## セキュリティ原則

| 原則                 | 説明                                         |
| -------------------- | -------------------------------------------- |
| **最小権限**         | ツールには必要最小限の権限のみ付与           |
| **潜在的悪用の想定** | LLM は与えられた全権限を使用する可能性がある |
| **多層防御**         | 単一の防御策に依存しない                     |

```python
# ❌ 危険: 広範なファイルアクセス
tools = [FileSystemTool(base_path="/")]

# ✅ 推奨: 制限されたアクセス
tools = [FileSystemTool(base_path="/app/uploads", read_only=True)]
```

## 詳細ドキュメント

| トピック                       | ファイル                                                         |
| ------------------------------ | ---------------------------------------------------------------- |
| LangGraph 詳細                 | [langgraph.md](langgraph.md)                                     |
| LangSmith 評価                 | [langsmith.md](langsmith.md)                                     |
| セキュリティ                   | [security.md](security.md)                                       |
| Structured Output ストリーミング | [structured-output-streaming.md](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](https://github.com/TItabashBoilerplates/shadcn-boilerplate) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-16 -->

