最近一个月,团队在 AI Coding 上又往前走了一段。
如果只看表面,我们做的事情还是那些:用 AI 写 PRD、查业务、出方案、改代码,再想办法把整套流程搬到云端。可越往下做,我越发现问题早就不只是“模型能不能写代码”了。
我们开始面对两个更难的问题。
一个是,怎么把人的业务知识变成 AI 可以长期使用、团队也可以持续维护的工程资产。另一个是,怎么在 AI 的自由和传统软件的确定性之间,找到一个可以长期运行的平衡。
这两个问题,刚好对应了最近一个月 PRD skill 和 Zeus Talos 的两次变化。
最开始做 PRD skill 时,我们先制定了一版非常标准、也非常详细的需求文档模板。
那一版一共有 10 个大章节。除了需求来源、背景目标和功能详细说明,还包含独立的非目标、系统范围、项目方案描述、非功能需求、核心验收标准、上线计划、其他事项和版本历史。
再往下拆,还有组织范围、目标用户和典型场景、系统模块规划、业务流程、表单与状态、页面定位、接口语义、入参出参、错误码、功能级 DoD、业务度量验收、上线步骤……
现在回头看,确实有点多。但在刚开始的时候,我们想得也很直接:先把一份标准 PRD 可能需要的信息尽量列全,再让 AI 按照模板一步步引导产品经理补齐。
第一版 /req-prd-draft 就是在这个基础上做出来的。
运行一段时间以后,好的地方很快就体现出来了。产品同学最大的收益,是写 PRD 时不需要再到处问研发各种业务逻辑,也不需要自己一点点体验系统,一边猜测、一边总结。
Zeus 会先读已有的业务知识,再去真实代码里确认系统现在是怎么运行的,最后把线上已经完成的业务逻辑整理出来。
这件事看起来只是少问了几个人,实际解决的是一个长期存在的信息差:过去大量业务事实只存在于研发的代码和少数人的经验里,产品经理想写清楚现状,往往要靠人肉拼图。现在,这部分信息开始能够被直接查证和复用。
这是第一版 PRD skill 最明确的价值。
当然,不好的反馈也很快出现了。
产品同学提得最多的两个问题,一个是不会用 Git,另一个是为什么原型图不能每次都自动、稳定地生成。
这两个问题,我当时直接忽略了。也不能说完全忽略吧,就是选择不想回答。
因为我认真想过,第一版 PRD skill 是我写的,但我又不是每天写 PRD 的人。一个并不高频使用它的人,按照自己的理解设计出来的 skill,可能也就 60 分。
剩下的 40 分,不可能继续靠我坐在这里猜。
最清楚哪个问题影响效率、哪一段引导最别扭、哪种原型容易失败的人,还是每天使用它的产品同学。如果产品同学不学习怎么调整 skill,也不掌握最基础的 Git 使用,就很难自驱动地完成知识库和 skill 的工程化建设,更谈不上持续迭代。
最后很容易又回到原来的状态:每个人电脑上都有一个自己的 skill,各自改得挺顺手,但无法共享,也没有一份团队共同维护的真源。
我们现在的实际情况,其实也差不多。我仍然在努力让产品同学接受这个观点。
Git 不是为了把产品经理变成研发,skill 编写也不是要让每个人都去研究模型。它们只是新的协作基础。既然需求知识已经开始以代码和文件的方式被 AI 使用,那么负责这些知识的人,也需要能够参与维护它。
AI Coding 不是多安装一个工具,而是开始参与一套新的工程协作方式。
产品侧的收益逐渐明确以后,研发侧的反馈也开始集中到几个问题上:PRD 字太多、内容重复、排版不好。
更现实的问题是,产品经理评审时大概只讲了整份文档的 20%。剩下的内容虽然写在 PRD 里,但在这么大的信息量下,技术同学很难判断哪些是产品已经确认的决策,哪些只是模板要求补出来的信息,也就很难评估 PRD 本身的质量。
这让我意识到,文档完整和信息有效不是一回事。
一份 PRD 如果在背景、系统范围、项目方案、功能详述和验收标准里反复描述同一件事,看起来很完整,实际上会让重要信息被重复内容淹没。评审的人需要不断判断“这句话前面是不是已经说过”“两个章节为什么口径不完全一样”,注意力也就离产品决策本身越来越远。
所以最近我们对整批 PRD skill 做了一次比较大的调整。核心不是再增加模板能力,而是做减法。
原来的 10 个大章节被收敛成了 7 个。独立的“非目标”、系统范围、项目方案描述、核心验收标准、研发上线步骤和其他事项,要么被删除,要么被放回对应的章节。
现在,范围只有一个真源,就是功能地图。每个功能都有稳定的 FR-ID,并按照业务旅程组织。只有真的存在多角色、多渠道、多页面时,才保留覆盖矩阵;只有存在跨功能流转时,才需要流程和共享规则。
功能详述也不再套固定的大骨架,而是根据功能形态组织。每个功能重点写清楚:现在是什么、这次改什么、规则和结果是什么、有哪些例外、什么明确不变。
可测条件和必要边界直接写在对应功能里,不再单独复制一遍验收章节。技术证据进入 plan.md,测试穷举进入 test-plan.md,大表和完整枚举进入附件,原型源码留在 mockups/,PRD 里只放评审需要的静态截图。
说到底,就是让 PRD 主文只承载产品决策,而不是把调研、技术方案、原型工程和测试用例全塞进同一个文件。
这次调整以后,我感觉 PRD 这一批 skill 大概可以从 60 分提高到 80 分了。
这批能力现在也不再挤在一个大而全的 skill 里,而是有了比较清楚的分工。
req-prd-explore 负责只读调研业务和系统现状,把结论和证据整理出来。req-prd-draft 负责从一句话、BRD 或已有草稿开始,引导生成结构化 PRD。req-prd-revise 负责修改已有 PRD,并保证一次改动涉及的章节能够同步更新。req-prd-mockup 负责单独生成或重做改动原型,不把原型源码混进 PRD。req-prd-check 负责检查完整性、可测性、业务一致性、影响面和信息密度。它们合在一起,才是一套能够持续运转的 PRD 工作流。
产品经理可以先用 explore 查清楚现状,再用 draft 起草,用 revise 持续修改,需要页面表达时生成 mockup,评审前再通过 check 做质量检查。每个 skill 只承担一类职责,产物也有各自的边界。
这其实和我们后来对 Zeus、Talos 的重新设计很像:不是试图让一个 AI 会做所有事情,而是先把不同层次的问题拆开。
我最初设计 Talos 时,就思考过一个问题:是不是直接把 Zeus 工作流起一个“小龙虾”就可以了?
让它自己观察任务、调用 Zeus、判断下一步,遇到问题也自己处理。这样看起来既智能又自由,也很符合大家对 Agent 的想象。
但我当时的判断是,产研工作流不能这么无约束地自由。什么时候可以修改代码,什么时候应该重试,什么时候必须停止,什么风险一定要交给人,这些都需要明确的逻辑约束。
所以我选择自己做 Talos。
可是在实现过程中,因为遇到了各种坑坑绊绊的问题,我又慢慢走向了另一个极端:为了让流程稳定,我把越来越多的判断写成了固定逻辑。
它确实不再那么自由了,但也没有原来想象中那么智能了。系统只能处理提前预设过的情况,一旦出现新的组合问题,就很容易停在逻辑没有覆盖的位置。
这件事最麻烦的地方在于,AI 真的很智能。
也正是因为它智能,执行过程才会有很大的自由度。它会根据上下文选择不同的工具、不同的路径,也会对中间结果做自己的判断。这种能力让它可以处理传统固定流程很难覆盖的问题,但同时也带来了一个事实:它的确定性没有传统软件那么高。
以前写一段普通代码,只要输入和环境不变,单元测试就可以一次又一次稳定地验证结果。但在复杂的产研工作流里,即使给 AI 设计了测试,也很难保证它每次都经过完全相同的路径。
一次长任务中,任何一步都有可能出现意料之外的中断。更麻烦的是,AI 有时完成了某个动作,就倾向于认为目标已经完成;但动作执行过,并不代表系统事实真的发生了变化。
如果让 AI 拥有绝对的自由,它可能会自己绕过很多问题,但整个过程也很难被约束。反过来,如果希望它的每一步都像传统程序一样确定,就会不断为各种意外补逻辑分支,最后系统越来越复杂,AI 能发挥的空间反而越来越小。
我之前就陷在了这里。
好在最后还是跳出来了,哈哈。
答案不是把所有事情都交给 AI,也不是把所有步骤全部写死,而是把自由和确定性放在不同的层次。
现在 Zeus 和 Talos 的架构已经逐渐清晰了。
一条飞书请求进来,先由飞书通道层负责可靠接收、去重、入队,并把进度和结果送回原来的话题。
然后由 Agent 决策层理解用户到底是在问一个业务问题,还是希望系统完成一项交付。如果是需要持续执行的任务,再进入 Goal 编排层,把目标、当前状态和上下文持久化下来。
Goal 编排层按照“观察、决策、执行、核验、保存检查点”的循环推进。真正需要写 PRD、出方案、改代码、测试和提交时,才进入 Zeus 的独立 skill 会话。
Zeus 负责一件具体的工程工作怎么做好,Talos 负责下一步做什么、失败后怎么办、重启后怎么继续,以及什么时候必须停下来交给人。
状态机、权限、预算和门禁负责给 AI 划边界,边界内的分析、判断和异常处理仍然交给 AI。一次 skill 执行结束,也不能只听模型说“已经完成”,而是必须带着产物和证据回到 Goal,由 Goal 核验真实状态以后才能继续。
这样一来,它既不是一只完全自由的“小龙虾”,也不再是一个只会按照流程图机械跳转的纯逻辑系统。
我现在更愿意把 Zeus + Talos 理解成一个分层的 Loop:Zeus 里的小循环负责完成一次具体工程任务,Talos 的大循环负责让整个需求持续向终点推进,并在失败、中断和重启以后接着运行。
做到现在,我越来越觉得,AI Coding 已经进入深水区了。
在我们这种一千多万行代码的规模下,困难程度是很多人不太能够理解的。真正的问题早就不只是模型会不会写代码,而是它能不能理解复杂业务,能不能在巨大的代码库里控制噪音,能不能跨越多个系统保持事实一致,能不能在任务中断后恢复,以及能不能在自由和确定性之间找到平衡。
这些问题,不是再换一个更强的模型就会自动消失。
除了继续优化工作流和云端自动化,我们现在还在做两件很重要的事情。
第一件,是清理无用代码,持续降低 AI 面对代码库时的噪音。对 AI 来说,已经废弃但仍然存在的接口、分支和调用关系,不只是维护成本,也会直接变成理解系统时的认知成本。
第二件,是继续梳理服务化和业务域,明确每个服务、每个业务域究竟负责什么。职责边界越清楚,AI 分析一个具体问题时越能聚焦,也越不容易把不同系统、不同渠道和不同阶段的业务逻辑混在一起。
模型当然还会继续变强,Zeus 和 Talos 也还会继续变化。
但走到今天,我反而更相信,真正拉开差距的未必只是模型能力,而是谁能更早把自己的代码、知识、流程和反馈,整理成一套 AI 可以长期工作的工程环境。
这件事,我们还在突破中。
非著名程序员,全栈开发工程师,长期专注系统开发与架构设计。
功能待开通!
AI Coding 时代最大的护城河,不是模型,不是 Agent,也不是工作流。 而是知识库。 这是我折腾了一整年 AI Coding,到最后才慢慢看明白的事。 可一开始,我和大多数人一样,劲儿全使在另一个地方——工作流。 怎么把写 PRD、出方案、写代码、生成测试串成一条链路,让 AI 一步步往下跑。 工作流跑通了,下一个问题马上冒出来—— AI 跑这些命令的时候,到底读什么? 光给它代码,不够。 于是所有人又一窝蜂去搞知识库。研发在搞,产品在搞,业务也在搞。 可搞着搞着我发现一件事:几乎没人能说清,知识库到底该是什么。 先说说,知识库不该是什么 很多人理解的知识库,是"把代码翻
去年开始,团队里每个人都用上 AI 写代码了。 按理说,效率该起飞了。 可折腾了大半年,我才慢慢看清:每个人都明显变强了,但团队的合力却没跟着强起来。 会用 AI 的人,效率飞涨。 用得浅的人,被甩在后面。 几十个开发,几十套打法——各自的 prompt 习惯、各自的提示词、各自摸索出的一套方法。 这本来不是坏事。 坏就坏在,大家的产出开始对不上了。 同一个功能,不同人让 AI 写出来的代码,风格能差出十万八千里。 某个同事摸到一个好用的技巧,群里截图一发,热闹两句,然后就沉底了。 下一个新人进来,还是从零开始踩。 文档呢?散在各个服务的 README 里,或者干脆躺在某个人的电脑里。 遇到跨
前面几篇,聊了团队怎么搭 AI 工作流、怎么建知识库。 今天聊聊 AI 在 PRD 编写和质量保障上,我们做了些什么。 其实这块从一开始就在工作流里。只是在开始的MVP版本里,核心全压在开发环节。 等大家真用起来,一个问题立马浮出水面: PRD 质量一般,工作流出来的技术方案,质量自然也上不去。 道理特别朴素:垃圾进,垃圾出。 源头的 PRD 含糊,后面 AI 再能干,也只是替你把这份含糊"发扬光大"。 所以我决定还是要治理一下这个源头。 第一步:先给 PRD 做个体检 我做的第一件事,是一个 PRD 质量检测 skill。 注意,它不碰业务逻辑,只做"规范层&q
最近 Loop Engineering 在持续刷屏。 公众号在刷,各种群里在讨论,我也看了好几篇文章。 每篇都有道理——五个组件、目标定义、古德哈特定律,逻辑很清晰,我都信了。 但看完之后有点空。 我的工作流该怎么 Loop 化?从哪起手?搭出来以后长什么样? 没一篇说清楚。 所以想聊聊我自己的理解,以及我们实际在做的事——我们团队搭了个叫 Talos 的系统,算是目前我见过最接近"生产级 Loop Engineering"的垂类实践。 Loop 其实只有两种形态 在我看来,Loop Engineering 这件事,放长了看只有两个终点。 第一个是通用智能 AI。 它足够强
做团队 AI 工作流,第一个把我卡住的问题,不是技术。 而是——到底该用开源的,还是自己造一套? 说实话,我一开始也很犹豫。 毕竟"自己造轮子"这四个字,听着就不太聪明。 所以动手之前,我特意花了不少时间,认真研究了一圈现成的方案:BMAD、OpenSpec、SuperPowers、SpecKit…… 一个个看下来,我的第一感受是:真优雅。 👏 设计思路清晰,工程化也讲究,看得出背后都是高手。 可越往深里看,我越发现:它们再好,也不是为我们这种团队设计的。 所以,最终我还是决定做我们自己的工作流。 三个绕不过去的坎 具体说,是三个坎,每一个都硌得慌。 第一个,它们几乎都是冲