LangChain为Deep Agents加入异步子代理:长任务转后台,主代理继续对话
LangChain称,Deep Agents的Python、JavaScript版本及Managed Deep Agents已支持异步子代理:主代理负责与用户交互,子代理在后台并行执行长任务,完成后再回报结果。任务通知功能仍处于beta阶段,API可能变动。
AI解读:LangChain在Deep Agents中引入异步子代理,用来解决标准ReAct循环中长工具调用阻塞整个循环的问题:主代理(orchestrator)保持对用户可达,子代理作为后台工作线程运行长任务,完成后再回报。
主代理通过五个工具管理异步任务:start_async_task启动并立即返回、check_async_task查询状态和结果、update_async_task追加指令、cancel_async_task取消任务、list_async_tasks列出全部任务状态。
向运行中的子代理追加指令时,子代理定义的update_strategy字段决定行为:默认的interrupt会中断当前运行并以新指令重启,适合纠错;enqueue会等当前运行结束后再处理,适合追加事项。
回报机制按主代理状态区分:主代理忙碌时,每次模型调用前检查未完成任务并取回结果;空闲时由子代理发起新运行唤醒;等待审批时审批不被中断,用户答复后结果再送达。
LangChain将该模式归为生态系统趋势,并列举Claude Code默认在后台运行子代理、OpenAI的dots把工作交给后台worker、DeepSeek Harness以路由加后台worker构建超级代理作为例子;这些均为LangChain的叙述,未附对比数据。
可用范围包括Deep Agents的Python和JavaScript版本以及Managed Deep Agents;在后者中把子代理设为异步只需一个字段,且每个托管代理会附带一个通用子代理的异步副本。任务通知为beta,API可能变化。
LangChain发布博客称,Deep Agents现已支持异步子代理(async subagents):一个主代理留在用户身边维护对话上下文,异步子代理在后台执行长任务并在完成后回报。该功能已在其Python和JavaScript版Deep Agents以及Managed Deep Agents中提供。
LangChain将这一设计与标准ReAct循环对比:在ReAct循环中,每次长时间工具调用都会阻塞循环,其他任务只能排队等待;异步子代理的调用会立即返回,工作在后台独立运行,结果稍后送回。
五个管理工具与两种追加指令策略
主代理通过五个工具管理异步子代理:start_async_task在独立线程上启动子代理并立即返回;check_async_task获取任务状态,任务完成后取得结果;update_async_task向运行中的任务发送新指令;cancel_async_task停止运行中的任务;list_async_tasks列出所有任务及状态。
LangChain说明,向运行中的子代理追加指令与联系主代理是两件事。追加指令时,子代理定义中的update_strategy字段决定处理方式:interrupt为默认值,会停止当前运行并以新指令重启子代理,适用于“改用Postgres”这类纠错;enqueue会保留追加指令直到当前运行结束,适用于“跑完后再运行测试”这类补充。
通知与审批如何送达
LangChain称,每个未完成任务都会列在主代理的系统提示中,因此主代理始终知道有哪些任务在进行;它可以用check_async_task轮询,任务也可以自行回报。
回报方式取决于主代理状态:主代理忙碌时,它在每次模型调用前检查未完成任务,并在运行中途取回结果;主代理空闲时,子代理以一次新运行将其唤醒;主代理因等待审批而暂停时,审批不受打扰,用户答复后结果再送达。
需要审批的子代理会显示为等待状态,用户在该子代理自己的线程上答复,不会打断主代理。LangChain提到,在Slack上的Managed Deep Agents中,该请求会发回原线程。
适用范围与限制
LangChain表示,异步子代理可用于Deep Agents的Python和JavaScript版本,以及Managed Deep Agents。在Managed Deep Agents中,把子代理设为异步只需一个字段(async设为True);每个托管代理还会获得一个通用子代理的异步副本,可在运行时决定委派工作在台前还是后台执行。
LangChain明确,任务通知功能处于beta阶段,API仍可能变化。博客同时给出一个Python与TypeScript的示例仓库async-deep-agents,内含带researcher和coder子代理的supervisor。
LangChain还提到,异步工具调用可能在子代理之外推广;它援引OpenAI近期加入的异步工具调用支持作为例子,称模型调用工具后可继续工作,应用在后续请求中送回结果。