AI 自主开发
本文面向使用、部署和维护 Open ACE AI 自主开发功能的用户与开发者,说明当前实现的功能边界、工作流生命周期、会话线设计、CI 自愈、合并后验收核对、隔离执行、用量统计和前端可观测性。
本文描述的是仓库当前实现。修改自主开发代码时,应同时更新本文、英文版文档和相应回归测试。
1. 功能概览
AI 自主开发把一条需求或一个 GitHub Issue 转换为可审计的软件交付流程:
- 准备独立分支和工作树;
- 生成方案并独立审查方案;
- 根据审查意见收敛最终方案;
- 实现代码并运行定向测试;
- 创建或更新 Pull Request;
- 独立审查代码,按意见修复并复审;
- 生成最终报告;
- 等待并检查 GitHub CI,必要时自动修复;
- 处理主分支同步或合并冲突,合并 PR,并清理分支和工作树;
- 合并后由无凭据、只读的独立验收 Agent 在合并后的 main SHA 上核对验收清单;confirmed 才自动关闭 Issue,rejected/indeterminate 暂停等待人工复核。
工作流的目标不是让一个 Agent 连续执行一段不可见的脚本,而是把关键决策、AI 会话、代码变更、测试、审查、重试和失败原因记录为可恢复的里程碑。
1.1 适用范围
适合:
- 需求边界明确、可以通过代码和测试验证的 GitHub Issue;
- 需要方案审查、代码审查和 CI 闭环的中小型改动;
- 多 Issue 串行批处理;
- 需要在时间线中查看 Token、请求数、会话和代码差异的受控自动化。
不适合:
- 需要生产环境凭据或任意管理员权限的任务;
- 无法通过仓库内测试、CI 或明确验收条件判断完成度的任务;
- 要求 Agent 直接修改受保护 Git 元数据、绕过分支保护或自行合并未通过检查的代码。
2. 用户操作
2.1 创建工作流
在 AI 自主开发页面中选择项目、CLI 工具、模型和需求来源。需求可以是文本,也可以是 GitHub Issue URL 或编号。
创建时会固化一份 definition_snapshot,用于保留当时的需求、工具、模型、分支策略和批次信息。后续配置变化不应偷偷改变已运行工作流的定义。
分支策略包括独立 worktree、新分支和当前分支。批处理会强制使用独立 worktree,并为同一批次锁定共 同的 origin/main 基线,避免后创建的工作流看到前一个工作流尚未合并的中间状态。
2.2 暂停、恢复与停止
- 暂停:冻结正在运行的 Agent 进程并保留工作流状态;人工暂停不会被调度器自动恢复。
- 恢复:继续被冻结的进程,或按当前阶段重新进入调度。
- 停止:终止当前 Agent,并把工作流置为
cancelled;同一批次中尚未开始的后续工作流也会取消。 - 失败后重试:仅适用于
failed或planning_timeout,从持久化的当前阶段恢复。
暂停和停止不是同义操作。新增状态或错误分支时,不得破坏这两个按钮在活动状态下的可用性。
2.3 里程碑操作
- 查看定义/方案/审查/报告:打开持久化内容;
- 查看代码变更:按里程碑或整个 PR 查看 diff 和增删统计;
- 查看会话:打开该里程碑所属的稳定会话线(完整 transcript,含时间戳与 Markdown 渲染);
- 取消轮次:取消目标里程碑之后的步骤,进入
wait,等待用户反馈; - 从此处分叉:复制分叉点之前的历史,创建独立工作流和工作树;
- 反馈后继续:把用户反馈记录为新里程碑,再回到对应流程。
3. 领域模型
3.1 Workflow
autonomous_workflows 是流程级状态,保存:
- 当前阶段、状态、开发轮次和错误;
- 项目、分支、worktree、PR 和批次信息;
main_session_id、review_session_id、test_session_id、verification_session_id;- Token、输入/输出 Token 和请求数汇总;
- CI 修复次数、失败指纹和诊断状态;
- 验收核对状态(
verification_status)、尝试次数、Issue 验收快照哈希和人工改判上下文; - 暂停、超时、用户反馈和恢复上下文。
3.2 Milestone
workflow_milestones 是时间线中的审计单元。一个里程碑只描述一次明确事件,例如方案生成、方案审查、实现、测试、PR 审查、CI 诊断或冲突修复。
里程碑保存自己的增量用量 phase_*,以及会话、内容、提交、diff 统计和错误。它不是工作流累计用量的副本。
验收核对里程碑有自己的行生命周期:verifier 启动时先创建 in_progress 的 “Acceptance verification: running” 行并承载实时活动,结算时在同一行上写入终态结论,而不是另起新行。
3.3 Agent session
agent_sessions 保存 Open ACE 的稳定会话身份和 CLI/模型提供商的实际会话 ID。恢复会话时可能替换底层 provider transcript,但不应替换工作流的稳定会话线身份。
4. 生命周期和状态机
正常阶段顺序为:
preparation → planning → development → pr_review → report → merge → acceptance_verification
wait 是用户反馈等待阶段,不属于线性 PHASE_ORDER;它可以从取消轮次或反馈流程进入,再返回合适的业务阶段。
acceptance_verification 是合并后的独立验收核对阶段(#2335,默认启用,可通过配置 autonomous.acceptance_verification_enabled 关闭)。verdict 为 confirmed、或人工把 rejected/indeterminate 改判为 confirmed 后,工作流才进入 completed;关闭该功能时合并后直接完成。
主要状态:
| 状态 | 含义 |
|---|---|
queued | 批处理中等待前序工作流 |
pending | 可由调度器启动 |
preparing | 准备仓库、分支和 worktree |
planning | 方案生成、审查和定稿 |
developing | 实现与测试 |
pr_review | PR 审查、修复和复审 |
reporting | 生成最终报告 |
waiting | 等待用户反馈 |
merging | CI 检查、修复、同步和合并 |
verification_pending | 合并后的独立验收核对进行中 |
paused | 人工暂停、应用配额暂停、上游硬配额暂停或验收暂停(rejected/indeterminate/重试耗尽) |
planning_timeout | 方案阶段超时,等待延时或重试 |
completed | PR 已合并、收尾完成,且(启用验收时)验收 confirmed 后 Issue 已关闭 |
failed | 自动恢复边界已耗尽,需要人工处理 |
cancelled | 用户停止或批次级取消 |
持久化状态是恢复依据。进程重启后不得仅依赖内存中的 Agent、锁或 SSE 连接来判断下一步。
5. 稳定的会话线设计
每个工作流只维护四条稳定会话线:
| 会话线 | 持久化字段 | 覆盖里程碑 |
|---|---|---|
main | main_session_id | 方案生成、方案收敛、开发、PR 修复、最终总结和 CI 修复 |
review | review_session_id | 方案审查和 PR 代码审查 |
test | test_session_id | 各开发轮次的测试与验证 |
verification | verification_session_id | 合并后的独立验收核对 |
这些会话线在多个里程碑间通过 resume 复用,目的是:
- 让实现 Agent 保留需求、方案和已做改动的连续上下文;
- 让审查 Agent 独立于实现者,避免同一上下文自我确认;
- 让测试 Agent 独立设计验证矩阵,而不是只接受实现者声明;
- 让 UI、用量统计和问题排查有稳定身份。
5.1 上下文溢出
底层模型会话达到上下文上限时,系统会:
- 识别 provider 的 input/context overflow 错误;
- 清除该稳定会话线与旧 provider transcript 的绑定;
- 使用自包含、精简的提示重新调用;
- 把新 provider 会话重新绑定到同一个 Open ACE 会话行;
- 保留失败尝试已经产生的用量。
因此上下文恢复不会创建新的会话线。任何修改都必须保持 main / review / test / verification 四字段是工作流的唯一稳定拓扑。