AI渐进编程之五:给 Agent 穿上动力装甲——SIADOS 状态转移方法 前一篇我们讲的是状态机怎么描述转移。这一篇继续往前走重点不在“状态怎么摆”而在一轮任务推进里状态怎么更新系统怎么靠反馈继续往前走。为了说明这个过程本书把一轮任务拆成六个部分称为SIADOSSStateIInputAAnalysisDDriverOOutputS’State Update这六步不是为了显得复杂而是为了把 AI 编程从“一次性输出”变成“有反馈的持续推进”。1. 为什么要从一次输出变成 SIADOS如果只有一次输出系统最多只能回答“这一轮做了什么”。但真实任务不是一轮结束的尤其是这些情况论文要反复修改代码要多轮修复状态要持续维护失败要留下轨迹下一轮要基于上一轮继续推进这时真正重要的就不是“这一轮写了什么”而是这一轮之前系统处于什么状态这一轮输入了什么这一轮分析出了什么这一轮执行了什么这一轮输出了什么这一轮之后状态变成了什么这就是 SIADOS 的意义。2. SIADOS 里的六步分别做什么2.1 SStateState 不是聊天记录而是当前项目已经确认的事实。比如当前任务是什么当前允许修改的范围是什么已知问题有哪些上一轮结果是什么2.2 IInputInput 是这一轮新的输入。它可以来自人类的新要求上一轮的验证结果当前任务的补充信息新发现的约束或问题2.3 AAnalysisAnalysis 是分析任务边界和风险。这一轮能不能做、该不该做、要不要缩小范围通常都在这一层判断。2.4 DDriverDriver 是真正执行动作的部分。它负责把分析结果变成修改、调用或其他受控动作。2.5 OOutputOutput 是这一轮产生的结果。可能是文本修改代码 diff验证结果问题记录新状态的候选内容2.6 S’State UpdateState Update 是最关键的一步之一。它把这一轮真正有用的事实写回状态供下一轮继续使用。3. 为什么状态更新比一次性输出更重要因为 AI 编程真正难的地方不是开始做事而是做完之后下一轮怎么接着做失败之后下一轮怎么避免重复失败状态变化之后系统怎么知道自己有没有在往前走如果没有状态更新SIADOS 就只是一次普通输出。但有了状态更新SIADOS 才变成一个真正的循环。4. 为什么失败也必须写回状态很多人会下意识觉得失败就失败了重来就行。但在 AI 编程里这样做很容易让系统一直重复同一种错。所以失败不能只停留在“结果不对”还要进入状态变成可复用的反馈。比如这次为什么失败哪些路径已经试过哪些动作已经证明无效下一轮不要再走哪条路这就是为什么本书一直强调失败不是消失而是要被保存下来。5. 什么叫收敛收敛不是一个很玄的词。在这本书里它的意思其实很朴素系统在多轮运行后不再原地摆动而是逐步接近一个可接受结果。也就是说收敛至少要满足三个迹象修改范围越来越清楚失败路径越来越少状态越来越稳定如果系统每一轮都在换方向、换文件、换理由那就不是收敛而是摆动。6. 为什么循环里的反馈比一次性输出更重要因为一次性输出只能说明“这一轮给出了什么”循环里的反馈才能说明“系统有没有越走越对”。举个很简单的例子只看一次输出你可能看到 AI 改了文本看起来也通顺似乎没问题。看循环反馈你会继续观察它是不是只改了允许范围它有没有把问题写回状态下一轮是不是还在重复同样的错误失败后它有没有修正方向这就是循环的价值。它让 AI 不只是“能说”而是“能在反馈里修正自己”。7. 状态更新和收敛之间是什么关系这两者是连在一起的。状态更新做对了下一轮就能拿到正确的输入。下一轮输入正确了系统才有机会继续往收敛方向走。如果状态更新错了下一轮就会在错误基础上继续跑最后越来越偏。所以状态更新不是附属动作它本身就是收敛的一部分。8. 一个最小的 SIADOS 例子可以先这样理解state:current_task:revise Introductionscope:[Introduction]issues:[claim too strong]input:request:reduce claim strengthconstraint:do not touch Abstract / Conclusionanalysis:scope_ok:truerisk:cross_section_driftaction_plan:revise Introduction onlydriver:action:apply_patchoutput:changed_sections:[Introduction]validation:pendingnotes:[claim weakened,no scope violation]state_update:current_task:revise Introductionscope:[Introduction]issues:[abstract may need later review]last_result:local refinement done这里的重点不是 YAML而是它表达了一件很具体的事这一轮不是结束这一轮只是推进了一步下一轮可以基于更新后的状态继续做9. SIADOS 最容易犯的错9.1 只记结果不记原因这样下一轮还是不知道为什么会失败。9.2 只记失败不记可继续的部分这样系统会把自己卡死。9.3 状态太重每轮都写一堆无用信息最后更新成本太高没人愿意维护。所以状态更新要控制粒度只保留能影响下一轮判断的内容。10. SIADOS 和状态机、Harness 的关系这一点要一起看。Harness 做什么限制动作检查结果执行验证约束下一步状态机做什么定义阶段之间怎么转定义什么时候能进入下一步定义失败后该去哪里定义哪些状态之间不能乱跳SIADOS 做什么把一轮任务拆成可执行的六步把输入、分析、执行、输出和状态更新串起来让下一轮真的能基于上一轮继续可以这样理解Harness 是执行层的控制器状态机是控制层的骨架SIADOS 是一轮推进的工作流没有状态机Harness 容易变成一堆临时规则。没有 Harness状态机又只是纸面结构落不到实际动作上。没有 SIADOS系统就没有一个清楚的单轮推进框架。11. 本章小结这一章想讲清楚的核心是AI 编程不是一次性输出而是一轮一轮在 SIADOS 里推进。状态更新的意义不是把历史堆起来而是把下一轮真正需要的事实写回去收敛的意义不是每一轮都完全正确而是系统能在反馈中越来越接近可接受结果。下一章我会继续讲为什么状态更新必须和验证结合起来以及为什么“看起来对”不等于“真的对”。