AILock-Step 协议:解决 AI Agent 幻觉性跳步的工程实践

基于状态锚点(STP)的线性执行协议,实现 AI Agent 断点续传级开发

引言

在与 AI 协作开发时,我们会遇到几个典型问题:

  • 幻觉性跳步:AI 看到循环任务时,会因为上下文窗口压力自动简化中间步骤,直接说”剩余任务逻辑相似已省略”
  • 状态不可追溯:一旦生成中断,AI 很难找回执行进度,导致重复工作或遗漏任务
  • 依赖管理混乱:AI 可能在依赖未就绪时就开始实现相关功能,导致依赖关系错乱
  • 语义噪声干扰:AI 容易受代码注释或需求文档中感性描述的影响,产生偏离目标的逻辑

为了解决这些问题,我设计了 AILock-Step 协议 —— 一种基于**状态锚点(STP)**的严格线性执行协议,确保任务执行的绝对幂等性。

核心设计

问题对比

问题传统方案AILock-Step 方案
幻觉性跳步AI 看到 for task in tasks 会自动简化中间步骤通过 STP-XXX -> STP-YYY 物理跳转,强迫 AI 保持 100% 步骤完整性
状态不可追溯中断后难以恢复每个 STP 节点都关联 REG_ 寄存器和物理存盘点
语义噪声AI 容易被感性描述影响冷门符号逻辑 (??, !!, >>) 触发”指令解析模式”
依赖管理松散可能跳过前置条件?? 判断算子充当逻辑哨兵,硬性锁死执行路径

协议声明

AILock-Step 协议定义了一种基于状态锚点(STP)的线性执行逻辑。执行器必须严格遵守编号、判断、动作、跳转的单步逻辑。只有在收到明确的跳转指令后才能进入下一个状态锚点。

语法定义

STP-[XXX]      - 状态锚点,执行指针必须停留在此处
?? [Condition] - 逻辑门控,条件为假时跳转错误流
!! [Operator]  - 原子算子,不可拆分的物理动作
>> [Target]    - 数据流向,将输出压入寄存器
-> [Target_STP] - 强制跳转,唯一合法的逻辑演进路径

执行示例

STP-001: ?? [REG_TASK_COUNT > 0] -> STP-010
          !! OP_FS_READ >> REG_TASK_LIST
          -> STP-002

STP-002: !! OP_GET_TOP(REG_TASK_LIST, status=todo) >> REG_CUR_TASK
          -> STP-010

标准算子集

文件系统算子

算子描述
OP_FS_READ物理读取文件系统内容,路径不存在时返回空值
OP_FS_WRITE写入或覆盖指定路径文件
OP_FS_EXISTS检查路径是否存在
OP_FS_DELETE删除指定文件或目录

Git 算子

算子描述
OP_GIT_STATUS获取当前 git 状态
OP_GIT_COMMIT提交当前变更
OP_GIT_MERGE合并指定分支
OP_GIT_WORKTREE_ADD创建 worktree
OP_GIT_WORKTREE_REMOVE删除 worktree

数据处理算子

算子描述
OP_ANALYSE将非结构化文档转化为结构化的 Key-Value 格式
OP_GET_TOP从列表寄存器中取出第一个符合过滤条件的项
OP_COUNT统计符合条件的项目数量
OP_CODE_GEN基于上下文实现具体任务的代码

状态同步算子

算子描述
OP_STATUS_UPDATE更新 .status 文件
OP_TASK_SYNC同步 task.md 状态,标记为完成或待处理
OP_EVENT_EMIT输出事件到日志
OP_UI_NOTIFY向用户发送通知消息

方案优势

1. 消除幻觉性跳步

问题:传统方案中,AI 看到循环任务时会因为上下文窗口压力自动简化中间步骤。

AILock-Step 解决:协议禁止循环语义,AI 必须通过 STP-XXX -> STP-YYY 物理跳转重新扫描任务列表。每一轮跳转都是一次全新的状态对齐,强迫 AI 保持 100% 步骤完整性。

# 传统方案(会被跳过)
for task in tasks:
    implement(task)

# AILock-Step(强制逐个执行)
STP-010: implement(task1) -> STP-011
STP-011: implement(task2) -> STP-012
STP-012: implement(task3) -> STP-013

2. 状态可追溯与中断恢复

问题:传统方案中,一旦生成中断,AI 很难找回执行进度。

AILock-Step 解决:每个状态锚点都关联 REG_ 寄存器和物理存盘点。即使执行中断,新会话只需读取 .status 文件即可精准定位指针,实现断点续传。

# 恢复执行
/parallel-dev --resume

3. 语义噪声屏蔽

问题:传统方案中,AI 容易受代码注释或需求文档中感性描述的影响。

AILock-Step 解决:协议采用冷门符号逻辑(??, !!, >>)。这会触发 AI 的”指令解析模式”而非”文本续写模式”,使其注意力集中在算子执行上,而非语义猜测。

4. 严格的依赖管理

问题:传统方案中,AI 可能在依赖未就绪时就开始实现相关功能。

AILock-Step 解决:协议通过状态锚点序列锁死执行路径。?? 判断算子充当逻辑哨兵,如果前置任务未标记为完成,指针无法移动至下一阶段。

STP-100: ?? [REG_DEPS_READY == true] -> STP-200
          !! OP_ERROR_NOTIFY("依赖未就绪")
          -> STP-999

实际应用

基于 AILock-Step 协议,我们构建了完整的特性开发工作流,支持并行开发和断点续传。

项目结构

AILock-Step/
├── README.md                        # 项目文档
├── AILock-Step-运行协议-算子说明书-v1-0.md  # 完整协议说明书
├── feature-workflow-LockStep/       # LockStep 版工作流实现
│   ├── PROTOCOL.md                  # 协议详细规范
│   ├── config.yaml                  # 配置文件
│   ├── skills/                      # Claude Code 技能
│   │   ├── parallel-dev.md          # 并行开发编排器
│   │   ├── feature-agent.md         # Feature Agent 执行协议
│   │   ├── start-feature.md         # 启动 Feature
│   │   └── complete-feature.md      # 完成 Feature
│   ├── scripts/                     # 辅助脚本
│   ├── templates/                   # 状态文件模板
│   ├── agents/                      # Agent 配置
│   └── tests/                       # 测试用例
└── dist/                            # 构建产物

核心工作流

并行开发工作流

[Phase: Initialization]
STP-001: 读取队列 → STP-002
STP-002: 检查 active features → STP-100

[Phase: Monitor Loop]
STP-100: 检查每个 .status 文件 → STP-101/STP-200/STP-300
STP-101: 状态=not_started → 启动 Agent → STP-100
STP-200: 状态=done → 调用 complete → STP-201
STP-201: 检查 auto_start_next → STP-202/STP-300
STP-202: 启动下一个 feature → STP-100
STP-300: 所有完成 → 退出

Feature Agent 工作流

[Phase: INITIALIZATION]
STP-001: EVENT:START → STP-002
STP-002: 读取 spec.md → STP-003
STP-003: 读取 task.md → STP-010

[Phase: IMPLEMENT]
STP-010: 检查未完成任务 → STP-011/STP-100
STP-011: 实现当前任务 → STP-012
STP-012: 更新进度 → STP-010

[Phase: VERIFY]
STP-100: 验证所有任务完成 → STP-101
STP-101: npm run lint → STP-102
STP-102: npm test → STP-103
STP-103: 检查 checklist → STP-200

[Phase: COMPLETE]
STP-200: git commit → STP-201
STP-201: 更新 status=done → STP-202
STP-202: EVENT:COMPLETE → END

使用方法

基础使用

# 1. 创建新 feature
/new-feature 用户认证

# 2. 启动 feature 开发环境
/start-feature feat-auth

# 3. 启动并行开发 (LockStep 模式)
/parallel-dev

# 系统将严格按照 STP 步骤执行,不会跳过任何验证

状态文件格式

# features/active-{id}/.status
feature_id: feat-auth
status: implementing
stage: implement
stp_pointer: STP-010    # 当前执行到的状态锚点
progress:
  tasks_total: 5
  tasks_done: 3
  current_task: "实现登录 API"
registers:
  REG_CUR_TASK: "task-003"
  REG_SPEC: "..."
started_at: 2026-03-05T10:00:00Z
updated_at: 2026-03-05T10:30:00Z

配置选项

workflow:
  auto_start_next: true          # 并行开发完成后自动启动下一个
  protocol:
    strict_mode: true             # 严格模式
    emit_stp_events: true         # 输出 STP 进入事件
    checkpoint_interval: 5        # 检查点间隔

verification:
  require_lint: true             # 要求通过 lint
  require_test: true             # 要求通过测试
  require_checklist: true        # 要求完成检查清单

recovery:
  auto_resume: true              # 自动恢复
  max_retries: 3                 # 最大重试次数

EVENT Token 规范

协议定义了标准的事件格式实现可观测性:

EVENT:START <feature-id>
EVENT:STAGE <feature-id> <stage>
EVENT:PROGRESS <feature-id> <done>/<total>
EVENT:BLOCKED <feature-id> <reason>
EVENT:COMPLETE <feature-id> <tag>
EVENT:ERROR <feature-id> <message>
EVENT:STP <feature-id> <stp-id>

总结

AILock-Step 协议通过以下机制确保 AI Agent 的可靠执行:

  • 状态锚点强制线性执行:通过物理跳转消除幻觉性跳步
  • 原子算子:确保每个操作的幂等性和可追溯性
  • 寄存器系统:提供清晰的数据流转和状态管理
  • 物理存盘:实现真正的断点续传能力
  • 符号逻辑:屏蔽语义噪声,让 AI 专注于执行

核心理念:采用 AILock-Step 协议是为了确保任务执行的绝对幂等性。作为一个执行器,不需要理解任务的”宏观意义”,只需确保每一个 STP 的 REG_ 转换准确无误。

相关资源