

Sydney Runkle、Thushanth Bengre,2026 年 11 月 5 日,4 分钟阅读 返回博客 创建 Agent 分享
核心要点
- 随着 Agent 承担更大的目标,它们需要在对用户保持响应的同时,并行推进许多耗时较长的任务。
- 异步子 Agent(async subagent)将 Agent 拆分为两部分:一个始终对用户保持可用的编排器(orchestrator),以及在后台运行任务、完成后向编排器汇报的子 Agent。
- 后台工作正在成为 Agent 基础设施的常态,从 Claude Code 这类编码 Agent,到 OpenAI 的 dots 这类个人 Agent,都是如此。
想象一位幕僚长,每次你交给他一个大项目,他就消失不见,直到项目完成才回来。你大概会立刻把他解雇。优秀的幕僚长会让项目在后台推进,同时保持随时可联系,并持续向你汇报进展。随着我们要求 Agent 朝着更大的目标工作,它们也需要同样的两个特性。Agent 必须保持响应性,能够带着此前全部上下文立即响应新的指令;同时必须保持生产力,能够同时推进许多大型任务。
我们长期以来用于构建 Agent 的架构无法同时满足这两项要求。在标准的 ReAct 循环中,每次长时间的工具调用都会阻塞循环,其他所有任务都只能在它后面排队。因此,我们看到整个生态正在趋同于一种拆分方式:一个 Agent 始终陪伴用户,后台工作者负责执行长时间的工作。Claude Code 默认在后台运行子 Agent,OpenAI 的 dots 将工作交给后台工作者,从而同时推进多件事,DeepSeek Harness 则围绕一个负责与人对话的路由器和并行运行任务的后台工作者,构建了它的超级 Agent。
我们正通过异步子 Agent 将这一模式引入 Deep Agents。编排器始终对用户保持可用,并负责组织对话的上下文;异步子 Agent 则作为后台工作者运行,完成后向编排器汇报。这样,Agent 能承担的工作量便取决于后台工作者的数量,而不再受限于单一循环的长度。
异步子 Agent 的工作方式
Agent 在一个循环中运行。模型调用工具、等待结果,再决定下一步做什么。过去,工具和子 Agent 会阻塞这个循环,直到它们返回结果,就像代码依次等待每个缓慢调用完成的写法。异步子 Agent 的工作方式类似于用 asyncio.create_task 启动的任务,或者一个你尚未 await 的 Promise。调用会立即返回,工作在后台独立运行,结果稍后返回。

异步工作依赖系统的两个特性:
- 用户能够联系到编排器。 编排器是用户直接交互的 Agent。子 Agent 不再占用它的循环,因此只要编排器自身的循环不忙,用户就能联系到它,而无需等待每个子 Agent 完成。
- 任务并行运行且不阻塞。 编排器在有工作到来时启动子 Agent,而不是等待一整批任务全部返回。
编排器通过五个工具管理异步子 Agent:
start_async_task在独立线程上启动子 Agent,并立即返回。check_async_task获取任务状态,并在任务完成后获取其结果。update_async_task向正在运行的任务发送新指令。cancel_async_task停止正在运行的任务。list_async_tasks列出所有任务及其状态。
引导正在运行的子 Agent 与联系编排器是两回事。当编排器通过 update_async_task 发送后续指令时,该子 Agent 定义中的 update_strategy 字段决定会发生什么:
"interrupt"(默认值)会停止当前运行,并用新指令重新启动子 Agent。适用于“改用 Postgres”这类纠正。"enqueue"会暂存后续指令,直到当前运行结束。适用于“完成后运行测试”这类追加。
通知的工作方式
每个未完成的任务都会列在编排器的系统提示中,因此它始终知道有哪些任务正在进行。它可以用 check_async_task 轮询,任务也可以主动汇报:
- 如果编排器忙碌,它会在每次模型调用前检查未完成的任务,并在运行过程中接收结果。
- 如果编排器空闲,子 Agent 会通过一次新的运行将其唤醒。
- 如果编排器因等待审批而暂停,审批流程不受影响,结果会在用户答复后送达。

需要审批的子 Agent 会显示为 waiting,用户在子 Agent 自己的线程上作出答复,不会打断编排器。在 Slack 上的 Managed Deep Agents 中,请求会回帖到原始线程。
我们预计这一模式将推广到子 Agent 之外的各类工具。OpenAI 最近新增了对异步工具调用的支持:模型在调用工具后继续工作,由你的应用在后续请求中返回结果。
使用异步子 Agent
异步子 Agent 已在 Python 和 JavaScript 版 Deep Agents 中提供,也在 Managed Deep Agents 中提供;在那里,只需一个字段即可让子 Agent 变为异步:
from managed_deepagents import define_deep_agent
agent = define_deep_agent(
name="research-assistant",
model="openai:gpt-5.5",
subagents=[
{
"name": "researcher",
"description": "Researches a topic in the background.",
"system_prompt": "Research the topic and report your findings.",
"async": True,
},
],
)
在 Managed Deep Agents 中,每个对外服务的 Agent 还会获得一个异步版的 general-purpose 子 Agent,因此它可以在运行时决定将委派的工作放在前台还是后台执行。
任务通知目前处于测试阶段,API 仍可能变化。async-deep-agents 仓库提供了一个可运行的 supervisor 示例,包含 Python 和 TypeScript 版本的研究员与编码子 Agent。
不妨试用异步子 Agent,并在 GitHub issues 或论坛上告诉我们你的想法。
相关内容

Deep Agents · Agent 架构
我们如何为 Deep Agents 优化浏览器使用

Sydney Runkle,2026 年 11 月 3 日,10 分钟阅读

Agent 架构
Managed Deep Agents v0.10:浏览器使用与异步子 Agent


Nathan Drezner、Sydney Runkle,2026 年 10 月 29 日,6 分钟阅读

Deep Agents · Agent 架构 · 部署
Managed Deep Agents 中的浏览器使用

Sydney Runkle,2026 年 10 月 29 日,7 分钟阅读
感谢!你的提交已收到!哎呀!提交表单时出了点问题。
看看你的 Agent 到底在做什么
LangSmith 是我们的 Agent 工程平台,帮助开发者调试每一次 Agent 决策、评估变更,并一键部署。