跳到正文
RadarAI· LangChain:Blog(RSS)·· 3 小时前AI 评分62

LangChain 为 Deep Agents 推出 async subagents 后台子智能体

AI 导读

LangChain 在 Deep Agents 中推出 async subagents,让编排器保持对用户可响应,子智能体作为后台 worker 并行执行长任务并在完成后回报。

正文 · AI 翻译

LangChain:Blog·2026-11-06 04:00· 1 小时前AI 评分65

Agents 正在走向异步

AI 导读

LangChain 在 Deep Agents 中推出 async subagents,让编排器保持对用户可响应,子智能体作为后台 worker 并行执行长任务并在完成后回报。

正文 · 原文

想象一位幕僚长,每次你交给他一个大项目,他就消失不见,直到项目完成才回来。你大概会立刻解雇他。一位优秀的幕僚长会让项目在后台持续推进,同时保持可联系,并沿途向你汇报进展。当我们要求智能体朝着更大的目标努力时,它们也需要同样的两个特性。智能体必须保持响应性,能立即基于此前所有上下文执行新指令;同时必须保持生产力,能同时推进许多大型任务。

我们长期以来用于构建智能体的架构无法同时满足这两项要求。在标准的 ReAct 循环中,每次长时间的工具调用都会阻塞循环,其他所有任务都排在它后面。因此,我们看到生态系统正趋向于一种分工:一个智能体始终陪伴用户,后台 worker 负责长时间工作。Claude Code 默认在后台运行子智能体,OpenAI 的 dots 将工作交给后台 worker,以同时推进多项事务,而 DeepSeek Harness 围绕一个与用户对话的路由器和并行执行任务的后台 worker 构建了其超级智能体。

我们正通过 async subagents 将这一模式引入 Deep Agents。编排器保持对用户可用,并持续整理对话上下文,而 async subagents 作为后台 worker 运行,并在完成时回报。这样,智能体能承担的工作量便随后台 worker 的数量增长,而不是受限于单个循环的长度。

async subagents 如何工作

智能体在一个循环中运行。模型调用工具、等待结果,然后决定下一步做什么。过去,工具和子智能体会阻塞该循环,直到它们返回,就像代码依次 await 每个慢速调用一样。async subagent 的工作方式类似于用 asyncio.create_task 启动的任务,或一个你尚未 await 的 Promise。调用会立即返回,工作在后台独立运行,结果稍后返回。

Sync vs async subagents: the orchestrator hands work to async subagents and stays free to talk to the user

编排器将工作交给 async subagents,并保持空闲以便与用户对话。

异步工作依赖于系统的两个特性:

  • 用户可以联系到编排器。 编排器是用户直接交互的智能体。子智能体不再占用其循环,因此只要编排器自身的循环不忙,用户就能联系到它,而不必等待每个子智能体完成。
  • 任务并行运行且不阻塞。 编排器在工作到来时即启动子智能体,而不是等待整批任务返回。

编排器通过五个工具管理 async subagents:

  • start_async_task 在独立线程上启动子智能体并立即返回。
  • check_async_task 获取任务状态,并在任务完成后获取其结果。
  • update_async_task 向正在运行的任务发送新指令。
  • cancel_async_task 停止正在运行的任务。
  • list_async_tasks 列出所有任务及其状态。

引导正在运行的子智能体与联系编排器是两回事。当编排器通过 update_async_task 发送后续指令时,该子智能体定义中的 update_strategy 字段决定会发生什么:

  • "interrupt"(默认值)会停止当前运行,并用新指令重启子智能体。适用于类似“改用 Postgres”这样的纠正。
  • "enqueue" 会保留后续操作,直到当前运行结束。可以用它来添加类似“完成后运行测试”这样的操作。

通知的工作方式

每个未完成的任务都会列在编排器的系统提示中,因此它始终知道哪些任务正在进行中。它可以用 check_async_task 轮询,或者任务可以自行回报:

  • 如果编排器忙碌,它会在每次模型调用前检查未完成的任务,并在运行过程中获取结果。
  • 如果它空闲,子代理会通过一次新的运行将其唤醒。
  • 如果它因等待审批而暂停,审批会保持原样,结果会在用户答复后送达。

An async subagent reports back whether the orchestrator is busy, idle, or paused on an approval

无论编排器是忙碌、空闲,还是因等待审批而暂停,异步子代理都会回报结果。

需要审批的子代理会显示为 waiting,用户在子代理自己的线程上答复,不会打断编排器。在 Slack 上的 Managed Deep Agents 中,该请求会回帖到原始线程。

我们预计这种模式会从子代理推广到各类工具。OpenAI 最近新增了对异步工具调用的支持,模型在调用工具后可以继续工作,你的应用会在后续请求中把结果发回。

使用异步子代理

异步子代理已在 Python 和 JavaScript 的 Deep Agents 中提供,也在 Managed Deep Agents 中提供;在那里,将子代理设为异步只需一个字段:

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 中,每个提供服务的代理还会获得一个 general-purpose 子代理的异步副本,因此它可以在运行时决定是在前台还是后台运行委派的工作。

任务通知处于测试阶段,因此 API 仍可能变化。async-deep-agents 仓库中有一个可用的 supervisor,包含 Python 和 TypeScript 编写的 researcher 和 coder 子代理。

试试异步子代理,并在 GitHub issues 或 forum 上告诉我们你的想法。

来源:LangChain:Blog · langchain.com

来源:RadarAI · aihot.news