139 lines
3.5 KiB
Markdown
139 lines
3.5 KiB
Markdown
# 修改定时任务为子Agent模式
|
||
|
||
## 目标
|
||
|
||
将定时任务从主进程执行改为子Agent执行模式,实现:
|
||
1. 启动定时任务时,启动一个子Agent
|
||
2. 子Agent完成任务后自动退出
|
||
3. 主进程等待下一个定时任务触发
|
||
|
||
## 背景
|
||
|
||
当前实现:
|
||
- 使用 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:
|
||
```typescript
|
||
Agent({
|
||
subagent_type: "general-purpose",
|
||
description: "处理 Issue #{number}",
|
||
prompt: "处理 Gitea Issue #{number} 的完整流程...",
|
||
run_in_background: false // 前台运行,完成后继续
|
||
})
|
||
```
|
||
|
||
### 3. 修改内容
|
||
|
||
#### start-scheduler.md 的修改点
|
||
|
||
1. **Code Agent 定时任务逻辑**(第24-33行)
|
||
- 将"启动 Agent 处理该 Issue"改为使用 Agent 工具
|
||
|
||
2. **Agent 工作流程**(第35-62行)
|
||
- 将详细工作流程移到子Agent的prompt中
|
||
|
||
3. **PR Agent 定时任务逻辑**(第68-74行)
|
||
- 将"启动 Agent 审核"改为使用 Agent 工具
|
||
|
||
4. **Agent 审核流程**(第76-111行)
|
||
- 将详细工作流程移到子Agent的prompt中
|
||
|
||
### 4. 优势
|
||
|
||
1. **隔离性**:子Agent有独立的上下文,不会干扰主进程
|
||
2. **稳定性**:子Agent崩溃不影响定时任务继续运行
|
||
3. **可观察性**:每个子Agent的任务清晰可追踪
|
||
4. **资源管理**:子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
|
||
|
||
完成后报告结果并退出。
|
||
```
|
||
|
||
## 风险与缓解
|
||
|
||
1. **风险**:子Agent启动开销
|
||
- **缓解**:定时任务间隔已考虑此开销
|
||
|
||
2. **风险**:子Agent失败无法重试
|
||
- **缓解**:下次定时任务会再次尝试
|
||
|
||
3. **风险**:并发控制需要确保
|
||
- **缓解**:在启动子Agent前检查是否有正在运行的任务
|
||
|
||
## 测试计划
|
||
|
||
1. 启动定时任务
|
||
2. 创建测试Issue
|
||
3. 观察子Agent启动和处理
|
||
4. 验证子Agent自动退出
|
||
5. 确认定时任务继续运行
|
||
|
||
## 预期结果
|
||
|
||
- 定时任务启动后,主进程保持轻量
|
||
- 子Agent按需启动,完成任务后自动退出
|
||
- 系统资源得到更好的管理
|
||
- 错误隔离,提高系统稳定性
|