Uncategorized

开发日志9: “自我进化”的牛,我也想吹一个

大概两三周前,我在自己做的播客里听到一则新闻:英伟达(Nvidia)把可自我进化的智能体(agent)装进了消费级显卡里。当时我觉得这就是现代公司为了营销搞出来的噱头。这件事本身是真实、可信的,但它的影响边界并没有我们预想的那样宽,或者说,效果并不像它宣称的那样好。我们一方面在生产故事,另一方面也在消费故事,在这个过程

大概两三周前,我在自己做的播客里听到一则新闻:英伟达(Nvidia)把可自我进化的智能体(agent)装进了消费级显卡里。当时我觉得这就是现代公司为了营销搞出来的噱头。这件事本身是真实、可信的,但它的影响边界并没有我们预想的那样宽,或者说,效果并不像它宣称的那样好。我们一方面在生产故事,另一方面也在消费故事,在这个过程中,我们也被很多人为编造的故事绑架,甚至是误导。

新闻发布后的两三周里,市面上陆续出现了一些打着“自我进化(self-improving)”旗号的技能(skill)。其中不乏一些非常优秀的思路,讲得浅显易懂,自己实践也非常有收获。但大多数博主,非常不客气地讲,怕是连自己转发的文章里面讲到的理论甚至都没有亲自上手试一试。这个炸弹能不能爆不重要,重要的是有人说它会,而且自己也相信会,并以此来博取大众关注。

如果你抱着跟我之前一样不管不顾、只是看看热门的心态,也不会有什么损失。但如果你确实按耐不住心里的好奇,也想体验一下新科技的魅力,找了个点赞最高的贴子仔细看的时候,一方面会觉得“就这?”, 另一方面又会有“还可以这样?!”双重感觉。这种意料之外,又似曾相识的感觉,其实是因为这种做法已经根植在我们日常行为中,觉得有那么一点不可思议也是因为你从来没想过给它命名,或者你从来不认为这是值得拿出来冠以高科技称号的东西。

如果你在互联网公司从事过软件开发工作,肯定对“敏捷开发”这个词比较熟悉。我觉得有句俗语能更生动地体现它的内涵,那就是“小步快跑,快速迭代”。就是说做一个软件不是一次性做到自以为的完美,而且也做不到——我们之前讨论过,不管是一款产品,甚至是现在给AI模型用的skill(技能),都不可能一次性规划到位,从零到满分一跃成为完美形态。而是从零到一,再到下一个阶段,不断修正、不断进化,最终达到预期的结果,或是预期之外经过某种妥协后的结果。

米开朗基罗说,雕塑本来就长在石头里,他只是把它取出来了而已。这显然是大师的过谦之词和艺术信仰。但我们真的就像 3D 打印一样让一个雕塑一体成型吗?未必。从模糊到清晰,我们刻下的每一刀,都不断地逼近我们“看”到的物象,却从来不是一蹴而就的。

这种渐进的、动态的、不断修正下的,向着一个最终目标无限接近的过程,就可以称其为“进化”。

所以看上去,“自我进化”这个概念,今天被摆上台面,受到重视的,更多的是“自我”。但如果我说,连“自我”这部分也不是最近才有的新东西,等我解释之后,你不仅不会大吃一惊,还会若有所思“原来是这样”。

我们用 AI 工具开发的时候,比如想要做出一个界面,手里有参考图,会告诉大模型:“我想把这张图做得和参考图完全一样(或者有哪些地方要调整,比如除了主色调换成深红外,其它都完全一样),你照着这个去实现。完成后自己截图,对比得出你实现的和参考图之间的偏差,然后进一步思考这些偏差如何修正,再按照‘计划-验证计划-执行计划-测试实现-截图对比偏差’的流程持续循环,直到代码呈现的完全符合我们的预期为止。”

类似这样的提示词,都会开启大模型“自我循环”的一个完整周期。而这种用法,在模型能力还远没有现在这么强大的时候,已经非常普及了。有人说“你这个例子算是 AI 的高阶应用,而且对模型的能力肯定也有基本的要求,我自己的工具就没法自主完成这样的多次循环”。那么,我退而求其次,谈一个另一种形式的“自我循环”。

在去年这个时候,大家还在尝鲜用 Cursor 的时候。假如我们有个脚本的需求,会把这个需求投喂给会话框,Cursor 在编辑器窗口中生成第一版的代码后,我们在终端中运行这段代码,以此验证它是否符合我们的预期。如果有任何报错,或者没有拿到预期的结果,我们会把代码运行的结果(包括错误日志)扔给原来的那个会话窗口,让 Cursor 去做出修正。然后拿到第二版,我们再去验证,再决定是否还需要继续修正。这个多次重复的“人加 AI”的“需求-产出-验证-修正”过程,如果把人和 AI 进行打包,便也是一个“自我循环”。相比于 AI 完全自主,后者只是“自我”的程度不同,或者换句话说,在这些循环中,人和 AI 的参与比例是不断变化的。随着大模型的能力不断强化,AI的参与度越来越高,人的参与度越来越低。等到模型能力达到一定程度,人的参与度就可以非常小,小到可以被忽略的状态,小到只当有重大决策或是遇到阻塞(block)问题的时候,才需要大模型停下来(hand off),才需人的微小介入。到了这种程度,这个“自我循环”就由大模型自主推进,加上这个过程对目标的持续趋近,便完成了“自我进化”的目的,也便是把“self”和‘improving”结合起来,形成了所谓的“self-improving”。

这便是大模型自我进化的简单抽象。

有段时间,Claude Code 的循环(/loop)技能很热门,它所解决的,就是在模型能力未达到自我循环的要求,或者强行把没有逻辑关系的几个过程粘合起来的时候,仍需要持续推进的问题。而目标(/goal)技能,把一次任务的预期作为模型的目标函数,让模型自主探索,分阶段、多次循环直到完成,这已经是在模型具备了上文所讲“自我进化”能力之后的事情了。

所以,为什么你乍一看见“self-improving”这个概念觉得陌生,而再稍有了解之后就觉得似曾相识。这样一番解释,应该可以让你恍然大悟。

东西一直在,只不过以前没这个名字而已。

在这个“自我进化”演化至今的过程中,我们可以看到人的角色从核心环节逐渐向边缘靠近,直到几乎退出了整个业务流程。好比是家长和孩子的关系。在孩子年幼的时候,家长会多替孩子做一些计划、决策,等孩子长大了,家长就慢慢淡出孩子的视线,直到他能完全自主决定为止。

不过,解释到此,仍然有人对此抱有怀疑的态度。我想,大抵上他是想说:“你举的这些例子,充其量算是代码层面的‘自我迭代’,但我们了解到的,是 Agent 的‘自我进化’,完全不是一回事嘛!”

那么,首先要问,什么是 Agent?Agent 是 AI 主导的工作流中某个有特定能力、权限边界(包括前置指令词、环境变量、API 授权、可调工具、运行目录等),能够重复执行某种任务的运行单元。我们且不讨论权限方面的“进化”,如果一个 Agent 限制了不能联网,却“进化”得可以访问网络资源,这不是生产力,这是安全漏洞。这样一来,所谓 Agent 的“自我进化”,主要指的是它的特定能力的“进化”,既然这个能力是“特定”的,这个能力带来的变化必然是需要被明确“预期”的。换句话说,Agent 的进化,指的是这个 Agent 完成某个特定任务的目标感越来越强、错误率越来越低、时间越来越少。我们再回顾 Agent 的组成,能够影响这些的,便是提示词中写的怎么做的步骤,以及这些步骤映射出来的脚本、命令、MCP等等这些代码化或者伪代码化的部分。

是不是又回到了代码的“自我迭代”?

既然说清楚了这个概念的底层逻辑,不如试着想想,如何在自己的工作流中把这种“自我进化”的机制用起来,让时间成为持续撬动成长的中坚力量。

前几篇文章中我写过,我有个自动生产播客的 Claude Code 插件(如果没有读过前文,可以搜索 GitHub 仓库: n0rvyn/personal-os,或者直接访问:norvyn.com 收听播客)。以此为例,我讲讲以前它是如何“进化”的,现在又是如何“自我进化”的。

在没有“自我进化”这个概念以前,如果哪天我觉得播客有问题,比如同质化,甚至来来回回几期都在讲某个非连续性热门新闻,我会在 personal-os 本地项目中开个 Claude Code 会话,给它产出播客的目录(或者让它把目录直接记在项目级别 CLAUDE.md 中,便不需要每次都重复提醒),以及如下指令:

“@/path/to/workspace 本目录是当前这个项目中插件生产播客的工作目录,你在此查找过去3天的播客内容,通读全文后回到本项目,仔细查看和制作播客相关的所有 skill/agent/hook/script 以及文档体系中关于播客的定位、规范,等你对播客制作的现状及基本组件有了详细地了解后,回答这几个问题:1. 产出的播客是否符合我们的定位?2. 运行过程是否打破了软约束和规则门控?3. 中间文件是否准确记录了交接状态?4. 最近几次提交(commit)是否如预期产生了正向效果?或者修复了它要解决的问题?5. 最近几期有没有偶然涌现的超出预期的行为?如果有,是否可以增强现有规则、约束,使其可以稳定复现? 列出你发现的所有偏差(Gaps),以优先级高低进行排序。用 /write-plan -> /verify-plan -> /execute-plan -> /test-changes -> /review-implementation 来推进修复过程,或者用 /write-dev-guide 结合 /run-phase 分阶段实现。 在完成一次、或者一批次的修复后,运行不带语音转换(TTS)的端到端测试,如果全绿通过则进入下一项,如果有问题,循环‘修复-验证’的过程,直到全绿,然后进入下一项。 全部完成后,运行 /finalize,通过后运行 /review-before-commit,然后再 /commit。”

然后就是长达半天或者一天的长会话,中间会有一些方向性的决策,比如“文稿校验的 Agent 有个固定在末尾添加‘反思’段落的规则,如果当天没有什么值得反思,这部分会显得有些凑数,需要你来决策是否软化规则”。又或者是遇到某些“Auto Mode”(Claude Code 的运行模式,有:Auto Mode, Plan Mode, Accept Edits, N/A 共 4 种,顾名思义,开了 Auto Mode,模型有个边车会自己判断是否允许主会话中的操作)也不能决定的操作,会因此而短暂中止。等会话自然结束后,修改也会被提交至 GitHub 仓库。便需要等下一次 Claude Cowork 定时任务再次生产播客的时候看看质量是否有提升,再根据情况选择优化或者以这次修改为最终版本。

在这个例子中,人工参与的部分,即有对产物的质量核验,也有主动发起优化任务的最初会话操作,也不乏一些意外情况造成的中断补救。

但这个过程,可以让它更加“自主性”。

在原有生产播客的插件(plugin)目录里新加一个技能(skill),让它作为边车(sidecar)监控播客生产过程中规则是否被遵循、门控是否有效、大模型是否发挥得当、有没有被利用的漏洞,以及最终生成的播客质量是否符合原则和预期。也就是说,生产播客的时候同时跑两条线:一条负责生产,另一条负责监控。监控方在生产方最终完成之后,根据本次的观察结果对流水线的表现进行尝试修复,然后以 PR(Pull Request)的方式提交到 GitHub 仓中。

然后在 Claude Code 会话里设置一个定时任务,监控仓库有没有待审核的合并请求,判断提交的质量如何,是真的解决了实际问题还是过度设计,根据它反馈的问题和提出的解决方案决定要不要合并,同时以此判断这个边车监控 skill 的观察者视角是否恰当、提出的问题是否合理,并做出合理的修正。

这样两步操作后,播客制作流水线既是生产过程,也是修正过程,还让修正者也不断强化,如果这还不算“self-improving”,那怎么才算呢?

反观“自我进化”之所以显得扑朔迷离,一方面也是自媒体的不断吹嘘和围观群众的盲目跟进,说到底还是 AI 大势下人对自己焦虑的向外投射。另一方面也是受到了“自主”的误导,让人联想到 AI 的主观能动性,觉得是不是已经有人让它们开启了“意识”。

这其实是一种错觉。且不说需要人来触发一次会话,或者由定时任务来触发一次任务,即便是放权之后持续循环的整个过程,都可以分解成最小组成的元任务,而串起这些元任务的,要么是规则,比如脚本中写着执行的先后顺序,要么是模型根据上下文做出的判断,比如要调用某个工具,或者去检索某个向量数据库。而把模型的判断再拆分,便是权重、参数和目标函数(简化说明,非严谨科学论证)。

如果这也算是“自主意识”,那一个生态循环是否也有意识?从系统论的角度来讲,是不是一个系统只要有向外的自发行为,就算有意识?

如果这不算“自主意识”,那我们人类由五感接受外界刺激(触发),进而调动人体内各个系统,比如神经系统、呼吸系统、消化系统等,再由人这个父系统把刺激的结果表现出来,是不是也算一种无意识?进一步说,语言触发文化循环,使人具有社会属性,是不是也只是一种“应激反应”?

N
norvyn

独立 iOS 开发者,写字的人。在一座有海的城市,慢慢地做一些小而确定的东西。An independent iOS developer and writer — slowly making small, certain things in a city by the sea.

评论Comments

加载中…Loading…

留下评论Leave a comment