本指南使用 create_agent 和 deepagents middleware 从第一性原理构建数据分析代理。与其从 create_deep_agent 开始,不如逐块组装运行框架:这样你可以清楚看到每个组件添加了什么,并且只替换用例真正需要的部分。 你将构建的代理会:
  1. 接收用于分析的 CSV 文件
  2. 在隔离 sandbox 中编写并执行 Python 代码
  3. 将可视化工作委派给专门的 subagent
  4. 从 skills 文件加载数据分析模式

设置

pip install deepagents langsmith
启用 LangSmith tracing 以检查每一步:
export LANGSMITH_TRACING=true
export LANGSMITH_API_KEY=...

第 1 步:最小代理

一个模型,一个循环。暂时没有其他东西。
from langchain.agents import create_agent

agent = create_agent("anthropic:claude-sonnet-4-6", tools=[])
这可以运行,但代理没有文件系统,也无法执行代码。接下来的步骤会添加这些能力。

第 2 步:添加 sandbox 后端

LangSmithSandbox 为代理提供带文件系统和 execute 工具的隔离环境,用于运行 shell 命令。代理可以安装包、编写脚本并运行它们,而不会触碰宿主机。
from langchain.agents import create_agent
from langsmith.sandbox import SandboxClient
from deepagents.backends.langsmith import LangSmithSandbox
from deepagents.middleware import FilesystemMiddleware

client = SandboxClient()
sandbox = client.create_sandbox(template_name="deepagents-deploy")
backend = LangSmithSandbox(sandbox=sandbox)

agent = create_agent(
    "anthropic:claude-sonnet-4-6",
    tools=[],
    middleware=[FilesystemMiddleware(backend=backend)],
)
FilesystemMiddleware 会添加 read_filewrite_fileedit_fileglobgrep。由于 LangSmithSandbox 实现了 sandbox protocol,它还会添加 execute:代理现在可以运行 shell 命令。 上传 CSV 并调用:
import csv, io

rows = [
    ["Date", "Product", "Units", "Revenue"],
    ["2025-08-01", "Widget A", 10, 250],
    ["2025-08-02", "Widget B", 5, 125],
    ["2025-08-03", "Widget A", 7, 175],
    ["2025-08-04", "Widget C", 3, 90],
]
buf = io.StringIO()
csv.writer(buf).writerows(rows)
backend.upload("sales.csv", buf.getvalue().encode())

result = agent.invoke({
    "messages": [{"role": "user", "content": "Analyze sales.csv. Summarize trends."}]
})

第 3 步:添加上下文管理

对于较长的分析会话,上下文窗口会被填满。SummarizationMiddleware 会自动压缩历史,让代理在不触及 token 限制的情况下继续工作。
from deepagents.middleware import FilesystemMiddleware, SummarizationMiddleware

model = "anthropic:claude-sonnet-4-6"

agent = create_agent(
    model=model,
    tools=[],
    middleware=[
        FilesystemMiddleware(backend=backend),
        SummarizationMiddleware(model=model, backend=backend),
    ],
)

第 4 步:添加 skills

Skills 通过渐进式披露为代理提供按需领域知识:只有当前任务需要时才加载。在 skills 目录中创建一个 skill 文件:
skills/
  pandas-patterns/
    SKILL.md
---
name: pandas-patterns
description: Common pandas and matplotlib patterns for data analysis and visualization
---

## Data loading
Use `pd.read_csv()` for CSV files. Always check `df.info()` and `df.describe()` first.

## Visualization
Use `matplotlib` for bar charts, `seaborn` for statistical plots.
Save figures with `plt.savefig("output.png", dpi=150, bbox_inches="tight")`.

## Reporting
Write a markdown summary to `report.md` alongside any generated charts.
from deepagents.middleware import FilesystemMiddleware, SkillsMiddleware, SummarizationMiddleware

agent = create_agent(
    model=model,
    tools=[],
    middleware=[
        FilesystemMiddleware(backend=backend),
        SummarizationMiddleware(model=model, backend=backend),
        SkillsMiddleware(backend=backend, sources=["./skills/"]),
    ],
)

第 5 步:添加可视化 subagent

有些任务适合隔离运行。可视化 subagent 在自己的上下文窗口中运行,将图表生成与主分析分离,并支持并行执行。
from langchain.agents.middleware import TodoListMiddleware
from deepagents import SubAgent
from deepagents.middleware import (
    FilesystemMiddleware,
    SkillsMiddleware,
    SubAgentMiddleware,
    SummarizationMiddleware,
)

visualizer: SubAgent = {
    "name": "visualizer",
    "description": "Generates charts and visualizations from data files in the sandbox.",
    "system_prompt": "You are a data visualization specialist. Write Python scripts using matplotlib and seaborn. Save all figures as PNG files.",
    "tools": [],
}

agent = create_agent(
    model=model,
    tools=[],
    middleware=[
        FilesystemMiddleware(backend=backend),
        SummarizationMiddleware(model=model, backend=backend),
        SkillsMiddleware(backend=backend, sources=["./skills/"]),
        TodoListMiddleware(),
        SubAgentMiddleware(backend=backend, subagents=[visualizer]),
    ],
)
主代理负责分析和规划;它通过 task 工具将图表生成委派给 visualizer subagent。

你构建了什么

Middleware添加的能力
FilesystemMiddleware + LangSmithSandbox隔离文件系统 + execute 工具
SummarizationMiddleware自动上下文压缩
SkillsMiddleware按需加载领域知识
TodoListMiddleware + SubAgentMiddleware并行可视化 subagent
这与 create_deep_agent 使用的是同一套基础能力:这里手动组装,因此你可以精确控制包含哪些内容。可能性不止于此:查看 Prebuilt middleware 了解完整的可组合能力列表,并查看 create_agent 参考了解所有配置选项。 如果需要预组装版本,请参阅 create_deep_agentCustomize Deep Agents。如果需要使用 create_deep_agent 的完整数据分析示例,请参阅 Data analysis