Claude Code的Dynamic Workflows和LangGraph Deep Agents的Interpreters
一、Claude Code — Dynamic Workflows
Dynamic Workflows 让 Claude 动态编写编排脚本,在单次 session 中调度数十到数百个并行 subagent,并在结果交给用户之前自动完成验证。它专门针对"太大、太复杂、一次过不了"的任务而设计。
核心机制:
当 workflow 启动后,Claude 根据 prompt 动态规划、拆解子任务,并将工作扇出到并行运行的多个 subagent。各 subagent 从独立角度攻克问题,另有对抗型 agent 专门尝试推翻其结论,整个流程持续迭代直到答案收敛。进度实时保存,中断后从断点续跑而不是重头开始。
两种启动方式:直接对 Claude 说"Create a workflow",或在 effort 菜单开启 ultracode 设置让 Claude 自行判断何时启用。
典型场景:全代码库 bug 排查与安全审计、大规模框架迁移(跨数千个文件)、以及对正确性要求极高的关键工作(多套独立方案 + 对抗验证)。
真实案例:Bun 将约 75 万行代码从 Zig 移植到 Rust,99.8% 原有测试通过,从第一个 commit 到合并只用了 11 天,全程由 dynamic workflows 驱动:一批 agent 并行转写文件,每个文件配两个 reviewer,修复循环持续跑到编译和测试全过为止。
二、LangGraph Deep Agents — Interpreters
Interpreter 给 agent 提供一个可编程的工作空间,让它在其中探索数据、协调工具调用,并把中间结果挡在模型上下文之外。Agent 写代码表达意图,内存中的运行时执行这段代码并只把相关结果返回给模型。
与 sandbox 的区别:sandbox 是对外部环境执行操作(运行命令、安装依赖、修改文件),而 interpreter 是在 agent 循环内部行动:组合工具、保持状态、决定什么信息应该返回给模型。
适用场景(选择判断矩阵):
| 需求 | 用什么 |
|---|---|
| 一两个简单外部调用 | 普通 tool calling |
| 需要循环、分支、重试或聚合结果的小程序 | Interpreter |
| 从代码中发起多个 tool 调用 | Interpreter + 程序化 tool calling |
| 跨线程可复用的辅助函数 | Interpreter + Interpreter Skills |
| Shell 命令、包安装、完整 OS 文件系统 | Sandboxes |
安装与初始化:
pip install -U "deepagents[quickjs]"
from deepagents import create_deep_agent
from langchain_quickjs import CodeInterpreterMiddleware
agent = create_deep_agent(
model="openai:gpt-5.4",
middleware=[CodeInterpreterMiddleware()],
)
middleware 会向 agent 添加一个 eval 工具,在持久化 QuickJS 上下文中运行 TypeScript,捕获 console.log,并返回最后一个表达式的值。
程序化 Tool Calling(PTC):
PTC 把选定的 agent tool 暴露在 interpreter 的全局 tools 命名空间下,让 agent 可以用代码在循环、分支、重试或并行批次中调用工具,而不是让模型一次发一个 tool call 再等结果。中间的 tool 结果可以在 interpreter 里过滤或聚合,只有最终结果回到模型上下文,这在多工具多步骤流程中更节省 token。
agent = create_deep_agent(
model="openai:gpt-5.4",
middleware=[CodeInterpreterMiddleware(ptc=["task"])],
)
在 interpreter 里并行调度 subagent:
const topics = ["retrieval", "memory", "evaluation"];
const reports = await Promise.all(
topics.map((topic) =>
tools.task({
description: `Research ${topic} and return three concise findings.`,
subagent_type: "general-purpose",
}),
),
);
reports.join("\n\n");
状态快照与时间旅行:
interpreter 状态(全局变量、函数、已导入模块)在每次 agent run 结束后被序列化快照,下次 run 时恢复。配合 LangGraph 的 checkpointer,可以回到任意历史时间点——恢复图的 checkpoint 同时恢复对应的 interpreter 状态,适合调试和回放。
三、Interpreter Skills
Interpreter Skills 的核心就是把 skill 目录下的 JS/TS 脚本文件注册为可 import 的模块,agent 在 interpreter 里写 await import("@/skills/<name>") 就能调用里面的函数。
普通 skill 给 agent 提供指令和上下文;Interpreter skill 额外给 agent 提供可导入的函数,让它在 interpreter 代码中直接调用。这样就可以把领域特定的逻辑打包一次,变成 agent 工作空间里的确定性构建块——不再让模型每次都重新"发明"一个解析器、评分器、规范化器或聚合函数,而是直接 import 一个经过测试的辅助函数,与工具、subagent 和运行时状态组合使用。
适合做成 Interpreter Skill 的代码需满足:在多个 prompt、agent 或项目间可复用;足够确定性,每次行为一致;细节太多不适合放在模型上下文里;在更大的工作流中有用(比如给搜索结果评分、规范化 API 响应、验证记录、分组行、把数据转换成报告格式)。
文件结构:
skills/
└── order-helpers/
├── SKILL.md ← 元数据 + 使用说明
└── index.ts ← 实际可导入的代码
SKILL.md 的关键字段:module: index.ts——这个字段标记它是一个 interpreter skill,指向脚本文件。
---
name: order-helpers
description: Helper functions for normalizing and grouping order records.
module: index.ts ← 必须有这个字段
---
# order-helpers
Import these utilities into the REPL:
```typescript
const { groupByStatus } = await import("@/skills/order-helpers");
groupByStatus(...);```
index.ts 的内容(正经的 TypeScript,不是说明文字):
interface Order {
id: string;
status: string;
}
export function groupByStatus(orders: Order[]) {
return orders.reduce((acc, order) => {
acc[order.status] = acc[order.status] ?? [];
acc[order.status].push(order);
return acc;
}, {});
}
配置 agent 时,CodeInterpreterMiddleware 必须传入 skills_backend 参数,让它知道从哪里加载 skill 模块:
from deepagents import create_deep_agent
from deepagents.backends import StateBackend
from langchain_quickjs import CodeInterpreterMiddleware
backend = StateBackend()
agent = create_deep_agent(
model="openai:gpt-5.4",
backend=backend,
skills=["/skills/"], # 告诉 agent 去哪扫描 SKILL.md
middleware=[CodeInterpreterMiddleware(skills_backend=backend)], # 同一个 backend
)
Agent 在 interpreter 里这样调用:
const { groupByStatus } = await import("@/skills/order-helpers");
const grouped = groupByStatus(orders);
grouped;
SKILL.md 里的 module 字段是让一个 skill 变为可导入的关键——没有这个字段,它就只是普通 skill(提供指令文本),不能被 interpreter import。
三者的关系总结

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)