Merge PR #23: update plan_sop.md and subagent_sop.md

This commit is contained in:
Liang Jiaqing
2026-03-12 22:22:33 +08:00
2 changed files with 90 additions and 63 deletions

View File

@@ -1,70 +1,70 @@
# Plan Mode SOP
> 简单任务1-2步可完成禁用本SOP直接做。
文件命名:`./plan_XXX.md`XXX = 任务英文短名)。结果文件放 `./`,路径回填计划文件。禁建子目录。
---
## 规划态(按序执行,不可跳步)
[] **步骤1存checkpoint含格式模板**
调用 `update_working_checkpoint`**必须**使用以下格式([格式]字段不可省略):
**触发**3步以上有依赖/多文件协同/条件分支/需并行 | **禁用**1-2步简单任务直接做
**工作目录**`./plan_XXX/`XXX=任务英文短名)
## 规划态(按序执行)
**步骤1创建文件夹 + 存checkpoint**
```
[任务] 产出 plan_XXX.md | [需求] 用户原始需求一句话
[格式] 骨架每项必须用 - [ ] 开头,禁止###标题。模板:- [ ] 项目简述 | 方法:做法 | 验证:判据
[进度] 即将读领域SOP | ⚡写完plan后必须重读本SOP步骤3按其模板切checkpoint再执行
[任务] 产出 ./plan_XXX/plan.md | [需求] 一句话 | [约束] 关键限制
[进度] 即将读领域SOP | ⚡写完plan后必须重读本SOP步骤3切换执行态
```
[] **步骤2读领域SOP → 写plan骨架 `./plan_XXX.md`**
先读取相关领域SOP了解步骤然后**立即**写骨架。不需要完美,**允许方法写"⚠待确认"**。禁止以"还没调研清楚"为由推迟。
**⚠ 骨架格式以checkpoint中[格式]字段为准不要模仿领域SOP的排版。**
骨架模板:
**步骤2读领域SOP → 写plan骨架**
先读相关SOP立即写骨架。允许"⚠待确认",禁止以"没调研清楚"推迟。
**骨架格式**
```
# 任务标题
需求:一句话 | 约束:关键限制
- [ ] 项目1简述 | 方法:具体做法 | 验证:完成判据
- [ ] 项目2简述 | 方法:⚠待确认 | 验证:完成判据
- [ ] 项目3简述 | 方法:具体做法 | 验证:完成判据
1. [ ] 步骤1简述
2. [P] 步骤2简述并行读subagent_sop.md执行Map模式
依赖1
3. [?] 步骤3条件分支
条件X成功→3.1否则→3.2
```
**标记**`[ ]`待做 | `[✓]`完成 | `[✗]`失败 | `[P]`并行 | `[?]`条件分支
**[P]标记条件**全YES才可标
□ 2+步骤可同时? □ 无数据依赖? □ 产出不同文件? □ 节省>20%时间?
**子任务目录**subagent产出放 `./plan_XXX/subtask_name/`
**探索规则**有⚠项→逐项探索每轮更新plan+checkpoint | 连续3轮无进展→用当前最佳方案
**⛔ 写完骨架后禁止执行。必须先完成步骤3。**
- 有⚠待确认项 → 逐项探索补充,**每轮必须更新plan文件 + checkpoint的[进度]**
- 连续3轮探索无实质进展 → **必须停止**,用当前最佳方案替代
- 无⚠待确认项 → 直接进入步骤3
**⛔ 写完骨架后禁止执行任何项目。必须先完成步骤3。**
[] **步骤3转入执行态⛔ 不可跳过)**
**写完plan骨架后必须先执行此步骤再开始做任何项目。**
调用 `update_working_checkpoint`,只放**当前一步**(禁止塞全部步骤):
**步骤3转入执行态**
```
[执行] plan_XXX.md | 当前Step1简述 | ⚡完成后必须1.file_patch plan把当前步[ ]改[x] 2.读plan找下个[ ] 3.update_working_checkpoint为下步(保留本模板格式)
CALL update_working_checkpoint(
key_info='[执行] plan.md | 当前1.1 | ⚡有[P]标记必须读subagent_sop.md执行Map模式'
)
```
**执行循环(每步重复):**
1. `plan_XXX.md` → 定位当前 `- [ ]`
2. 执行该项参照领域SOP
3. 按checkpoint中⚡指令完成收尾标[x]→找下步→更新checkpoint
4. 全部完成 → 汇总结果 → 清理checkpoint
---
## 项目类型(三选一或嵌套)
- **步骤**:有先后依赖,顺序执行
- **方面**:并行独立,无依赖
- **分支**条件未知尝试X → 成功走Y / 失败走Z
## 执行态循环
1. 读plan.md → 定位当前`[ ]`
2. **检查并行**
```
IF has_mark('[P]'):
CALL file_read('subagent_sop.md')
# 按SOP创建context.json含绝对路径+ input.txt
# ⚠ subagent必须从context.json读取绝对路径写入文件
ELSE:
执行当前步骤
```
3. 执行该项
4. **收尾(必须执行,不可跳过)**
```
# ⚠ 进度标记更新是强制要求,每步完成后必须执行
file_patch(plan, '[ ] 当前步骤' → '[✓] 当前步骤')
file_read(plan) # 验证标记已更新 + 找下一步
update_working_checkpoint('[进度] 步骤N已完成 | 下一步:...')
```
5. **Checkpoint验证每3步或关键节点**
```
file_read(plan) # 检查:所有已执行步骤是否标[✓]
IF 有遗漏标记:
立即补标 file_patch(...)
```
6. 全部完成 → 汇总结果 → 清理checkpoint
## 失败处理
1. **记录**checkpoint中 `step_X: [FAILED] 原因 (retry: N/3)`
2. **重试**网络超时→自动重试3次(2s/4s/8s) | 配置错误→询问用户 | 其他→标[✗]跳过
3. **subagent失败**查stderr.log→明确错误主agent修正重启 | 未知错误重试1次 | 最多重启2次
4. **依赖传播**:步骤失败后,后续依赖项标[SKIP]
## 强制约束
- 每项**必须**有独立完成判据,禁止笼统描述
- 禁止出现"处理所有文件"类表述,**必须**展开为具体条目
- 一次只做一项,禁止批量执行
- 计划有误回到规划态修正,禁止硬凑
- 不可逆操作前多验证一步
- 并行方面可用 subagent 执行
- 每项必须有独立完成判据
- 禁止"处理所有文件",必须展开具体条目
- 一次只做一项;计划有误回规划态修正
- 不可逆操作前多验证一步

View File

@@ -3,7 +3,7 @@
## Task Mode 文件IO协议
- 目录:`temp/{task_name}/`相对代码根GenericAgent/主agent cwd在temp/时即 `./{task_name}/`
- 启动:`python agentmain.py --task {task_name} [--llm_no N]`cwd=代码根)
- 启动:`python agentmain.py --task {task_name} [--llm_no N]`cwd=代码根)其中agentmain.py位于代码根目录
- 流程:写 input.txt → 启动 → 轮询 output.txt → 读回复 → 写 reply.txt 继续 → 不写则5min自动退出
- input.txt原则写目标+约束可指定SOP名。禁写具体实现步骤——除非主agent已读过该SOP确认正确。凭印象猜的步骤会误导subagent
- output.txt首轮对话的流式输出持续append用mtime/size判断更新
@@ -13,9 +13,10 @@
```python
task_dir = os.path.join(agent_root, 'temp', task_name)
creation_flags = 0x08000000 if platform.system() == 'Windows' else 0
proc = subprocess.Popen(
[sys.executable, 'agentmain.py', '--task', task_name],
cwd=agent_root, creationflags=0x08000000,
cwd=agent_root, creationflags=creation_flags,
stdout=open(os.path.join(task_dir, 'stdout.log'), 'w', encoding='utf-8'),
stderr=open(os.path.join(task_dir, 'stderr.log'), 'w', encoding='utf-8'))
```
@@ -41,9 +42,35 @@ proc = subprocess.Popen(
**核心优势**独立上下文。避免处理文档A的长上下文污染处理文档B的质量
**约束**
- 文件系统共享是优点不同agent处理不同输入文件产生不同输出文件
- 共享资源冲突:键鼠/浏览器主体不可共享浏览器可分tab但需谨慎
- 共享资源冲突:键鼠不可共享浏览器暂时不可并行使用,避免同时操作同一标签页
- 不满足map模式的任务 → 主agent顺序执行即可别用subagent
**标准流程map-reduce**
1. 主agent准备阶段爬取/dump数据存为多个独立输入文件
2. 分发对每个文件启动一个subagent处理主agent自己也可以处理其中一个
3. 收集等所有subagent完成主agent读取各输出文件汇总结果
3. 收集等所有subagent完成主agent读取各输出文件汇总结果
## subagent内部plan_mode使用
**原则**subagent本身是完整agent接收多步骤任务时应在内部创建plan管理执行
**触发条件**:任务包含3个以上子步骤、子步骤之间有依赖关系、需要checkpoint来恢复执行
**实现方式**
1. **主agent创建subagent时**在input.txt中说明任务包含多个步骤建议使用plan_mode
2. **subagent内部执行**:检测到多步骤任务后,创建 `./subagent_plan.md` 并使用plan_mode执行
3. **主agent监控**只关注最终结果output*.txt不需要关心subagent内部如何执行
4. **文件传递机制**主agent创建subagent时在task_dir中生成 `context.json`,包含所有文件的**绝对路径**
**⚠ subagent启动后第一步必须读取context.json**
**⚠ 所有文件操作必须使用context.json中的绝对路径**
**格式示例**
```json
{
"task": "任务描述",
"work_dir": "/absolute/path/to/plan_dir/",
"input_files": {
"paper_info": "/absolute/path/to/paper_info.txt"
},
"output_files": {
"pdf": "/absolute/path/to/paper.pdf",
"report": "/absolute/path/to/paper_report.md"
},
"dependencies": ["paper_info.txt必须存在"]
}
```