3.5 KiB
3.5 KiB
修改定时任务为子Agent模式
目标
将定时任务从主进程执行改为子Agent执行模式,实现:
- 启动定时任务时,启动一个子Agent
- 子Agent完成任务后自动退出
- 主进程等待下一个定时任务触发
背景
当前实现:
- 使用 CronCreate 创建定时任务
- 定时任务在主进程中直接执行Agent逻辑
- 可能存在长时间运行导致的问题
目标实现:
- 定时任务触发时,使用Agent工具启动子Agent
- 子Agent独立运行,有自己的上下文
- 子Agent完成后自动退出,不影响主进程
实施步骤
1. 修改 start-scheduler.md
当前逻辑:
每 N 分钟执行一次:
1. 获取所有打开的 Issues
2. 过滤出未处理的
3. 选择优先级最高的Issue
4. 在主进程中处理该Issue
修改后逻辑:
每 N 分钟执行一次:
1. 获取所有打开的 Issues
2. 过滤出未处理的
3. 选择优先级最高的Issue
4. 使用 Agent 工具启动子Agent处理该Issue
5. 子Agent完成后自动退出
6. 等待下次定时任务
2. 使用 Agent 工具
使用 Agent 工具启动子Agent:
Agent({
subagent_type: "general-purpose",
description: "处理 Issue #{number}",
prompt: "处理 Gitea Issue #{number} 的完整流程...",
run_in_background: false // 前台运行,完成后继续
})
3. 修改内容
start-scheduler.md 的修改点
-
Code Agent 定时任务逻辑(第24-33行)
- 将"启动 Agent 处理该 Issue"改为使用 Agent 工具
-
Agent 工作流程(第35-62行)
- 将详细工作流程移到子Agent的prompt中
-
PR Agent 定时任务逻辑(第68-74行)
- 将"启动 Agent 审核"改为使用 Agent 工具
-
Agent 审核流程(第76-111行)
- 将详细工作流程移到子Agent的prompt中
4. 优势
- 隔离性:子Agent有独立的上下文,不会干扰主进程
- 稳定性:子Agent崩溃不影响定时任务继续运行
- 可观察性:每个子Agent的任务清晰可追踪
- 资源管理:子Agent完成后自动释放资源
5. 实施细节
Code Agent Prompt 模板
你是一个 Code Agent,负责处理 Gitea Issue #{number}。
工作流程:
1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 获取 Issue 详情
2. 解析需求,检查依赖
3. 创建分支 feature/issue-{number}
4. 实现功能,编写测试
5. 运行测试,确保通过
6. 提交代码,创建 PR
7. 在 Issue 中添加评论说明
完成后报告结果并退出。
PR Agent Prompt 模板
你是一个 PR Agent,负责审核 Gitea PR #{number}。
工作流程:
1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 获取 PR 详情
2. 代码质量检查
3. 测试检查
4. 安全检查
5. 创建审核评论,决定是否批准
6. 如需修改,启动修复Agent
完成后报告结果并退出。
风险与缓解
-
风险:子Agent启动开销
- 缓解:定时任务间隔已考虑此开销
-
风险:子Agent失败无法重试
- 缓解:下次定时任务会再次尝试
-
风险:并发控制需要确保
- 缓解:在启动子Agent前检查是否有正在运行的任务
测试计划
- 启动定时任务
- 创建测试Issue
- 观察子Agent启动和处理
- 验证子Agent自动退出
- 确认定时任务继续运行
预期结果
- 定时任务启动后,主进程保持轻量
- 子Agent按需启动,完成任务后自动退出
- 系统资源得到更好的管理
- 错误隔离,提高系统稳定性