home / skills / nanmicoder / claude-code-skills / langchain-use-skill
This skill provides a concise LangChain 1.0 quick reference for building agents, tools, memory, and middleware workflows.
npx playbooks add skill nanmicoder/claude-code-skills --skill langchain-use-skillReview the files below or copy the command above to add this skill to your agents.
---
name: langchain-use
description: LangChain 1.0 使用指南。提供 Agent、Tool、Memory、Middleware 等核心概念的快速参考。当用户需要创建 AI Agent、集成 LangChain、或解决 LangChain 相关问题时激活。
---
# LangChain Use Skill
LangChain 是构建 LLM 驱动的智能体和应用程序的开源框架。
## 安装
使用 uv 安装 LangChain(推荐,需要 Python 3.10+):
```bash
# 安装核心包
uv add langchain
# 安装模型提供商集成
uv add langchain-anthropic # Anthropic/Claude
uv add langchain-openai # OpenAI
```
## 快速参考
### 核心工作流程
```
用户查询 -> create_agent() -> ReAct 循环 -> Tool 调用 -> 返回结果
```
### 创建 Agent
详见 [Agent 基础](references/agents/agent-basics.md)
```python
from langchain.agents import create_agent
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[get_weather],
system_prompt="You are a helpful assistant",
)
# 运行 agent
result = agent.invoke(
{"messages": [{"role": "user", "content": "what is the weather in sf"}]}
)
```
### 定义 Tool
详见 [Tool 基础](references/tools/tool-basics.md)
```python
from langchain.tools import tool
@tool
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
```
### 访问 Runtime Context
使用 `ToolRuntime` 访问 state、context、store:
```python
from langchain.tools import tool, ToolRuntime
from dataclasses import dataclass
@dataclass
class Context:
user_id: str
@tool
def get_user_location(runtime: ToolRuntime[Context]) -> str:
"""Retrieve user location based on user ID."""
user_id = runtime.context.user_id
return "Florida" if user_id == "1" else "SF"
```
### 管理 Memory
详见 [短期记忆](references/memory/short-term-memory.md)
详见 [长期记忆](references/memory/long-term-memory.md)
```python
from langgraph.checkpoint.memory import InMemorySaver
agent = create_agent(
model,
tools,
checkpointer=InMemorySaver(), # 短期记忆
)
# 使用 thread_id 维护会话
config = {"configurable": {"thread_id": "1"}}
agent.invoke({"messages": [...]}, config)
```
### 添加 Middleware
详见 [中间件概述](references/middleware/middleware-overview.md)
```python
from langchain.agents.middleware import before_model, after_model
@before_model
def trim_messages(state, runtime):
# 消息修剪逻辑
return None
```
## 进阶主题
| 主题 | 文档 | 说明 |
|------|------|------|
| Streaming | [Streaming](references/advanced/streaming.md) | 实时输出流式更新 |
| Structured Output | [结构化输出](references/advanced/structured-output.md) | Pydantic/dataclass 输出格式 |
| Runtime | [Runtime](references/advanced/runtime.md) | ToolRuntime 和上下文访问 |
| Guardrails | [安全护栏](references/advanced/guardrails.md) | PII 检测、内容过滤 |
| MCP | [MCP](references/advanced/mcp.md) | Model Context Protocol 集成 |
## 集成主题
| 主题 | 文档 | 说明 |
|------|------|------|
| Models | [模型](references/integration/models.md) | 多提供商模型初始化 |
| Messages | [消息](references/integration/messages.md) | 消息类型和内容块 |
| Retrieval | [检索](references/integration/retrieval.md) | RAG 和知识库构建 |
## 关键概念
### Agent (智能体)
LangChain 1.0 的核心抽象,基于 LangGraph 构建。使用 `create_agent()` 创建。
### Tool (工具)
使用 `@tool` 装饰器定义。可选 ToolRuntime 访问状态、上下文和存储。
### Memory (记忆)
- **Checkpointer**: 短期会话记忆 (InMemorySaver, PostgresSaver)
- **Store**: 长期持久化存储 (InMemoryStore)
### Middleware (中间件)
装饰器风格的扩展机制:
- `@before_model` - 模型调用前处理
- `@after_model` - 模型调用后处理
- `@wrap_tool_call` - 工具调用包装
- `@dynamic_prompt` - 动态系统提示
## 常见模式
### 基础 Agent
```python
from langchain.agents import create_agent
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[my_tool],
system_prompt="You are helpful.",
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "hello"}]}
)
```
### 带记忆的 Agent(会话持久化)
```python
from langgraph.checkpoint.memory import InMemorySaver
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[my_tool],
checkpointer=InMemorySaver(),
)
# 使用 thread_id 标识会话
config = {"configurable": {"thread_id": "1"}}
agent.invoke(
{"messages": [{"role": "user", "content": "My name is Bob"}]},
config
)
agent.invoke(
{"messages": [{"role": "user", "content": "What's my name?"}]},
config
)
```
### 生产环境 Memory(使用数据库)
```python
from langgraph.checkpoint.postgres import PostgresSaver
DB_URI = "postgresql://postgres:postgres@localhost:5432/postgres"
with PostgresSaver.from_conn_string(DB_URI) as checkpointer:
checkpointer.setup() # 自动创建表
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[my_tool],
checkpointer=checkpointer,
)
```
### 带上下文的 Agent(Runtime Context)
```python
from dataclasses import dataclass
from langchain.tools import tool, ToolRuntime
@dataclass
class Context:
user_id: str
@tool
def get_user_info(runtime: ToolRuntime[Context]) -> str:
"""Get user information."""
user_id = runtime.context.user_id
return f"User ID: {user_id}"
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[get_user_info],
context_schema=Context,
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "get my info"}]},
context=Context(user_id="user_123")
)
```
### 带结构化输出的 Agent
```python
from dataclasses import dataclass
from langchain.agents.structured_output import ToolStrategy
@dataclass
class Response:
answer: str
confidence: float
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[my_tool],
response_format=ToolStrategy(Response),
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "what is 2+2?"}]}
)
print(result['structured_response'])
# Response(answer="4", confidence=1.0)
```
### 完整示例(生产级 Agent)
```python
from dataclasses import dataclass
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool, ToolRuntime
from langgraph.checkpoint.memory import InMemorySaver
from langchain.agents.structured_output import ToolStrategy
@dataclass
class Context:
user_id: str
@dataclass
class ResponseFormat:
answer: str
confidence: float | None = None
@tool
def get_weather(city: str) -> str:
"""Get weather for a city."""
return f"Sunny in {city}"
@tool
def get_user_location(runtime: ToolRuntime[Context]) -> str:
"""Get user's location."""
return "San Francisco" if runtime.context.user_id == "1" else "Unknown"
# 配置模型
model = init_chat_model(
"claude-sonnet-4-5-20250929",
temperature=0.5,
max_tokens=1000
)
# 创建 agent
agent = create_agent(
model=model,
system_prompt="You are a weather assistant.",
tools=[get_weather, get_user_location],
context_schema=Context,
response_format=ToolStrategy(ResponseFormat),
checkpointer=InMemorySaver(),
)
# 运行 agent
config = {"configurable": {"thread_id": "1"}}
result = agent.invoke(
{"messages": [{"role": "user", "content": "What's the weather?"}]},
config=config,
context=Context(user_id="1")
)
```
## 资源链接
- [核心概念](references/core-concepts/overview.md) - LangChain 概述
- [快速开始](references/core-concepts/quickstart.md) - 10行代码创建 Agent
- [官方文档](https://python.langchain.com)
- [API 参考](https://reference.langchain.com/python)
This skill is a compact LangChain 1.0 usage guide for building LLM-driven agents and applications. It provides quick references for Agent creation, Tools, Memory, Middleware, Runtime context, and structured output patterns. Use it when you need practical, copy-paste examples and patterns to integrate LangChain into Python projects.
The guide explains core workflows: create_agent -> ReAct loop -> Tool invocation -> result return. It shows how to define @tool functions, access ToolRuntime and context, and wire in short-term and long-term memory via checkpointers and stores. It also covers middleware decorators for intercepting model and tool calls and how to enable structured outputs and streaming.
What minimal packages should I install?
Install langchain plus any provider integrations you need (for example langchain-openai or langchain-anthropic). Use Python 3.10+.
How do I keep conversation state across requests?
Provide a checkpointer when creating the agent (InMemorySaver for development, PostgresSaver for production) and pass a configurable thread_id to group messages into a session.