自定义智能体
Subagents
什么是Suagents
Subagent是 Comate 主Agent可以将任务委派给的专业化Agent助手。每个Subagent都在自己的上下文窗口中运行,处理特定类型的工作,并将结果返回给主Agent。使用Subagent可以拆解复杂任务、并行开展工作,并在主对话中保留上下文。
▍上下文隔离
每个子代理都有自己的上下文窗口。耗时较长的调研或探索任务不会占用主对话的上下文空间。
▍并行执行
可同时启动多个子代理。可以在代码库的不同部分并行工作,无需等待顺序执行完成。
▍专门领域能力
通过自定义提示词、工具访问权限和模型,为子代理配置特定领域的任务。
▍可复用
定义自定义子代理,并在多个项目之间复用。
Subagent如何执行
当 Agent 遇到复杂任务时,它可以自动启动一个Subagent。Subagent会收到包含所有必要上下文的提示(Prompt)并自主执行,并在结束时返回一条包含结果的最终消息。
Subagent在全新的上下文中启动,主Agent会在提示中加入相关信息,因为Subagent无法访问之前的对话历史。
内置Subagent
Comate包含一个内置的Subagents,用于自动处理上下文占用较大的操作。这些Subagents是基于对Agent对话的分析而设计的,尤其是那些触及上下文窗口上限的场景。
| Subagent | 用途 | 为什么使用Subagent |
|---|---|---|
| Explore | 搜索并分析代码库 | 代码库探索会生成大量中间结果,导致主上下文变得臃肿。该Subagent使用更快的模型来并行执行大量搜索。 |
为什么要存在这些内置的Subagents?
它们会生成噪声较多的中间结果,需要专门的提示词和工具,并且可能消耗大量上下文。将它们作为Subagents运行,可以解决多个问题:
- 上下文隔离 — 中间输出保留在Subagent内部,主Agent只会看到最终总结。
- 模型灵活性 — Explore Subagent默认使用更快的模型,这样可以在主Agent执行一次搜索的时间内并行运行 10 次搜索。
- 专用配置 — 每个Subagent都有针对其特定任务优化的提示词和工具访问权限。
- 成本效益 — 更快的模型成本更低。把高 token 开销的工作隔离到使用合适模型的Subagent中,可以降低整体成本。
你不需要配置这些Subagent。Agent 会在合适的时候自动使用它们。
何时使用Subagent
| 适合使用 subagent 的场景 | 适合使用 skill 的场景 |
|---|---|
| 你需要为耗时的调研任务隔离上下文 | 任务是单一用途的(生成 changelog、格式化等) |
| 需要并行运行多个工作流 | 你希望有一个快速、可重复的操作 |
| 任务在多个步骤中需要专业知识 | 任务可以一次性完成 |
| 你希望对工作成果进行独立校验 | 你不需要单独的上下文窗口 |
如果你发现自己正为一个简单、单一用途的任务(例如 "generate a changelog" 或 "format imports")创建 subagent,考虑改用一个Skills。
自定义Subagent
定义自定义Subagent,用于封装专业知识、落实团队规范或自动化重复性流程。
文件位置
| 类型 | 位置 | 适用范围 |
|---|---|---|
| 项目Subagent | .comate/agents/ |
仅当前项目 |
| 个人Subagent | ~/.comate/agents/ |
当前用户的所有项目 |
文件格式
每个 subagent 对应一个带有 YAML 头部信息的 Markdown 文件:
1---
2name: security-auditor
3description: 安全专家。用于实现身份验证、支付或处理敏感数据时。
4---
5
6你是一位代码安全审计专家,负责审查代码漏洞。
7
8调用时:
91. 识别安全敏感代码路径
102. 检查常见漏洞(注入、XSS、身份验证绕过)
113. 验证密钥未被硬编码
124. 审查输入验证和清理
13
14按严重程度报告发现:
15- Critical(部署前必须修复)
16- High(尽快修复)
17- Medium(尽可能处理)
配置字段
| 字段 | 必填 | 说明 |
|---|---|---|
name |
是 | 唯一标识符。使用小写字母和连字符。默认为不带扩展名的文件名。 |
description |
是 | 何时使用此Subagent。Agent会读取此字段以决定是否进行任务委派。 |
tools |
否 | Subagent可以使用哪些工具。 |
创建Subagent
Comate提供两种创建Agent的方式:
- 方式一:基于内置的
/create-subagentskills快速创建
- 方式二:基于可视化页面创建
推荐使用方式一,更加便捷和高效。
查看Subagent
Comate提供了两种查看Agent的方式:
- 方式一:直接问Agent让它帮助整理,在输入框输入
1当前有哪些生效的Subagents,整理出来
方式二:基于可视化页面查看
使用Subagent
自动委派
Agent 会根据以下因素主动委派任务:
- 任务的复杂度和范围
- 项目中自定义的 subagent 描述
- 当前上下文和可用工具
在 description 字段中加入诸如 “use proactively” 或 “always use for” 之类的短语,可以鼓励自动委派。
显式调用
在提示词中使用 /{subagent-name} 语法显式调用指定的子代理:
1> /verifier confirm the auth flow is complete
2> /debugger investigate this error
3> /security-auditor review the payment module
你也可以在对话中自然提及它们来调用子代理:
1> 使用 verifier subagent 来确认身份验证流程已完成
2> Have the debugger subagent investigate this error
3> Run the security-auditor subagent on the payment module
并行执行
Comate也支持同时调用多个Subagent,以获得最大吞吐量,Agent 会在单条消息中发出多个 Subagent工具调用,因此Subagent可以并行运行。
建议使用以下Prompt唤起并行调用,采用此种格式并非Agent能力无法主动识别,而是Agent天然习惯串行执行任务。
1并行分析xxxxx,实现xxxxx
复用Subagent
Comate还支持复用历史会话中的Subagent,如一个检索的任务做的还不够完整,可以继续复用此会话,**这对跨越多次调用的长时间运行任务非常有用。**
每次Subagent执行都会有一个独立的ID,主Agent通过此ID即可在保留完整上下文的情况下恢复该Subagent(您不需要关注任何ID的存在,以上都是由主Agent自动获取并唤起「沉睡」的Subagent)。可以尝试用以下Prompt格式来复用Subagent:
1在原来的 {描述希望复用的Subagent任务名字} Task基础上继续分析:{描述希望Subagent继续做什么}
最佳实践
- 编写职责单一的Subagent — 每个Subagent 都应只有一个清晰的职责。避免泛用型的「辅助(helper)」代理。
- 投入精力写好描述 —
description字段决定 Agent 何时将任务委派给你的Subagent 。花时间打磨它。通过编写提示并检查是否触发了正确的Subagent 来进行测试。 - 保持提示简洁 — 冗长、散乱的提示会削弱聚焦度。要具体、直接。
- 将Subagent 纳入版本控制 — 把
.comate/agents/提交到你的代码库,让整个团队都能受益。 - 从 Agent 生成的代理开始 — 先让 Agent 帮你起草初始配置,然后再进行自定义。
不要创建几十个泛泛的子 Agent: 拥有 50+ 个只写着“帮助写代码”之类模糊说明的 Subagent 是低效的。Agent 不会知道什么时候该用它们,你也会在维护它们上浪费时间。
- 描述过于模糊 —— “用于通用任务”不会给 Agent 任何关于何时委托的信号。请具体一些:例如“在实现基于 OAuth 提供商的认证流程时使用”。
- 提示词过于冗长 —— 2,000 字的 Prompt 并不会让Subagent 更聪明,只会让它更慢、更难维护。
- 重复Skills、Commands的功能 —— 如果任务是单一用途且不需要上下文隔离,请改用
Skills或Command。 - Subagent 过多 —— 先从 2–3 个聚焦的Subagent 开始。只有在出现清晰且彼此区分的使用场景时再增加。
