1995 字
10 分钟
- 次浏览
自我迭代机器人,第一步不是让模型自己改代码
读前导览

我更愿意先把检索、记录、校验这些稳定动作交给代码,再让模型做审查。真要写入,也得看 diff、跑验证、能回滚。

正文
1995 字
阅读
10 分钟
结构
7 节
来源线索

self-iteration-safety-notes

self-iterating-agent deterministic-commands review-gates

自我迭代机器人是一个很容易被写偏的题目。我也不是没动过那个念头:既然它能读日志、能提建议、能写补丁,为什么不先让它把自己改起来?

模型能读日志,能总结问题,能改脚本,能跑检查,甚至能给下一轮自己写计划。把这些能力连起来,纸面上看,仿佛就得到了一套会自己变好的系统。

但我现在越来越不愿意从“让模型自己改代码”开始讲这件事。

我现在更想先处理另一件事:系统里有哪些动作本来就不该继续交给模型。检索、文件管理、状态查询、审计记录,只要能用确定性代码完成,就应该先从模型上下文里搬出去。

模型负责复杂判断,代码负责稳定动作。分清这两件事后,模型就不用反复处理那些固定、重复的工作。

第一层是代码替模型减负#

机器人最容易被模型拖慢的地方,常常是那些反复出现、规则清楚、答案不该飘的事情。

比如:

  • 查文件索引。
  • 查长期记忆。
  • 显示索引状态。
  • 写入显式记忆。
  • 对文件做 hash 去重。
  • 给本地材料做摘要和分类。
  • 更新全文检索索引。

这些事情不需要每次都让模型重新理解一遍。它们更适合落成命令、脚本、SQLite 表、FTS5 索引和固定输出格式。

如果有人问“有没有某个文件”“记忆里有没有某段内容”“当前索引是否正常”,系统应该先走确定性查询,而不是把全部上下文塞给模型,再让模型凭语感猜一个答案。

让模型做检索入口,系统看起来会更聪明;让代码做检索入口,系统才更容易长期稳定。

这两者的差别,在演示里不一定明显。到真实运行时,它会变成响应时间、资源占用、可解释性和故障排查成本的差别。

第二层才是模型审查#

模型仍然很值得用,只是更适合放在第二层。

每完成一个小改动后,模型可以做审查:

这次改动是否符合目标
有没有超出资源预算
代码是否真的替模型减负
下一轮最值得做哪 1-3 个改动

这里我最在意的是审查,不是让模型直接接手执行。

子 agent 可以提建议,可以指出风险,可以要求补测试,也可以提醒某个方向已经偏离目标。不过它不该默认拥有直接改主线、改部署、改权限、改凭据处理方式的权力。

审查结果要进入计划或 issue。模型的判断可以保存下来,但下一步怎么执行,还是要走工程流程。

这也是我更能接受的“自我迭代”:模型把问题和风险说清楚,后面的规则再决定能不能继续。

自我修改要有五道门#

如果机器人真的要进入自我修改,至少要先过五道门。

第一,有 run 记录。

谁触发了这轮迭代,目标是什么,改了哪些文件,为什么要改,审查结论是什么,都要能回看。没有记录的自我修改,说白了就是无人值守的临时操作。

第二,有 diff 审查。

自我修改不能偷偷碰凭据、权限、部署配置和外部发送路径。哪怕改动很小,也要能看见它动了哪里。模型说“只是优化一下”不够,还是要把 diff 摆出来看。

第三,有验证命令。

索引、检索、健康状态、构建、测试,至少要跑一项和这次改动有关的检查。没有验证的自我迭代,看起来像在进化,实际也可能只是在累积不确定性。

第四,有资源预算。

小服务器不适合为了“更智能”就加常驻向量库、重型后台、多模型循环或文件系统 watcher。能按需运行,就别常驻;能用 SQLite + FTS5 解决,就先别上更重的服务。

第五,有回滚路径。

机器人能改东西之前,必须先知道怎么退回去。备份、版本号、包 hash、恢复命令,这些都比“下一轮让模型修”更可靠。

这五道门听起来朴素,甚至有点慢。不过自我修改最需要的是让每次写入都能查到来源,也能停下或退回。

别把自我迭代写成无限循环#

很多自我迭代方案最危险的地方,是把循环画得太顺。

观察 -> 思考 -> 修改 -> 部署 -> 再观察

这个图很漂亮,但它省掉了几个上线时绕不开的问题:

  • 修改前谁冻结计划。
  • 部署前谁看 diff。
  • 失败时谁回滚。
  • 资源超限时谁拒绝。
  • 触碰外部系统时谁确认。

如果这些问题没有回答,自我迭代图画得再顺,也只是把执行权藏进循环箭头里。

我更愿意把它画成窄门:

确定性命令
-> 模型审查
-> 人或规则确认
-> 小范围修改
-> 本地验证
-> 可回滚发布

这个链路慢一点,好处是每一步都能停下来。

小服务器是很好的约束#

服务器资源有限不是坏事。

它会强迫系统把“想做”和“该做”分开。很多能力在概念上都能成立,但不一定值得做成常驻服务。

比如长期向量服务、Web 管理后台、多模型后台审查、持续文件监听,这些都很诱人。不过如果机器只有很小的内存余量,第一版就不该追求这些东西。更合适的做法是:

  • 索引用 SQLite 和 FTS5。
  • 重建索引按需触发。
  • 审查在任务结束后运行。
  • 状态查询走固定命令。
  • 健康检查输出短摘要。
  • 复杂后台先不上公网。

资源少不代表做不成,它会逼着设计收窄。

一个在小服务器上跑得稳的机器人,往往比一个看起来很完整、却到处常驻的系统更适合长期维护。限制会逼人把架构做窄,也逼人承认:不是每个“以后可能有用”的能力,都该现在就变成服务。

第一篇先写清楚哪些事不能自动做#

如果要公开写自我迭代机器人,我不会先写“它已经能自己做什么”。

我会先写这些限制:

  • 哪些事情交给代码。
  • 哪些事情交给模型审查。
  • 哪些事情必须确认。
  • 哪些文件永远不能被自动改。
  • 哪些服务不能因为一句建议就上线。
  • 每轮修改如何留下记录。

我会把这些限制写在前面。一次自动修复很容易演示。麻烦的是改到第十次、第一百次以后,系统还能说清每一步为什么发生。

说不清为什么拒绝、暂停、回滚的系统,还不适合谈自我迭代。

先别急着让它自己改自己#

所以我会把第一步放在代码之外的准备工作上,而不是直接让模型改代码。

第一步是把检索、索引、命令和审计记录做好,先少让模型处理固定动作。第二步再让模型参与审查,提出下一轮可以改什么。真要写文件,就看运行记录、diff、验证结果、资源预算和回滚办法。

我不反对机器人自我迭代;我反对把它讲成一个会自己越跑越好的循环。

自我迭代机器人,第一步不是让模型自己改代码
https://blog.sunmmyapi.xyz/posts/self-iterating-agent-code-before-self-edit/
作者
Sun
发布于
2026-05-29
许可协议
CC BY-NC-SA 4.0

继续读

相关内容