Agent Step Sequencer
智能体步骤序列器
针对深度请求的多步骤调度器。支持基于步骤的操作并集成了心跳机制——即使在网关重置的中间步骤也能保持存活。
核心模式
- 解析当用户请求需要多个步骤时
- 建议步骤计划,等待确认
- 持久化state.json(包含计划格式)
- 智能体调用
scripts/step-sequencer-check.py立即执行(无需等待心跳) - 心跳机制(例如每5分钟)也会触发该脚本——确保序列器与邮件任务及其他心跳任务保持同步
关键特性:若网关在步骤执行中途重置,下次心跳将读取状态并正确恢复执行。

计划格式
当用户批准时,智能体将构建计划。在确认过程中,智能体会询问:步骤间是否采用2分钟延迟?推荐用于对速率限制敏感的API调用。用户选择;代理设置stepDelayMinutes(0或2)在状态中。每个步骤都有title、instruction,以及可选的requiredOutputs(相对于工作空间的路径,必须在步骤标记为完成前存在):
{
"plan": {
"steps": {
"step-1": { "title": "Research topic X", "instruction": "Research topic X and produce a concise summary", "requiredOutputs": ["study/summary.md"] },
"step-2": { "title": "Write paper", "instruction": "Using the summary from step 1, write a research paper..." }
}
},
"stepQueue": ["step-1", "step-2"],
"currentStep": 0,
"stepRuns": {},
"stepDelayMinutes": 0,
"status": "IN_PROGRESS"
}
- title:人类可读的标签
- instruction:给代理的完整指令(研究、总结、从Y中提取X等)
- requiredOutputs(可选):路径列表(相对于工作空间)。仅当代理以0退出且所有这些路径都存在时,运行器才会将步骤标记为完成;否则步骤将失败,并显示“缺少所需的输出:…”。
角色
- 代理:制定计划,持久化状态;在步骤执行期间不接触状态。接收提示。
- 运行器(
step-sequencer-runner.py): 调用代理执行步骤指令,等待退出,标记为完成/失败。应用步骤延迟分钟数。重试时,代理会收到故障排除提示。 - 检查脚本(
step-sequencer-check.py): 如有待处理任务,则调用运行器。处理失败 → 重试(重置为待定状态,调用运行器)。 - 心跳: 按计划调用检查脚本。
步骤执行:自主恢复
不要中途停止向用户询问。执行步骤时,如果发生故障(抓取为空、API错误、源不可用):
- 重试一次(同一源/URL),如果可能是暂时性问题。
- 尝试替代方案(例如使用CoinGecko替代CoinMarketCap,或不同的端点或代币),并尽可能完成步骤。
- 记录并退出仅在你确实无法完成步骤时——然后以非零状态退出,以便运行器标记为失败;调度器将使用故障排除提示进行重试。
不要静默停止。如果重试和尝试其他方法后仍无法完成步骤:请主动提示用户——发布一条简短消息,说明你遇到了问题、什么失败了以及你尝试了哪些方法(例如"步骤2(研究Meteora)失败:CoinMarketCap获取结果为空,尝试了CoinGecko——结果也为空。需要另一个数据源或跳过此代币。")。然后以非零状态退出,以便运行器标记为失败,调度器可以重试或将其添加到阻塞项中。切勿在不告知用户的情况下直接停止。
代理如何确定多步骤操作
代理必须在继续执行前提出建议。当涉及多步骤操作时,提出步骤计划并在执行前等待确认。
MULTI_STEP =
(action_count >= 3)
OR has_sequential_language
OR has_output_dependency
OR high_scope_or_risk
OR user_requests_steps
OR contains_setup_keywords
SINGLE_STEP =
(action_count == 1)
AND NOT has_output_dependency
AND immediate_execution
DECISION =
IF MULTI_STEP THEN suggest_multi_step → wait for confirm → proceed
ELSE single_step
定义:
| 标准 | 含义 |
|---|---|
操作数量 | 不同操作的数量(文件编辑、命令等) |
包含顺序性语言 | "然后"、"之后"、"首先...然后"、"步骤1" |
存在输出依赖 | 步骤B需要步骤A的输出 |
高范围或高风险 | 涉及大量文件、破坏性操作、迁移 |
用户请求步骤 | "逐步进行"、"分解这个"、"一次一个" |
包含设置关键词 | "设置"、"迁移"、"从零开始实施"、"完整的X"、"完整的Y" |
状态模式
参见references/state-schema.md。关键字段:
plan.steps:步骤定义(标题、说明、可选的requiredOutputs)stepQueue、currentStep、stepRunsstepDelayMinutes:0 = 无延迟;2 = 步骤间延迟2分钟blockers、lastHeartbeatIso,工件
心跳流程
心跳调用scripts/step-sequencer-check.py。代理在持久化状态后也会立即调用它。
- 读取 state.json
- 若无状态或状态=完成 → 不执行任何操作
- 若步骤失败 → 增加尝试次数,重置为待处理,调用运行器(立即重试)
- 若步骤完成 → 推进当前步骤,调用运行器
- 若步骤待处理或进行中 → 调用运行器
- 更新 lastHeartbeatIso
运行器调用代理(可通过STEP_AGENT_CMD配置)。运行器应用 stepDelayMinutes。
失败流程
- 运行器标记步骤失败,将错误存储在 stepRuns 中
- 运行器立即调用检查脚本(不等待心跳)
- 检查脚本增加尝试次数,将状态重置为待处理,调用运行器
- 运行器使用故障排除提示调用智能体:"步骤X失败(尝试次数:N)。上次运行以:[错误]结束。请进行故障排除并重试:[指令]"
- 重复直到完成或达到最大重试次数/阻塞项
流程图
检查脚本 → 运行器
flowchart TD
A[Heartbeat or Agent] --> B[step-sequencer-check.py]
B --> C{Work to do?}
C -->|No| D[Do nothing]
C -->|Yes| E[Invoke runner]
E --> F[step-sequencer-runner.py]
F --> G[Invoke agent with instruction]
G --> H{Agent exit}
H -->|Success| I[Mark DONE]
H -->|Fail| J[Mark FAILED, invoke check script]
I --> K[Check advances or done]
J --> B
用户流程(提议 + 持久化)
flowchart TD
U[User Request] --> V{Complex enough?}
V -->|No| W[Execute directly]
V -->|Yes| X[Propose step plan]
X --> Y[User confirms]
Y --> Z[Persist state.json with plan]
Z --> AA[Agent invokes step-sequencer-check]
AA --> AB[Runner invokes agent - step 1]
AB --> AC[Heartbeat also invokes on schedule]
配置
| 环境 | 描述 |
|---|---|
步骤_智能体_命令 | 必需。调用智能体的命令(以空格分隔)。提示作为最后一个参数附加。示例:openclaw agent --message |
步骤_运行器 | 步骤序列运行器.py的路径(可选) |
步骤_最大重试次数 | 在标记为阻塞项之前的失败最大重试次数。默认值:3 |
OpenClaw:连接步骤_智能体_命令连接到OpenClaw的智能体调用(例如:openclaw agent --message)。
安全:设置STEP_AGENT_CMD仅指向您信任的代理二进制文件。请勿使用 shell 解释器(例如bash、sh等)或-c/-e参数——运行器会拒绝这些以防止命令注入。来自 state.json 的指令会作为单个参数传递;它永远不会由 shell 执行。
最终交付步骤
当所有步骤完成后:
- 确认满足所有步骤的要求
- 生成摘要,包含所有创建/写入文件的链接或路径
- 将状态标记为 DONE → 在后续心跳中,调度器将不执行任何操作
安装
clawhub install agent-step-sequencer
手动复制:
cp -r agent-step-sequencer ~/.openclaw/skills/agent-step-sequencer
心跳集成——将此添加到您的心跳中(或让代理添加):
# Agent Step Sequencer check (add to heartbeat cycle)
python3 ~/.openclaw/skills/agent-step-sequencer/scripts/step-sequencer-check.py ~/.openclaw/workspace/state.json
或者,如果技能位于工作空间内:python3 ~/.openclaw/workspace/skills/agent-step-sequencer/scripts/step-sequencer-check.py ~/.openclaw/workspace/state.json
设置STEP_AGENT_CMD为您的代理调用命令,然后再运行。代理应在持久化状态后立即调用检查脚本。


微信扫一扫,打赏作者吧~