Visual Studio Code 中的子代理

在处理复杂任务时,你可以将子任务委派给子代理。子代理是一个独立的人工智能代理,负责专注工作,如研究主题、分析代码或审查变更,并将结果报告给主代理。因为每个子代理都在自己的上下文窗口运行,所以不会给你的主对话增加噪音。VS Code 还可以并行运行多个子代理,以加快多部分任务的速度。

例如,内置的计划代理使用子代理进行研究和分析,然后再制定实施计划。每个子代理都自主工作,只返回其发现。计划代理人将这些发现综合成最终方案。

默认情况下,子代理使用与主聊天会话相同的模型和工具,但从一个干净的上下文窗口开始。副代理不会继承主代理的指令或对话记录。他们只收到你提供的任务提示。通过将自定义代理作为子代理运行,你可以为特定任务应用专用行为、工具和模型。

子代理执行的工作原理

下图展示了亚代理的工作原理。主代理接收你的任务,将子任务委派给一个或多个子代理,每个子代理各自运行上下文窗口,然后将结果合并。

图示显示子代理执行流程,主代理将子任务委派给在隔离上下文窗口运行的子代理,并接收结果总结。

子代理是同步的:主代理等待代理结果后继续。这种阻塞行为是有意为之:子代理的发现通常指导任务的下一步。没有子代理人的结果,主代理人就缺乏有效行动所需的信息。

然而,VS Code 可以并行生成多个子代理。当你请求并行分析(例如“同时分析安全性、性能和可访问性”)时,VS Code 会同时运行这些子代理,并等待所有结果后主代理继续。

注释

子代理不同于开始新的代理会话。新会话会创建一个完全不同的对话,与当前任务无关。子代理维持这种关系:他们专注于工作,并向主代理汇报,主代理继续控制整体任务。

用户所看到的内容

当子代理运行时,聊天中显示为可折叠工具调用。默认情况下,子代理会被折叠,并显示:

  • 如果你指定了,请填写定制代理的姓名。
  • 当前运行的工具(例如,“读取文件......”或“正在搜索代码库......”)

选择子代理工具调用以展开,查看完整细节,包括子代理执行的所有工具调用、传递给子代理的提示以及返回的结果。

这种可视化让你可以控制看到多少细节,而不会让主对话被中间步骤打乱。

为什么要用分级代理?

分代理帮助您更有效地管理复杂的AI辅助工作流程:

  • 保持主代理上下文聚焦:主代理的上下文窗口会从每个提示和响应中积累信息。通过将研究、分析或实施任务卸给子代理,可以防止上下文臃肿,帮助主代理专注于整体任务的协调。

  • 通过并行执行提升性能:VS Code 可以同时运行多个子代理。例如,在实现某个功能时,你可以研究认证模式,分析现有代码结构,并并行而非顺序地审查文档。

  • 隔离实验或探索性工作:分代理适合那些想探索选项但不确定方向的任务。如果一个子代理人的研究走到了死胡同,只有最终总结会影响你的主要背景,而不是所有中间的探索。

  • 为特定任务应用专用行为:通过将子代理与自定义代理结合,你可以为特定子任务应用专用工具、指令和模型。例如,使用以安全为中心的定制代理来审查代码中的漏洞,而文档代理则生成用户指南。

  • 减少令牌使用和成本:由于子代理有自己的上下文窗口,它们不会将完整的对话历史添加到主代理的上下文中。只有最终结果会返回,这可以显著减少复杂任务的整体代币消耗。

使用场景

以下情景展示了子代理何时可以改进您的AI辅助开发工作流程。

实施前的研究

在构建新功能时,使用子代理研究最佳实践、评估库,或分析代码库中的现有模式,然后主代理开始实施:

Use a subagent to research OAuth 2.0 implementation patterns for Node.js applications.
Compare passport.js vs auth0 vs custom implementation. Return a recommendation with pros and cons.

主代理只收到最终推荐,保持上下文干净以便实际实现。

并行代码分析

在重构或审查代码时,并行运行多个子代理以分析不同的方面:

Analyze this codebase for refactoring opportunities. Use subagents to:
1. Find duplicate code patterns
2. Identify unused exports and dead code
3. Review error handling consistency
4. Check for security vulnerabilities

Compile the findings into a prioritized action plan.
探索多种解决方案

当你不确定最佳方法时,使用子代理探索不同的选项,同时避免影响你的主要语境:

I need to implement caching for this API. Run three subagents in parallel to:
1. Design a Redis-based caching solution
2. Design an in-memory caching solution with LRU eviction
3. Design a hybrid approach with tiered caching

Compare the results and recommend the best approach for our use case.
专门关注的代码审查

使用定制代理作为子代理,应用不同的评审视角:

Review the changes in this PR using subagents:
- Run the security-reviewer agent to check for vulnerabilities
- Run the performance-reviewer agent to identify bottlenecks
- Run the accessibility-reviewer agent to verify a11y compliance

Consolidate findings into a single review summary.

调用子代理

代理发起与用户调用

子代理通常是由代理发起,而非用户在聊天中直接调用。为了让主代理调用子代理,请确保runSubagent工具已启用。

主要代理决定何时需要上下文隔离。你不需要为每个任务手动输入“运行子代理”。图案的运作方式如下:

  1. 你(或你的定制代理的说明)描述了一个复杂的任务。
  2. 主智能体识别任务中从孤立上下文中受益的部分。
  3. 代理启动子代理,只传递相关的子任务。
  4. 子代理自主工作并返回摘要。
  5. 主药剂将结果纳入并继续。

你可以通过提示提示单一研究或平行分析来暗示你想要分代理委派。主代理会启动一个子代理,将任务传递给它,并只接收最终结果。

提示

为了保持一致的子代理行为,请在自定义代理的说明中定义何时使用子代理,而不是每次手动提示。

为了优化子代理的表现,明确定义任务和预期输出。这有助于子代理专注于具体目标,而不会将不必要的上下文反馈给主代理。

请参阅使用场景部分,了解如何结构化调用子代理的提示。

在提示文件中调用子代理

要在提示文件中调用子代理,请确保runSubagent特工工具包含在工具前置物属性:

---
name: document-feature
tools: ['agent', 'read', 'search', 'edit']
---
Run a subagent to research the new feature implementation details and return only information relevant for user documentation.
Then update the docs/ folder with the new documentation.

在提示说明中,你可以通过建议针对特定子任务进行孤立研究或并行分析,提示代理使用子代理。

将自定义代理作为子代理运行(实验性)

默认情况下,子代理继承主聊天会话的代理,并使用相同的模型和工具。要定义子代理的特定行为,可以使用自定义代理。自定义代理可以自定义型号、工具和指令。作为子代理使用时,这些设置覆盖了主会话继承的默认设置。

控制子代理调用

你可以通过使用两个前置属性来控制自定义代理的调用方式:

  • 用户可调用: 控制该代理是否出现在聊天中的代理下拉菜单中(默认为确实如此).设置为错误创建只能作为子代理访问的代理。
  • 失能模型调用: 防止该代理被其他代理作为子代理调用(默认为错误).设置为确实如此而代理应该只被用户明确触发。

例如,创建一个只能作为子代理使用的代理(在下拉菜单中看不到):

---
name: internal-helper
user-invokable: false
---

This agent can only be invoked as a subagent.
注释

推断财产已废弃。用途用户可调用以及失能模型调用而是更细致的控制。

要将自定义代理作为子代理运行,提示 AI 为子代理使用自定义或内置代理。例如:

  • 将研究代理作为子代理运行,以研究该项目的最佳认证方法。
  • 在子代理中使用 Plan agent 来创建 myfeature 的实施计划。然后把计划保存在 plans/myfeature.plan.md 里

限制可用亚剂(实验性)

默认情况下,所有没有disable-model-invocation: true可作为子代理使用。如果两个或多个代理名称或描述相似,AI可能会选择一个未被期望的代理。

您可以通过指定代理人主代理的前言中提到财产,并提供允许的定制代理名单。

代理人物业接受:

  • 代理名称列表(例如,['编辑', '搜索']只允许特定的代理
  • *允许所有可用的代理(默认行为)
  • 空数组以防止任何子代理的使用[]
注释

明确列出代理人代理人阵列覆盖disable-model-invocation: true.这意味着你可以创建那些受保护、不受一般子代理使用,但又能被明确允许的特定协调代理访问的代理。

例如,测试驱动开发(TDD)代理应仅使用红色,绿色, 和重构代理人作为子代理人。如果没有限制,TDD代理可能会选择更通用的编码代理来实现测试,而不是专门的TDD代理。

---
name: TDD
tools: ['agent']
agents: ['Red', 'Green', 'Refactor']
---
Implement the following feature using test-driven development. Use subagents to guide the following steps:
1. Use the Red agent to write failing tests
2. Use the Green agent to implement code to pass the tests
3. Use the Refactor agent to improve the code quality

配器模式

子代理支持编排模式,协调代理将工作委派给专业的工作代理。这种方法帮助你构建复杂的工作流程,同时让每个客服专注于自己最擅长的领域。

协调者与工人模式

协调代理管理整体任务,并将子任务委派给专业的子代理。每位员工代理都可以拥有一套定制化的工具。例如,规划和审核代理只需只读访问,而实现者则需要编辑功能。

---
name: Feature Builder
tools: ['agent', 'edit', 'search', 'read']
agents: ['Planner', 'Plan Architect', 'Implementer', 'Reviewer']
---
You are a feature development coordinator. For each feature request:

1. Use the Planner agent to break down the feature into tasks.
2. Use the Plan Architect agent to validate the plan against codebase patterns.
3. If the architect identifies reusable patterns or libraries, send feedback to the Planner to update the plan.
4. Use the Implementer agent to write the code for each task.
5. Use the Reviewer agent to check the implementation.
6. If the reviewer identifies issues, use the Implementer agent again to apply fixes.

Iterate between planning and architecture, and between review and implementation, until each phase converges.

工人代理各自定义自己的工具访问,并可选择更快或更具成本效益的模式,因为他们的关注点更窄:

---
name: Planner
user-invokable: false
tools: ['read', 'search']
---
Break down feature requests into implementation tasks. Incorporate feedback from the Plan Architect.
---
name: Plan Architect
user-invokable: false
tools: ['read', 'search']
---
Validate plans against the codebase. Identify existing patterns, utilities, and libraries that should be reused. Flag any plan steps that duplicate existing functionality.
---
name: Implementer
user-invokable: false
model: ['Claude Haiku 4.5 (copilot)', 'Gemini 3 Flash (Preview) (copilot)']
---
Write code to complete assigned tasks.

这种模式使协调者的上下文聚焦于高层工作流,而每个工作代理则拥有干净的上下文和其特定作业的适当权限。

多视角代码审查

代码审查从多个角度受益。一次过往往会忽略一些从不同角度看问题。使用子代理并行运行每个综述视角,然后综合结果。

---
name: Thorough Reviewer
tools: ['agent', 'read', 'search']
---
You review code through multiple perspectives simultaneously. Run each perspective as a parallel subagent so findings are independent and unbiased.

When asked to review code, run these subagents in parallel:
- Correctness reviewer: logic errors, edge cases, type issues.
- Code quality reviewer: readability, naming, duplication.
- Security reviewer: input validation, injection risks, data exposure.
- Architecture reviewer: codebase patterns, design consistency, structural alignment.

After all subagents complete, synthesize findings into a prioritized summary. Note which issues are critical versus nice-to-have. Acknowledge what the code does well.

这种模式之所以有效,是因为每个子代理都以全新的角度看待代码,而不受其他视角的依赖。在这个例子中,编排器通过提示塑造每个子代理的关注区域。这是一种轻量级的方法,无需额外的代理文件。

提示

为了更好地控制,每个评审视角都可以作为独立的定制代理,提供专门的工具访问。例如,安全审查员可能使用以安全为重点的MCP服务器,而代码质量审查员可能可以使用linting的CLI工具。这种方法让每个视角都能根据其具体关注点使用最佳工具。