AI News HubLIVE
站内改写2 分钟阅读

在Deep Agents中引入动态子代理

动态子代理允许AI智能体使用代码而非工具调用来大规模编排工作。了解Deep Agents中的程序化编排如何保证覆盖范围、处理扇出,并通过常见编排模式和实时跟踪实现可靠的多步骤复杂智能体管道。

随着AI智能体承担越来越复杂的任务,它们在规模化的可靠执行和上下文管理方面面临挑战。Deep Agents引入的动态子代理(Dynamic Subagents)通过一种全新的方式解决了这些问题:智能体不再通过通用的工具调用逐个启动子任务,而是编写一段简短的脚本来驱动子代理的执行。这种方式利用了模型在编写代码(如循环、分支、并发等)方面的优势,生成适合任务的编排逻辑。

传统的子代理调用方式在规模较小时工作良好,但当需要同时启动数百个子代理,或者编排逻辑涉及条件分支和多阶段处理时,就会失效。动态子代理通过程序化编排解决了这一难题:智能体编写一个简短的脚本,在轻量级解释器中运行,从而实现对子代理的灵活调度。例如,在处理一份300页的文档时,智能体不再需要调用300次工具,而是编写一个循环,使用Promise.all并行处理所有页面。这种方法的优势在于:第一,确定性覆盖——脚本保证了所有项都会被处理,而不会像无结构方法那样只处理部分就停止;第二,可靠复杂编排——将编排逻辑写成代码,比让模型通过一系列工具调用来重现更加可靠。

要使用动态子代理,需要两个组件:用于分派工作的子代理和代码解释器。Deep Agents自带一个基于QuickJS的可选解释器。用户只需安装相应的中间件包,并在创建智能体时传入CodeInterpreterMiddleware即可。此外,Deep Agents内置了一个通用子代理,用户也可以配置自定义子代理,通过名称、描述和系统提示来指定不同角色。要触发动态子代理,只需在提示中包含“workflow”一词。例如,要求智能体“运行一个工作流,检查src/routes/中的每个文件并总结主要风险”。最快的尝试方式是使用dcode,这是基于Deep Agent构建的终端编码智能体,默认启用了代码解释器,开箱即支持动态子代理。

动态子代理的工作原理是:智能体获得一个评估工具,它编写JavaScript代码在解释器中安全执行。解释器暴露了一个内置的task()全局函数,用于从代码中分派子代理。task()接受描述、子代理类型和可选的响应模式,返回结构化结果。模型根据任务编写不同的代码(循环、分支、Promise.all等),解释器确定性地执行。

文章还介绍了六种常见的编排模式,这些模式并非固定功能,而是根据任务自然形成的结构:

  • 分类执行:先对项目进行分类,然后由专门的子代理处理每一类。适用于混合输入需要不同处理的情况,如支持工单分类。
  • 扇出合成:并行执行相同类型的任务,然后合并结果。适用于批量文档分析或代码审查。
  • 对抗验证:两轮验证,第一轮产生发现,第二轮独立验证每个发现,仅保留一致同意的结果。适用于误报代价高的安全审计。
  • 生成过滤:多个子代理独立生成解决方案,然后比较评分,保留最佳。适用于架构方案或内容变体。
  • 锦标赛式:两两比较,胜者晋级,直到选出冠军。适用于主观标准下的优化。
  • 循环直至完成:重复发现循环,去重,直到没有新结果。适用于范围未知的全面搜索。

动态子代理是递归语言模型(Recursive Language Model)理念的简单实现:智能体编写代码,代码调用更多智能体。它不受上下文窗口的限制,也不被固定工作流所束缚。智能体可以自主分解问题并重组结果。随着模型代码编写能力的提升,这种方法的潜力将不断增长。Deep Agents今天就将动态子代理交到了用户手中,用户可以通过添加代码解释器来开始使用,或者直接使用dcode体验其开箱即用的能力。