子代理(Subagents)
子代理是 Codely CLI 中的专业 AI 助手,用于处理特定类型的任务。它们允许您将工作委托给配置了任务特定提示、工具和行为的 AI 代理。
什么是子代理?
子代理是独立的 AI 助手,具有以下特点:
- 专业化任务 - 每个子代理都配置了针对特定类型工作的专注系统提示
- 独立上下文 - 它们维护自己的对话历史,与主对话分开
- 受控工具访问 - 您可以配置每个子代理可以访问哪些工具
- 自主工作 - 一旦获得任务,它们会独立工作直到完成或失败
- 详细反馈 - 您可以实时查看它们的进度、工具使用情况和执行统计
子代理系统通过将复杂任务分解并由专业代理处理,显著提高了工作效率和输出质量。
主要优势
- 任务专业化 - 创建针对特定工作流程优化的代理(测试、文档、重构等)
- 上下文隔离 - 将专业工作与主对话分开
- 可重用性 - 在项目和会话之间保存和重用代理配置
- 受控访问 - 限制每个代理可以使用的工具,以提高安全性和专注度
- 进度可见性 - 通过实时进度更新监控代理执行情况
子 代理的工作原理
- 配置 - 创建定义行为、工具和系统提示的子代理配置
- 委托 - 主 AI 可以自动将任务委托给适当的子代理
- 执行 - 子代理独立工作,使用其配置的工具完成任务
- 结果 - 将结果和执行摘要返回到主对话
快速开始
查看可用代理
列出所有可用的子代理:
/agents list
查看代理详情
查看特定代理的详细信息:
/agents info <代理名称>
重新加载配置
修改代理配置后,重新加载以应用更改:
/agents reload
使用子代理
最简单的方式是直接告诉主 AI 您需要什么,它会自动选择合适的子代理:
请为认证模块编写全面的测试
主 AI 会自动识别这是一个测试任务,并委托给测试专家子代理。
您也可以明确 指定使用特定的子代理:
让 testing-expert 子代理为支付模块创建单元测试
创建自定义子代理
存储位置
子代理配置文件存储在以下位置:
- 项目级:
.codely-cli/agents/(优先级更高) - 用户级:
~/.codely-cli/agents/(后备)
这允许您拥有项目特定的代理和个人代理,适用于所有项目。
⚠️ 重要注意事项
1. task 是保留字段(且必须提供)
task 是系统保留字段:调用子代理时用于传递"要完成的任务"。在自定义 agent 的 input_schema 里:
- 必须包含
task = "string"(必填,不能写成可选,也不能改名) - 不能定义
agent_name(该字段由delegate_to_agent工具保留,用于选择要运行的 agent)
注意
- 旧版实现以 query="${task}" 提供,新版可以省略,codely会自动注入
❌ 错误示例:
[validation]
input_schema = {
task = "string?", # 错误!task 必须是必填 string
agent_name = "string" # 错误!agent_name 是保留字段
}
✅ 正确示例:
[validation]
input_schema = {
task = "string", # 必填:要完成的任务
target = "string",
description = "string?"
}
必须正确配置task字段,这是子代理正确运行的关键。
2. CODELY TOML 格式是推荐方式
**推荐使用 CODELY TOML 格式(.toml)**创建新的子代理配置。
3. 其他格式仅做兼容,不推荐直接创建
为了兼容其他工具,Codely CLI 也支持以下格式,但不推荐直接使用这些格式创建新的子代理:
- Gemini TOML 格式(
**.toml**):兼容 Gemini 的配置格式 - Claude YAML Frontmatter 格式(
**.md**):兼容 Claude 的配置格式
这些格式仅用于从其他工具迁移现有配置,创建新的子代理请使用推荐的 Legacy TOML 格式。
推荐配置格式:Legacy TOML
description = "代理功能的简要描述"
[agent]
name = "planner"
system_prompt = """
详细系统提示,定义代理的行为、能力和方法。
对动态输入替换使用 `${variable_name}` 占位符(仅 TOML 格式支持;YAML frontmatter 格式不会做插值)。
"""
query = "\$\{task\}"
# 可选模型配置
[agent.model_config]
model = "" # 空字符串使用默认模型
temp = 0.1
top_p = 0.95
[agent.run_config]
# 可选运行配置设置
[agent.tools]
allowed_tools = ["tool1", "tool2", "tool3"]
[validation]
input_schema = {
required_param = "string",
optional_param = "string?",
array_param = "array?"
}
[example]
inputs = { required_param = "example_value", optional_param = "optional_value" }
description = "此示例演示内容的简要描述"
配置字段说明
基本信息
name:代理的唯一标识符(内部使用)description:代理用途的简明摘要
提示配置
system_prompt:详细提示,定义代理行为、专业知识和方法
模型配置(可选)
model:要使用的模型名称(空字符串使用默认值,和当前一致)temp:温度设置(0.0-1.0,较低值=更确定性)top_p:Top-p 采样参数
工具配置
tools/allowed_tools:指定代理可以使用的工具列表,默认空全部允许使用,否则只允许给定工具
输入验证
input_schema:定义期望的输入参数及其类型
示例
example:提供文档和测试的使用示例
可用工具
自定义代理可以访问以下工具:
文件系统工具
read_file:读取文件内容write_file:将内容写入文件read_many_files:一次读取多个文件list_directory:列出 目录内容glob:查找匹配模式的文件search_file_content:在文件内容中搜索
分析工具
sequential_thinking:逐步推理analyze_multimedia:分析图像、音频、视频
系统工具
run_shell_command:执行 shell 命令
Web 工具
web_fetch:获取并处理 Web 内容web_search:搜索网络信息
内存工具
save_memory:将信息保存到内存
任务管理
todo_write:创建和管理任务列表
最佳实践
设计原则
单一职责原则
每个子代理应该有清晰、专注的目的。
✅ 好的:
name = "testing-expert"
description = "编写全面的单元测试和集成测试"
❌ 避免:
name = "general-helper"
description = "帮助测试、文档、代码审查和部署"
原因:专注的代理产生更好的结果,更容易维护。
清晰的专业化
定义特定的专业知识领域,而不是广泛的能力。
✅ 好的:
name = "react-performance-optimizer"
description = "使用分析和最佳实践优化 React 应用程序的性能"
❌ 避免:
name = "frontend-developer"
description = "处理前端开发任务"
原因:特定的专业知识导致更有针对性和有效的帮助。
可操作的描述
编写清楚指示何时使用代理的描述。
✅ 好的:
description = "审查安全漏洞、性能问题和可维护性问题的代码"
❌ 避免:
description = "一个有用的代码审查者"
原因:清晰的描述有助于主 AI 为每个任务选择正确的代理。
配置最佳实践
系统提示指南
具体说明专业知识:
您是 Python 测试专家,专业知识包括:
- pytest 框架和 fixtures
- 模拟对象和依赖注入
- 测试驱动开发实践
- 使用 pytest-benchmark 进行性能测试
包括分步方法:
对于每个测试任务:
1. 分析代码结构和依赖关系
2. 识别关键功能和边缘情况
3. 创建具有清晰命名的全面测试套件
4. 包括设置/拆卸和适当的断言
5. 添加解释复杂测试场景的注释
指定输出标准:
始终遵循这些标准:
- 使用解释场景的描述性测试名称
- 包括正面和负面测试用例
- 为复杂的测试函数添加文档字符串
- 确保测试是独立的,可以按任何顺序运行
安全考虑
- 工具限制:子代理只能访问其配置的工具
- 沙箱:所有工具执行遵循与直接工具使用相同的安全模型
- 审计跟踪:所有子代理操作都被记录并实时可见
- 访问控制:项目和用户级别的分离提供适当的边界
- 敏感信息:避免在代理配置中包含密钥或凭据
- 生产环境:考虑为生产和开发环境使用单独的代理
常见问题
如何启用子代理功能?
在 Codely CLI 中,agents(子代理)系统默认启用。如果您关闭过,可以通过以下方式启用/禁用:
- 命令行:
codely --agents=true(或移除--no-agents);禁用则codely --agents=false - 配置文件:在
.codely-cli/settings.json(工作区)或~/.codely-cli/settings.json(用户)中设置:
{
"agents": { "enabled": true }
}
另外,内置 agents 默认不加载(agents.enableBuiltin=false)。如需加载内置 agents:
{
"agents": { "enableBuiltin": true }
}
子代理之间可以互相调用吗?
不可以。为了防止递归调用和无限循环,子代理不能调用 delegate_to_agent 工具。
如何调试子代理?
用调试模式运行 CLI 以查看更详细日志,例如:codely --debug(也可用 DEBUG=1 codely)。
子代理执行超时怎么办?
您可以在代理配置中设置超时时间(以分钟为单位):
[agent.run_config]
max_time_minutes = 30 # 30分钟后超时
如何限制子代理的最大对话轮数?
在代理配置中设置最大轮数:
[agent.run_config]
max_turns = 10 # 最多10轮对话
高级用法
并行执行多个子代理
某些模型可以并行执行工具, 主 AI 可以同时委托多个子代理来并行处理不同的任务,提高效率。
但必须注意,每个代理的改动不能有重叠,最好有目录隔离。
例如:
并行运行测试和文档生成,测试所有 packages 的 subpkg
并行执行可以显著缩短项目开发时间,特别是对于大型项目。
使用特定模型
您可以为特定的子代理配置不同的模型:
[agent.model_config]
model = "gpt-4" # 使用 GPT-4 而不是默认模型