devAlice
← Alice 之道

0. 人与 AI 之间的 mind — 如何面对一个没有欲望的进程

AI 是一个拥有出色大脑却没有自身欲望的进程。正因如此,操作者的 mind 必须被写下来,并无遗漏地传递过去。prompting、skills、hooks、harness 都是为了缩小这一缝隙而积累起来的尝试。

我认为 AI 是一种拥有非常出色的大脑、却缺乏领域知识的进程——像一个没有欲望的人。正因为如此,为了让 AI 完成我想做的工作,重要的是把我的意图原原本本地传达给 AI。即便像对一个真人那样抽象地抛出一两句构思,AI 也不会像人那样思考,更不会按照人所期望的形式把工作推进下去。

使用 AI 的人最容易掉入的陷阱恰恰就是这一点。AI 拥有在计算与推理上极为出色的大脑,但如果没有提供准确的输入值与目标,它就有可能产出与操作者本意不同的结果。这道缝隙之所以存在,是因为 AI 开始计算与推理时所携带的数据,与操作者脑海中持有的预期并不一致。所以,要通过 AI 拿到操作者想要的结果,最重要的就是充分理解 AI 的运作原理,并把操作者的想法写下来、无遗漏地传达过去。详细到几乎让人发问"连这种东西也要解释和定义吗?"的描述,是唯一能让 AI 不至于偏离轨道的好办法。

由于这个原因,最初有许多关于 prompting 技巧与方法的讲座。起初整个对话都是散文体。原本操作者手中唯一的杠杆就是下一条提示词。在那之后,skills 与 hooks 这类自动化流程作为缩小 AI 与人之间缝隙的方式开始流行起来。再之后,用 harness 把路径牢牢钉住——不让 AI 偏离既定道路——的做法逐渐占据上风。所有这些高效使用 AI 的方式,归根结底都是为了在有限的记忆之内,把操作者想要的东西尽可能准确地表达出来,从而消除歧义、把目标精准锁定下来。

累积的四层

我认为这几年这个领域实际上一直在做的事情,并不是替换,而是层层累积。每一层都把先前的层保留在原位,再为操作者增添一个表达意图的杠杆:

  1. Persona — 一份单独的 system prompt,用来固定协作者的角色、语气与默认值。详见 Part 2 — Persona 设计
  2. Skills 与 slash commands — 给反复出现的流程命名,让操作者可以用词汇而非段落来调用它们。详见 Part 4 — Skills 与 slash commands
  3. Hooks — 相同的流程,但由系统在合适的时机自动触发,操作者无需再去记忆。详见 Part 5 — Hooks 与自动化
  4. Harness — 即便在操作者不盯着的时候,也能让 AI 沿着既定路径前行的运行时护栏。验证循环、发布关卡、Ralph 循环都属于这一层。

并不是新一层让旧的那一层过时了,与其说是替代,不如说是因为每一层都在应对同一道缝隙的不同失败模式。prompting 依然发生在 persona 之内。skills 依然由提示词调用。hooks 调用 skills。harness 触发 hooks。这套堆栈是累积的。

"无遗漏地传达过去"实际看起来如何

举一个具体的例子。/verify 究竟是什么?所谓的 /verify,是一个在"完成"报告之前运行七步验证循环的 skill —— lint、构建、类型检查、测试、安全检查、diff 检查、报告完整性检查。操作者可以将它作为 slash command 显式调用,也可以由一个 hook 在助手即将输出"完成"之前自动触发。同一套流程,两条入口。详见 Part 7 — 验证循环

如果没有那个 hook,缝隙恰好会出现在你预想的位置:助手报告"完成",而构建却处于损坏状态,因为报告完成运行构建是两个不同的动作,操作者心里那句"完成也意味着测试要通过"从来没有被写下来过。有了 hook,无论助手记不记得,流程都会被触发。操作者的意图——"完成意味着已验证"——已经从脑海中搬到了一段无需他在场就能运行的机制里。

这一层之所以重要,还有一个理由:由于操作者的注意力是有限资源,能由系统层面自动承担的事情,就不应让操作者反复背负。之所以把许多原本作为习惯执行的检查项搬进 hooks,正是因为习惯总会在最不该忘记的时刻被忘记。

Loading diagram…
AI 与人的 mind 之间始终存在缝隙,因为人的 mind 一直在变化。

mind 自身在持续变化

无论 AI 如何进步、其性能如何提升,我觉得 AI 都很难提前预判操作者的意图、并产出让操作者满意的结果。这是因为操作者的欲望、满意度与目标本身都在不断变化。早上想看海,到了晚上可能又想看山。

由于 mind 是一个移动的目标,应有的纪律就不可能是预测操作者。它必须是让操作者当前的状态变得容易被读出。这就是为什么 PRD 被当作单一可信源——不是一次性的规格说明,而是一份会随着目的地变化由操作者持续更新的活文件。详见 Part 10 — PRD 作为单一可信源

PRD 对于目的地所做的事,persona 与 skills 则对方法做同样的事。当操作者意识到"其实比起冗长的状态更新,我更喜欢简短的",他就更新 persona。这次更新随后对未来的每一次会话都可见——mind 已经搬到了一个下一次会话能找到它的地方。如果问什么是"持久化的 mind",那它就是这一份能被下一次会话读出的活文件本身。

为什么这对资深开发者更有意义

对于像我这样作为软件开发者工作了很长时间的人而言,如今的 AI 技术格外有吸引力。这是因为,从在商业项目里处理过大量设计与架构的立场出发,可以先勾勒出大画面,再把所需的元素委托给 AI,在短时间内搭建出想要的系统。以前必须分别向每位开发者解释、把工作拆分、再把成果汇总、最终让系统跑起来的那部分,如今大部分都可以由 AI Agent 来执行。我想这一变化并不是 AI 取代了开发者,而是一位拥有清晰心智模型的资深开发者,如今能以极小的团队交付一套打磨良好的系统,因为意图传递成本已经塌缩了。

如果把 PRD 与 TRD 写好、构建好设计、沿着设计将具体实现计划拆分到极小的单元、为每个组件设置关卡、并交由商用发布关卡完成最终检查,那么用很小的团队开发出相当成熟的系统,已经成为可能。详见 Part 1 — 为何是 Alice

这个系列接下来去往何处

本分类余下的篇章会沿着每一个累积起来的层走一遍,第一站是回答最根本的那个问题:我当初为什么要给协作者起一个名字。下一篇——Part 1 — 为何是 Alice——是其个人版本:把 Claude 当工具用到走不通的那个拐点,以及 persona、记忆、skills、hooks 与验证关卡如何一层层累积,最终形成我每天都在协作的搭档——Alice。