Nondeterminism considered harmful

一直以来很多人都有一个观点,也就是AI替代程序员。

目前看来这件事儿好像还在往前推进。很多人似乎已经很轻松地就能通过 Agent 来构建应用、进行创作或者完成其他方面的任务了。

但是这个很多人是多大范围呢,从身边的统计学来看,我确实能观察到一大堆的案例。但是脱离了程序员或者软件工程团队这么一个特殊的群体,你会发现真正应用上了这堆东西的并不多。哪怕现在AI产品如雨后春笋一般冒出来,现在能够被好好利用的东西还是少之又少。

核心问题始终都在于,AI真正解决的问题并不是“替代程序员”,而是作为一个更加灵活的工作流编排工具。

只是恰好程序员手上的工作是最容易标准化和自动化的,也就最先迎接了这一波冲击。编程语言相对于自然语言来说更加形式化,也有非常完善和自动化的工具来让Agent驱动来进行工作,加上开源时代有足够丰富的语料来进行训练,自然就能成为最先被应用的领域。

当然 Agent 毕竟还是处理自然语言的,于是进一步地被开发出来通过Long context prompting来执行任务的能力,进而形成了 Agent Skill 这么一个标准的用法。你只要按照流程构建 Skill 文档,大部分 Agent 都可以按照你设计的流程执行。这一个标准看似只是把某些prompt连接在了一起,但其实是个相当强的能力,因为本身Agent训练的方式很多时候在传统工作流中需要大量逻辑或者组件来实现的东西,你只需要额外一两句话就可以完成,比如分成多Agent并行执行或者从某步骤开始重试。

但是这点上也是有另外的问题的,Agent的底层毕竟还是基于深度学习,概率模型的底子决定了它在做很多事情的时候是不稳定的,既然你可以灵活地加入一些流程,那他当然也可以灵活地跳过甚至抛弃一些流程。因此在关键的工作流中,使用确定性的执行方式(代码)是必不可少的。

这其实是给我们呈现了这么两种不同的工作流,一种是传统的、确定性的、有一定处理门槛而同时可以被 Agent 辅助完成的确定性工作流 —— 编程。

而全新的、非确定性的、所有人都可以直接参与的这种 Agentic 工作流。

后者是现在大模型时代给所有人的红利,但同时也意味着这是个埋很深的坑。因此对于关键的工作流,或者关键的工作流程,很多时候还是不能直接替代。就像目前的大部分 Agent 工具一样,还是得靠 TypeScript 或者 Rust 等来糊,Markdown还没能完全替代编程语言。

当然非确定性并不一定完全是坏事儿,当你需要用它去做一些创造性工作或者去探索一些东西的时候,能够摆脱你自己的固有视角限制,发现一些新的观点和方向。当然这就又回到了我在前面的内容里说的点,这些东西是否有效、是否属实或者是否能够获取到大量受众,就需要看个人所掌握的工具和能力水平了。

回到文章最开头的那个现象。AI能否替代程序员呢?我长期持有的观点始终是这个样子的:这个行业最终会被淘汰,但是绝对不是现在这些人吹嘘的“替代”。随着 Agent 能力的增强其所综合应用编程工具和Agentic workflow的能力也会越来越强,编程绝对不再是程序员独有的能力。Agent 能做的事情应该是去自动化任何可以自动化的工作,而编程只是它可以利用的一个手段。所以拥有编程能力,至少借助 Agent 拥有编程能力的人会越来越多,这个角色会越来越不显眼,但是作为实现确定性执行引擎的基础,这部分工作是无法直接替代的。

我从三月份开始一直在尝试使用Agent写长篇小说,现在已经在番茄更新了三部,总共超过100万字的内容了,虽然本身流量一般但对我来说仍然很有成就感——去年我保持了100天连续更新,才总共产出了10万字,这种效率已经远胜我了。很多工作流在我看来只要稍作总结就能完全自动化。目前很多人还在糊各种花里胡哨的软件,其实是还沉浸在有了锤子看什么都是钉子的状态。当然对许多人来说这也是件好事儿——总得先用起来,知道它能做什么,再接下来才能更好地利用它。