Files
GenericAgent/memory/subagent_sop.md
Jiaqing Liang bb2d595fb6 重构轮次警告机制并修复路径问题
- 提取next_prompt_patcher回调让handler自定义警告策略
- 修复turn显示不一致问题
- 每10轮注入全局记忆防止上下文丢失
- 强化autonomous_reports路径警告
- 新增subagent测试驱动SOP优化方法
2026-02-27 21:41:52 +08:00

56 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Subagent 调用 SOP
## 何时调用(调用原则)
唯一适用场景:**map模式**——将N个独立同构子任务分发给各自的subagent处理。
- 核心优势独立上下文。避免处理文档A的长上下文污染处理文档B的质量
- 文件系统共享是优点不同agent处理不同输入文件产生不同输出文件
- 共享资源冲突:键鼠/浏览器主体不可共享浏览器可分tab但需谨慎subagent任务应限于文件处理
- 不满足map模式的任务 → 主agent顺序执行即可别用subagent
**额外场景SOP dry-run验证**——启动单个subagent执行目标SOP通过output日志发现SOP缺陷缺参数/选择器不准/步骤模糊主agent据此patch优化SOP。单subagent不存在资源冲突。
- 测SOP质量input指定SOP名如"用ezgmail_sop查看最近3封未读邮件"排除导航干扰失败即SOP问题
- 测导航能力input只写目标验证subagent能自主从insight找到正确SOP。禁止内联SOP内容
### 测试驱动SOP优化方法
**场景**发现SOP存在路径/参数/步骤问题,需验证修改效果
**方法**
1. 创建test_path测试环境`temp/test_path/`写入input.txt描述测试目标
2. 启动subagent`python agentmain.py --task test_path`(从代码根启动)
3. 观察output.txt和实际文件操作验证SOP修改是否生效
4. 清理test_path重复测试直到验证通过
**关键发现**(已验证):
- **Insight优先级>SOP**subagent优先读Insight索引Insight中的警告/约束会覆盖SOP中的说明
- **subagent的cwd**和主agent相同都在temp/subagent不知道自己是subagent
- **路径引用**从temp/访问memory/用`../memory/`访问autonomous_reports/用`./autonomous_reports/`在temp/下)
**标准流程map-reduce**
1. 主agent准备阶段爬取/dump数据存为多个独立输入文件
2. 分发对每个文件启动一个subagent处理主agent自己也可以处理其中一个
3. 收集等所有subagent完成主agent读取各输出文件汇总结果
## Task Mode 文件IO协议
- 目录:`temp/{task_name}/`相对代码根GenericAgent/主agent cwd在temp/时即 `./{task_name}/`
- 启动:`python agentmain.py --task {task_name} [--llm_no N]`cwd=代码根)
- 流程:写 input.txt → 启动 → 轮询 output.txt → 读回复 → 写 reply.txt 继续 → 不写则5min自动退出
- input.txt原则写目标+约束可指定SOP名。禁写具体实现步骤——除非主agent已读过该SOP确认正确。凭印象猜的步骤会误导subagent
- reply后subagent的后续输出在 output1.txt, output2.txt ... 中递增编号主agent需轮询这些文件
- output.txt 每轮覆盖写,用 mtime/size 判断新轮次
## 后台调用要点
```python
task_dir = os.path.join(agent_root, 'temp', task_name)
proc = subprocess.Popen(
[sys.executable, 'agentmain.py', '--task', task_name],
cwd=agent_root, creationflags=0x08000000,
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'))
```
- 必须 Popen禁止 subprocess.run会阻塞
- stdout.log/stderr.log 用于调试subagent卡死、LLM调用失败等问题
- `--llm_no` 默认=sonnet 4.5`--llm_no 1`=opus 4.6
- 文件统一 UTF-8subagent 无 reply 5min 自动退出无需清理