编辑
2026-03-30
技术
00
请注意,本文编写于 103 天前,最后修改于 103 天前,其中某些信息可能已经过时。

目录

AutoExecutor 从"假执行"到"真执行" - 问题追踪与解决方案
一、背景
二、踩坑记录
🔴 Issue #1: 假执行 - 只分析不执行代码
🔴 Issue #2: 假调度 - 只启动不等待
🔴 Issue #3: 没用 sessions_spawn
🟠 Issue #4: 没监控 - 巡检不检查实际任务
🔴 Issue #5: 中断 - 不等待就结束
🟠 Issue #6: 没记录数据库 - 执行记录存在但状态未同步
🟡 Issue #7: 信息不够详细 - 巡检只说"一切正常"
三、当前架构
3.1 组件架构图
3.2 核心机制
3.3 执行流程(修复后)
四、与 Harness 实践契合程度
4.1 Harness Engineering 核心实践
4.2 契合程度分析
4.3 评分对比
五、最佳实践总结
5.1 不要假执行
5.2 不要假等待
5.3 不要假更新
5.4 不要假监控
5.5 不要假报告
六、验收标准
七、相关文件
八、结论

AutoExecutor 从"假执行"到"真执行" - 问题追踪与解决方案

记录 AutoExecutor 从"只分析不执行"到"真正执行代码"的完整修复历程


一、背景

AutoExecutor 是 Harness Engineering 智能调度系统的核心组件,负责:

  1. 从数据库获取待执行任务
  2. 启动 Generator Agent 执行代码修改
  3. 启动 Evaluator Agent 评审执行结果
  4. 更新数据库任务状态

设计目标

  • 真正执行代码修改,不是只分析
  • 等待 Agent 完成后再更新状态
  • 执行记录与数据库状态同步
  • 巡检能发现实际运行问题

二、踩坑记录

🔴 Issue #1: 假执行 - 只分析不执行代码

发现时间:2026-03-30 15:40

问题现象

  • AutoExecutor 每次运行显示"执行完成"
  • 但没有实际修改代码
  • 没有创建执行记录文件
  • 项目代码无变化

根本原因

  • AutoExecutor message 只说"执行任务"
  • 没有给出具体的代码修改指令
  • Agent 只是分析了项目结构,没有真正执行

修复方案

  • 添加 sessions_spawn 指令,明确启动 subagent
  • 在 message 中写明:"必须使用 sessions_spawn 工具启动真正的 subagent"

验证结果

  • ✅ 执行记录文件开始生成
  • ✅ 代码有实际修改(PostCSS 配置修复)
  • ✅ 前端构建成功

🔴 Issue #2: 假调度 - 只启动不等待

发现时间:2026-03-30 20:30

问题现象

  • 用户一直看到 "Step 3: 等待 Generator 完成"
  • 消息循环重复,没有后续结果
  • 没有真正等待 subagent 完成

根本原因

  • sessions_spawn 是异步的,启动后立即返回
  • 没有 sessions_yield 等待结果推送
  • AutoExecutor 启动 Generator 后直接分析项目并结束

修复方案

  • 添加 sessions_yield 强制等待:
    sessions_yield --message "等待 Generator Agent 完成推送结果"
  • 添加执行记录文件检查:
    ls ~/Documents/stockmonitor/agentprocessdetail/{task_id}-execution-result.md

修复后流程

Step 1: 查询 pending 任务 ↓ Step 2: sessions_spawn 启动 Generator ↓ Step 3: sessions_yield 结束当前 turn ⭐ 强制等待 ↓ [等待 Generator 完成推送] ↓ Step 4: 收到推送 → 检查执行记录文件 ↓ Step 5: 文件存在 → 更新数据库

🔴 Issue #3: 没用 sessions_spawn

发现时间:2026-03-30 15:29

问题现象

  • AutoExecutor 显示"启动 Generator Agent"
  • 但没有实际调用 sessions_spawn 工具
  • 只是模拟分析了任务

根本原因

  • AutoExecutor message 没有 sessions_spawn 指令
  • Agent 只是在 message 中说"启动",但没有真正调用工具

修复方案

  • 明确 sessions_spawn 调用参数:
    sessions_spawn --runtime subagent --mode run \ --label "generator-{task_id}" \ --timeout-seconds 120 \ --task "你是 Generator Agent。任务:{task_name}..."

验证方式

  • 检查 openclaw sessions list 是否有 subagent 记录
  • 检查是否有 sessionKey 和 runId

🟠 Issue #4: 没监控 - 巡检不检查实际任务

发现时间:2026-03-30 19:33

问题现象

  • 巡检任务只跑模拟测试(Orchestrator/Guard/Observability)
  • 只说"系统稳定可用"
  • 不检查数据库任务状态
  • 不对比执行记录文件

巡检报告示例

### 测试结果 - Orchestrator 多 Agent 协调: ✅ 通过 - Guard 护栏系统: ✅ 通过 - Observability 可观测性: ✅ 通过 **结论**: Harness 框架处于稳定可用状态

根本原因

  • 巡检 message 只关注测试通过率
  • 没有检查数据库实际任务状态
  • 没有对比执行记录文件与数据库

修复方案

  • 添加数据库任务状态检查:
    python
    cursor.execute('SELECT status, COUNT(*) FROM harness_tasks GROUP BY status')
  • 添加卡住任务检测:
    python
    cursor.execute('SELECT id, name, progress FROM harness_tasks WHERE status="running" AND progress < 50')
  • 添加执行记录文件对比:
    bash
    ls ~/Documents/stockmonitor/agentprocessdetail/

问题发现阈值

异常类型检查逻辑告警阈值
任务卡住running > 30min 且 progress=0%⚠️ 需人工介入
数据库未同步文件存在但 status=pending🔴 同步失败
pending 堆积pending > 15 个⚠️ 执行慢
连续错误consecutiveErrors > 3🔴 任务失败

🔴 Issue #5: 中断 - 不等待就结束

发现时间:2026-03-30 20:25

问题现象

  • AutoExecutor 启动 Generator 后立即结束
  • 没有等待 subagent 完成
  • 数据库被过早更新

运行记录显示

14:33 | task-1-2 架构设计 | 67秒 | ✅ "完成" 14:21 | task-2 实现测试 | 55秒 | ✅ "完成"

问题分析

  • 67秒就"完成"架构设计?
  • 没有等待真正的代码执行
  • 数据库状态与实际不符

修复方案

  • 强制等待结果推送:
    sessions_spawn → 启动 subagent sessions_yield → 结束当前 turn,等待推送 收到推送 → 继续后续步骤

🟠 Issue #6: 没记录数据库 - 执行记录存在但状态未同步

发现时间:2026-03-30 16:54

问题现象

  • 执行记录文件存在(task-2-2、task-3-3)
  • Generator Agent 真正修改了代码
  • 但数据库 harness_tasks 状态仍为 pending

对比表

任务执行记录文件数据库状态
task-2-2 (15:37)✅ 存在❌ pending
task-3-3 (16:40)✅ 存在❌ pending
task-1-1 (20:24)❌ 不存在✅ completed(虚假)

根本原因

  • AutoExecutor message 没有 MySQL UPDATE 语句
  • Generator Agent 完成后数据库更新步骤被遗漏
  • 执行和记录两个动作没有关联

修复方案

  • 添加明确的 SQL 语句:
    sql
    UPDATE harness_tasks SET status='completed', progress=100.00, completed_at=NOW() WHERE task_id='{task_id}';
  • 约束执行顺序:检查执行记录文件后才更新

🟡 Issue #7: 信息不够详细 - 巡检只说"一切正常"

发现时间:2026-03-30 19:33

问题现象

  • 巡检报告只显示测试通过率
  • 不显示实际任务执行情况
  • 不显示发现的问题
  • 用户无法判断系统是否真的在运行

修复方案

  • 增强巡检报告格式:
    ### 任务运行状态 | 状态 | 数量 | |------|------| | completed | X | | running | X | | pending | X | ### 执行记录检查 - 最新执行记录:task-X-X-execution-result.md - 数据库同步状态:✅/❌ ### ⚠️ 发现的问题 1. task-3-3 执行记录存在但数据库 pending - 🔴 2. test-e2e running 30分钟无进展 - ⚠️ ### 建议 - 检查数据库同步逻辑

三、当前架构

3.1 组件架构图

┌─────────────────────────────────────────────────────────────┐ │ OpenClaw Gateway │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Cron 定时任务 │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ AutoExecutor │ │ 巡检任务 │ │ 调研任务 │ │ │ │ │ │ (1分钟) │ │ (1.5分钟) │ │ (1.5分钟) │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ └─────────┼────────────────┼────────────────┼─────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ sessions_spawn (subagent) │ │ │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Generator │ │ Evaluator │ │ │ │ │ │ Agent │ │ Agent │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ │ │ │ └─────────┼────────────────┼──────────────────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 项目执行 │ │ │ │ ~/Documents/stockmonitor/ │ │ │ │ ↓ │ │ │ │ 执行记录文件: agentprocessdetail/*.md │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ MySQL 数据库 (阿里云 RDS) │ │ │ │ harness_tasks / harness_reviews │ │ │ │ rm-bp13alr02x974o9707o.mysql.rds.aliyuncs.com │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 微信推送 (announce) │ │ │ │ channel: openclaw-weixin │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘

3.2 核心机制

机制说明实现
异步执行sessions_spawn 启动 subagentOpenClaw 内置
结果推送subagent 完成后自动推送结果OpenClaw 内置
强制等待sessions_yield 结束当前 turnmessage 中明确调用
执行记录Generator Agent 写入文件agentprocessdetail/*.md
数据库同步检查文件后才更新状态MySQL UPDATE
问题发现巡检检查阈值告警增强巡检 message

3.3 执行流程(修复后)

┌─────────────────────────────────────────────────────────────┐ │ AutoExecutor 定时触发 (每 1 分钟) │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Step 1: 检查数据库待执行任务 │ │ │ │ SELECT id, name, description │ │ FROM harness_tasks │ │ WHERE status='pending' │ │ ORDER BY priority DESC LIMIT 1 │ │ │ │ 结果: task-xxx (架构设计) │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Step 2: sessions_spawn 启动 Generator Agent │ │ │ │ sessions_spawn --runtime subagent --mode run │ │ --label "generator-task-xxx" │ │ --timeout-seconds 120 │ │ --task "你是 Generator Agent。执行代码修改..." │ │ │ │ 返回: sessionKey, runId │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Step 3: sessions_yield 强制等待 ⭐ 关键修复 │ │ │ │ sessions_yield --message "等待 Generator 完成" │ │ │ │ 当前 turn 结束,等待结果推送 │ └─────────────────────────────────────────────────────────────┘ │ │ [等待中...] │ ▼ [收到推送] ┌─────────────────────────────────────────────────────────────┐ │ Step 4: 检查执行记录文件 │ │ │ │ ls ~/Documents/stockmonitor/agentprocessdetail/ │ │ task-xxx-execution-result.md │ │ │ │ 文件存在 → 真正完成 │ │ 文件不存在 → 等待或重试 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Step 5: 更新数据库 │ │ │ │ UPDATE harness_tasks │ │ SET status='completed', │ │ progress=100.00, │ │ completed_at=NOW() │ │ WHERE task_id='task-xxx' │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 推送结果到微信 (announce) │ │ │ │ channel: openclaw-weixin │ │ message: "任务完成" │ └─────────────────────────────────────────────────────────────┘

四、与 Harness 实践契合程度

4.1 Harness Engineering 核心实践

实践说明AutoExecutor 契合度
Generator-Evaluator 对抗Generator 执行 → Evaluator 评审⭐⭐⭐⭐⭐ 100%
智能调度LLM 驱动任务决策⭐⭐⭐⭐⭐ 100%
Checkpoint 恢复断点续执行⭐⭐⭐⭐ 80%(已修复)
Guard 护栏拦截危险命令⭐⭐⭐⭐⭐ 100%
Observability快照记录⭐⭐⭐⭐⭐ 100%
人工介入yes/no 确认⭐⭐⭐⭐⭐ 100%
问题发现上报自动发现问题⭐⭐⭐⭐ 80%(修复后)

4.2 契合程度分析

完全契合(5星)

  • Generator-Evaluator 对抗循环:sessions_spawn 启动 Generator → 启动 Evaluator → 评审打分
  • Guard 护栏:rm -rf → reject,git push --force → confirm
  • Observability:每次运行生成快照 snap-xxx
  • 人工介入:关键操作需 yes/no 确认

修复后契合(4星)

  • Checkpoint 恢复:Issue #12 已修复,SQLite 状态持久化
  • 问题发现上报:巡检增强后能发现问题

需要改进(3星)

  • 长时间任务监控:超过 30 分钟的任务需要更细粒度进度追踪
  • 多任务并行:当前每次只执行 1 个任务

4.3 评分对比

维度修复前修复后
真正执行⭐ 20%⭐⭐⭐⭐⭐ 100%
等待结果⭐ 10%⭐⭐⭐⭐⭐ 100%
数据库同步⭐⭐ 30%⭐⭐⭐⭐⭐ 100%
问题发现⭐⭐ 30%⭐⭐⭐⭐ 80%
报告详细度⭐⭐ 40%⭐⭐⭐⭐⭐ 100%

总分

  • 修复前:24% (24/100)
  • 修复后:96% (96/100)

五、最佳实践总结

5.1 不要假执行

❌ 错误:只说"执行任务",不调用工具 ✅ 正确:明确 sessions_spawn + 具体参数

5.2 不要假等待

❌ 错误:sessions_spawn 后直接结束 ✅ 正确:sessions_yield + 等待推送

5.3 不要假更新

❌ 错误:启动后直接更新数据库 ✅ 正确:检查执行记录文件后才更新

5.4 不要假监控

❌ 错误:只跑测试,不检查实际任务 ✅ 正确:检查数据库 + 执行记录 + 问题发现

5.5 不要假报告

❌ 错误:只说"一切正常" ✅ 正确:列出状态 + 问题 + 建议

六、验收标准

验收项修复前修复后
sessions_spawn 真正执行
sessions_yield 等待结果
执行记录文件存在
数据库状态同步
巡检发现问题
报告详细信息

七、相关文件

文件作用
docs/autoexecutor-issues-resolved.md问题追踪详细文档
memory/2026-03-30.md修复日志(每日)
MEMORY.md长期记忆
SKILL.mdSkill 描述

八、结论

通过 7 个问题的系统性修复,AutoExecutor 从"假执行"变成了"真执行":

  1. 真正执行代码:sessions_spawn 启动 subagent,不是只分析
  2. 真正等待结果:sessions_yield 强制等待,不是启动后立即结束
  3. 真正同步数据库:检查执行记录文件后才更新,不是虚假更新
  4. 真正发现问题:巡检检查阈值告警,不是只说"正常"
  5. 真正详细报告:列出状态、问题、建议,不是一句话

Harness 实践契合度:从 24% 提升到 96%


文章发布时间:2026-03-30

关键词:AutoExecutor、Harness Engineering、问题追踪、sessions_spawn、sessions_yield

本文作者:lazyyoun

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!