我对 AI 软件研发平台的几个判断
AI 软件研发平台不是在 IDE 里接一个聊天框,也不是把代码生成做得更快。更本质的问题,是怎么把上下文、契约、验证、工作流和平台型领域知识一起组织起来。
- AI
- Platform
- Engineering
- Workflow
- Architecture
很多人一说 AI 软件研发平台,第一反应还是:
- 一个聊天框
- 一个代码补全
- 一个能自动改文件的 agent
这些当然重要,但如果只停在这里,我觉得离“平台”还差得很远。
因为真正的软件研发,不是“生成一段代码”就结束了,而是要持续处理这些事情:
- 理解项目和相关项目的上下文
- 找到真实 contract 和事实源
- 在多步骤流程里推进任务
- 验证行为是否正确
- 在本地快速迭代
- 在正式环境稳定交付
所以如果要说我对 AI 软件研发平台的一个总体判断,那就是:
它不是一个更聪明的代码生成器,而是一个围绕软件研发全过程重新组织上下文、能力和验证的系统。
一、平台要解决的,不只是“写代码”
如果只把 AI 软件研发平台理解成“帮工程师更快写代码”,这个定义其实太窄了。
因为研发里的真正难点,很多时候根本不在“敲代码”本身,而在于:
- 需求和契约是否清楚
- 前后端和上下游是否对齐
- 哪些地方需要重点审核
- 哪些测试必须补
- 哪些改动会影响别的仓库或别的模块
- 哪些步骤应该先做,哪些应该后做
也就是说,平台真正要处理的是研发工作流,而不是单点代码动作。
所以一个更像样的 AI 软件研发平台,至少应该覆盖这些事情:
- 上下文管理
- 任务拆分和编排
- 代码与文档事实源定位
- 契约和测试校验
- review 和验收
- 本地开发与部署分层
如果这些都没有,只是把模型接进编辑器,那更像一个 AI coding tool,而不是研发平台。
这里还有一个我很看重的衡量标准:
平台必须真正提高研发迭代速度。
如果一个平台只是让演示看起来更智能,却让真实研发里的安装、验证、联调、review 和排错都变慢,那它就没有真正解决工程问题。
二、工程师依然重要,而且在很多平台里本来就是领域专家
很多人会下意识觉得,AI 时代的平台会削弱工程师的重要性。
我不这么看。
恰恰相反,在很多系统里,工程师依然是最关键的角色。
因为有很多平台型系统,它们的领域知识本身就是工程知识、开发知识和算法知识。
例如:
- 软件研发平台
- 运维部署平台
- 计算平台
这些系统的核心问题,本来就不是脱离技术实现的“业务常识”,而是:
- 开发流程如何组织
- 依赖关系如何管理
- 部署链路如何稳定
- 资源调度如何设计
- 哪些架构边界不能破
- 哪些算法和数据结构选择会直接影响系统能力
所以在这些平台里,领域专家很多时候本来就是工程师。
这也是为什么我不认同“有了 AI,以后只要会提需求就行”这种说法。
因为很多关键判断仍然必须依赖真正的领域知识,例如:
- 什么结果算对
- 什么风险不能接受
- 哪些抓手必须重点审核
- 哪些事情可以先交给 AI 展开
更具体地说,人在 AI 软件研发里必须介入,不是因为 AI 不能做事,而是因为它经常在三个层面出现偏差。
第一是需求理解偏差。
它可能抓住了表面任务,但没有真正理解背后的产品目标、工程边界和优先级。最后产出的东西看起来在响应需求,实际上已经偏离了真正要解决的问题。
第二是执行偏差。
这类问题尤其危险,因为 AI 很可能会表示“已经完成”,但实际只是完成了其中一部分,或者绕过了关键验证,或者改了不该改的地方。如果没有人和程序化验收介入,团队很容易在一个错误的完成状态上继续往前走。
第三是方案决策糟糕。
它有时会选择一个局部最省事、短期能跑通、但长期维护成本很高的方案。比如引入不必要的复杂度、破坏既有边界、选错抽象层级,或者为了快速通过当前任务牺牲后续一致性。
所以人的介入不是为了和 AI 抢执行工作,而是为了守住三件事:
- 需求是不是真的理解对了
- 执行是不是真的完成并通过验证了
- 方案是不是符合长期工程目标
说到底,AI 可以帮忙铺开执行,但平台能不能做对,仍然非常依赖工程师是否真的理解这个领域。
三、平台首先要做的是 context engineering
我越来越觉得,AI 软件研发平台的第一层能力,不是 prompt engineering,而是 context engineering。
因为 AI 在研发里最容易犯的错之一,不是“不会写代码”,而是:
站在错误的背景上做局部正确的事。
例如它可能:
- 不知道当前仓库直接依赖哪个后端项目
- 不知道 SDK 应该以哪个协议仓库为准
- 不知道某个页面改动还要联动检查哪个服务
- 不知道这个 repo 里的哪份文档才是过时说明,哪份才是事实源
所以平台必须让 AI 稳定拿到两类上下文。
第一类:稳定上下文
这类上下文会贯穿整个项目周期,适合沉淀到像 AGENTS.md 这样的地方,例如:
- 项目目标
- 关键目录和入口
- 直接依赖的相关项目
- 相关项目的路径或定位方式
- 常见联动检查点
- 本地开发和验证方式
第二类:动态上下文
这类上下文是协作过程中不断变化的,例如:
- 最近谁改了什么
- 哪些测试刚补上
- 哪个 contract 刚变了
- 哪个 agent 刚改了哪些文件
这里一个非常实用的点是:
如果 agent 之间能快速看到彼此的最新 diff,很多协作质量会直接提高。
因为这样大家不只是知道“项目长期是什么样”,还知道“项目刚刚发生了什么变化”。
所以如果平台不能稳定提供上下文,它就很难真的支持研发,只能支持一轮一轮临场对话。
另外,文档本身也应该成为上下文工程的一部分。
但这里我不看重“文档多不多”,我更看重:
文档是否高可读。
因为如果文档结构混乱、事实源不清、读起来很费劲,那么它对 AI 和对人都会同时失去价值。
高可读性的文档至少应该做到:
- 符合人的认知和阅读习惯
- 主题集中
- 结构清楚
- 范围受控,减少核对负担
- 事实源明确
- 行为和实现不混写
- 能快速把读者带到真实代码、schema、测试和 contract
这样文档才不只是说明材料,而是真正可消费的研发上下文。
这里还要特别强调一点:
传统的产品设计文档依然非常重要。
AI 软件研发平台不应该因为有了 agent,就把产品设计文档、需求拆分和进度追踪弱化掉。
但我不觉得平台必须默认套一层很重的 epic -> feature -> story 结构。
我更看重的是:
- 文档拆分是否符合人的认知习惯
- 每份文档的范围是否足够清楚
- 一次核对时需要同时对照的对象是否足够少
- 每个任务项是否都能直接对应实现、测试和验收结果
如果一个任务项本身已经是稳定、可核对、可验收的范围,那就没必要为了形式再额外拆出多层壳。
因为层级越多,人和 AI 在阅读、核对和追踪时的切换成本也越高。
平台真正应该减少的,不是文档数量本身,而是:
- 一次需要同时核对多少份文档
- 一个结论需要跨几层目录和几层抽象才能确认
- 一个变更需要追踪多少处平行描述
如果这些事情做不好,团队和 AI 很容易只围绕当前对话推进:
- 今天做了什么,靠人记
- 哪个任务项还缺实现,靠人记
- 哪个任务项已经开发但没验收,靠人记
- 哪些需求已经变更但实现还没跟上,还是靠人记
这对真实研发很危险。
因为人脑不应该承担完整项目状态机。平台应该把这些状态显式记录下来,让人、AI 和 CI / CD 都能围绕同一套进度结构工作。
所以我理想中的 AI 软件研发平台,不只是能帮忙写代码,还应该能把产品设计文档、任务拆分、实现状态、测试结果和验收状态串起来。
也就是说:
产品文档不是 AI 之前的旧工具,而是 AI 研发平台里的项目状态骨架。
进一步说,平台最好明确说明自己支持哪些核心文档类型。
至少我会要求它能稳定支持这几类文档:
- 用例文档:描述用户场景、目标、约束、主路径、异常路径和验收预期
- public API 文档:描述对外接口、输入输出、错误语义、版本边界和典型调用示例
- 技术实现方案设计文档:描述模块拆分、职责边界、关键数据结构、trade-off、落地步骤和风险点
这几类文档不能混成一团。
因为它们分别回答的是不同问题:
- 用例文档回答“系统要解决什么问题,用户怎么使用”
- public API 文档回答“系统对外暴露什么 contract,别人该怎么接”
- 技术实现方案设计文档回答“团队准备怎么实现,为什么这样实现”
平台如果不能把这几类文档区分清楚,人和 agent 就很容易在“需求、接口、实现”三层之间来回混线,最后既难 review,也难追踪变更影响。
这里还有一个容易被低估的点:
AI 加速了 coding 的速度,但并没有让软件开发周期消失。
很多任务确实可以更快完成初版实现,但真实研发仍然要经历:
- 需求澄清
- 方案选择
- 任务拆分
- 实现
- 联调
- 测试
- review
- 修复
- 验收
- 发布
这些环节不会因为代码生成更快就自动消失。
甚至在 AI 参与之后,进度管理会变得更重要。
因为 AI 可能很快铺开很多改动,但团队仍然需要知道:
- 哪些任务项只是生成了代码
- 哪些任务项已经通过测试
- 哪些任务项已经完成 review
- 哪些任务项还卡在验收
- 哪些任务项因为需求变更需要重新打开
如果没有清楚的进度管理,AI 加速的可能只是“产出改动”的速度,而不是“稳定交付”的速度。
所以平台不能只看 coding throughput,还要看整个开发周期里的状态流转是否清楚。
进度管理在 AI 时代不是过时的项目管理负担,而是让高速生成真正进入可控交付链路的必要结构。
再往前一步说,我会把“文档树本身是否逻辑清楚”也当成平台能力的一部分。
因为很多时候,问题不在单篇文档,而在整棵目录树从根上就分得不对。
我很看重一个原则:
每一个层级下的子目录和文件,都应该只沿一条单一的逻辑轴划分。
例如某一层如果已经决定按“系统模块”来分,那这一层下面就不应该同时混入:
- 按生命周期划分的目录
- 按角色划分的目录
- 按抽象层级划分的目录
反过来,如果某一层决定按“行为 / 实现”来分,那这一层下面的兄弟节点也都应该沿这条轴保持一致,而不是一部分在讲功能,一部分在讲组件,一部分又在讲排期。
因为一旦同一层目录同时混用多条逻辑轴,读者和 AI 都会遇到同一个问题:
- 不知道应该去哪里找某类信息
- 不知道兄弟目录之间是不是同一层对比关系
- 不知道某份文档为什么在这里,而不是在别处
结果就是:
- 树看起来很大,但定位很慢
- 文档之间边界越来越模糊
- 相近内容开始重复堆积
- 后续新增内容只能继续往混乱结构上叠
所以我理想中的平台,不只是帮你生成文档,还应该帮助团队持续检查文档树是否还保持结构自洽。
也就是说,平台应该能帮助回答:
- 当前这一层目录是沿哪条逻辑轴在分
- 下面这些子节点有没有混入别的分类标准
- 某个主题是不是被放错层级了
- 两篇文档到底是互补关系,还是重复关系
如果连目录树本身都没有稳定结构,那后面再谈 SSOT、引用真实资产、inline 绑定测试和代码,都会变得很别扭。
这里还有一个我很看重的要求:
相关信息不能只是“能跳过去看”,而应该尽量被强绑定在一起。
例如一份文档如果在描述某个功能,那么人在读这段描述时,最好就能 inline 看到:
- 对应的验收测试在测什么
- 最近一次测试结果是什么
- 哪些 case 通过了,哪些 case 失败了
同样,如果一段内容在描述某个文件、某个数据结构或者某个 contract,那么读者最好也能 inline 看到:
- 相关代码片段
- 真实 schema 或类型定义
- 代表性的输入输出例子
因为如果文档、代码、测试和结果只是彼此链接,但阅读时必须不断跳转、自己拼接上下文,那么事实虽然“理论上可达”,但在实际协作里仍然是松散的。
而一旦这些信息能被强绑定、就地展示,很多判断都会快很多:
- 这段描述是不是已经过时
- 这个结构有没有真实实现
- 这条验收规则是不是已经落成测试
- 现在说的“通过”到底是文档结论,还是程序结果
所以我理想中的平台文档,不只是能引用事实源,而是要尽量让描述、代码、测试和结果在阅读点上发生汇合。
另外,平台还不能只是“把信息都放出来”,而应该能主动 highlight 真正关键的锚点。
因为真实研发材料一多,信息过载很快就会出现。
如果所有内容在视觉和结构上都一视同仁,那么人和 AI 都容易在大量细节里迷失,反而抓不住最该优先看的东西。
我会特别希望平台能把这几类内容长期高亮出来:
- 边界数据模型
- 设计文档
- 验收测试
原因很直接。
边界数据模型决定系统和外部世界怎么对接,很多接口问题、上下游联动问题,最后都会落到这里。
设计文档决定当前方案到底准备怎么做,很多实现分歧、职责边界和 trade-off,也都应该优先回到这里看。
验收测试决定什么才算真的做对了,它不只是附属材料,而是行为约束真正落地后的可执行表达。
所以我理想中的平台,不只是允许这些资产存在,而是要让它们在阅读、review、执行和验收过程中一直被显式突出。
这样工程师和 agent 才不会在大量普通说明、历史讨论和局部实现细节里,把真正关键的约束看丢。
四、平台必须把 contract 和 verification 放在核心位置
AI 最危险的地方,不是它完全不会做,而是它很容易生成“看起来差不多”的东西。
所以一个 AI 软件研发平台,如果没有把 contract 和 verification 放在核心位置,最终一定会漂。
这里我觉得至少要有几类基础能力:
- public API contract
- OpenAPI 或 schema
- 真实数据模型
- examples
- 测试用例
- 程序化质检
这里我会进一步把 examples/ 当成每个项目都应该有的约定目录。
它不是可有可无的演示材料,而应该是项目里的标准事实源之一。
这个目录里至少应该沉淀几类典型样例:
- 典型的 public API 用法
- 典型的输入数据
- 典型的输出数据
这样做有两个直接价值。
第一,文档在解释行为、接口和数据结构时,可以直接引用这些例子,而不是每篇文档各自手写一套容易漂移的示例。
第二,测试在做正例验证时,也可以直接复用这些样例,而不是文档一套例子、测试再复制一套相似但不完全一致的例子。
我很喜欢这种资产组织方式,因为它能让 example 同时服务两件事:
- 作为文档可直接引用的说明材料
- 作为测试可直接消费的正例样本
这样 example 就不再只是“帮助理解”的附属内容,而是连接文档、contract 和测试的一层共享资产。
很多自然语言文档在早期是必要的,但一旦有了真实资产,就应该明确让真实资产成为 SSOT。
例如:
- 数据模型优先引用真实模型代码
- JSON 结构优先引用 schema 或校验模型
- 验收规则优先引用测试用例
- 流程优先引用真实调用关系、路由关系或状态机结构
这里我很看重一个过程观:
文档不是一开始就不重要,而是在真实代码、schema、测试出现后,应该主动把早期文本替换成对真实资产的引用。
很多设计在最早期,还没有代码、schema、测试用例,甚至连接口都没真正落出来。
这时候用 markdown 把事情先说清楚,完全合理,而且往往是必要的。
例如早期可以先用文档描述:
- 数据结构草案
- 验收规则草案
- 状态流转
- 错误语义
- 示例输入输出
因为如果连这些都还没讲明白,就直接进入实现,后面只会更乱。
但问题在于,很多团队会把这些“早期说明”长期保留下来,最后变成和真实系统并行存在的第二套事实源。
一旦真实代码和测试已经出现,就应该开始做替换,而不是继续让自然语言描述和真实实现长期并存、互相漂移。
更具体地说,我会倾向于这样收口:
- 早期没有真实模型时,先用 markdown 描述数据结构
- 有了真实模型代码后,文档改成引用真实模型,而不是继续手写字段定义
- 早期没有验收资产时,先用 markdown 写验收规则
- 有了真实测试用例后,文档改成引用测试和测试组织方式,而不是继续手写一套平行验收标准
也就是说,文档在不同阶段承担的职责并不一样:
- 早期帮助团队对齐理解
- 中期帮助团队连接设计和实现
- 后期更多承担索引、导航和解释作用,把读者带到真实代码、schema、测试和 contract
如果到了后期,文档还在重复维护一整套已经被代码和测试表达过的事实,那它通常就不再是在帮助研发,而是在制造漂移。
这里还有一个平衡点:
流程不能太死板,但关键质控必须能在必要时收紧。
真实研发不可能从第一天就拥有完整的 contract、测试、验收资产和 review 结论。很多时候,早期探索阶段允许这些关键质控临时缺失是合理的,否则流程会把还没成型的想法提前卡死。
但“允许临时缺失”不等于“把缺失当成通过”。
平台应该把这些缺口显式记录下来,例如:
- 当前任务项还没有对应验收测试
- 当前接口还没有稳定 contract
- 当前方案还没有经过 review
- 当前变更只完成了初版实现,还没有进入独立验收
在探索、草案、局部验证阶段,这些状态可以存在;但一旦进入合并、发布、跨模块联动或关键用户路径,平台就应该自动收紧,把这些缺口变成必须处理的门禁。
也就是说,好的平台流程不是“一开始就全部硬卡”,而是能区分阶段:早期允许欠账,中期持续暴露欠账,后期在关键节点强制收口。
平台的责任,不只是“能生成”,而是要帮助团队持续把行为约束沉淀成可执行验证。
否则 AI 写得越快,偏差只会扩散得越快。
遇到 bug 时,这一点会变得更重要。
平台不能鼓励 AI 一看到报错就直接改代码。
更稳的处理顺序应该是:
- 先定位问题发生在哪里
- 再确认触发条件是什么
- 尽量用测试用例、最小复现或可重复脚本把问题复现出来
- 看到失败结果后,再针对性修改
- 修改后重新运行同一个复现用例,确认 bug 被修掉
也就是说,bug 修复不应该是“根据错误描述猜一个改法”,而应该是先把问题变成可复现事实,再用验证闭环收口。
如果没有复现,AI 很容易改到看起来相关、实际上不相关的地方。
如果没有定位,AI 很容易做大范围搜索式修改,把一个局部 bug 变成一串新的不确定性。
所以平台应该把“复现 -> 定位 -> 修改 -> 回归验证”变成默认流程,而不是把“快速改一版看看”当成默认流程。
这里还有一个原则我会放得很前:
能用传统程序解决的,就不要依赖 AI。
因为很多研发问题,本来就更适合交给确定性程序处理,例如:
- 结构化校验
- 批量一致性检查
- 链接和引用关系扫描
- schema 验证
- 测试执行
- 固定规则下的代码生成和转换
如果这些事情已经可以被传统程序稳定完成,却还强行交给 AI,自然会带来更慢、更贵、更不稳定的链路。
所以一个成熟的平台,不是“凡事先上 AI”,而应该优先判断:
- 能否直接用传统程序解决
- 如果不能,再看是否适合 AI 写程序来解决
- 只有前两者都不合适,再考虑 agent 自主能力
这不是反对 AI,而是把 AI 放到真正需要它的地方。
五、本地开发和正式部署,必须分开设计
一个常见误区是,把 AI 研发平台理解成“统一一切环境”。
但从工程角度看,本地开发和正式部署其实有不同目标。
本地开发最重要的是:
- 快速迭代
- 快速验证
- 不要被重型流程拖慢
正式部署最重要的是:
- 稳定
- 可复现
- 可审计
- 可回滚
如果平台不能区分这两层目标,就很容易出现两种坏结果:
- 本地开发被部署级约束拖慢
- 正式部署又继承了开发期的临时做法
所以我会很看重平台有没有支持这些能力:
- 本地化安装
- 本地缓存和轻量依赖管理
- 本地快速验证闭环
- 独立的部署级构建和发布链路
这里我还会特别看重:
本地模式和生产模式下,依赖管理方案应该明确分开。
因为很多平台型项目都会依赖一组自己维护的库、协议仓库或者相关项目。
如果本地开发和远程部署还沿用同一套依赖安装方式,通常会同时损失两边的好处:
- 本地改动一个依赖库,验证链路很慢
- 生产环境又缺乏稳定的版本锁定和可复现性
所以我更倾向于平台直接支持这种分层策略:
- 本地开发时,允许可编辑安装,方便联动修改和快速验证
- 远程环境或生产模式下,锁定明确版本,保证可复现和可审计
这样做非常符合两边的真实目标。
本地开发需要的是:
- 改完依赖后立即联动验证
- 不用每次都走完整发布流程
- 多个相关项目能像一个工作区一样快速协作
正式环境需要的是:
- 依赖版本明确
- 构建结果稳定
- 问题可追溯
- 回滚有抓手
如果一个平台不能把这两套依赖策略都支持好,那么本地会被版本流程拖慢,生产又会被开发期的松散依赖污染。
所以在我看来,这不只是包管理细节,而是平台是否真的理解“本地迭代”和“正式交付”是两种不同工程目标的体现。
AI 可以加速代码修改,但如果本地验证一轮要等很久,整个研发效率还是上不去。
所以对平台来说,迭代速度不是体验优化项,而是核心能力。
如果一轮“改动 -> 验证 -> 收口”的闭环不够快,AI 再强也只能更快地产生等待。
六、平台应该内置“约定优于灵活”的工程骨架
我不觉得 AI 软件研发平台应该把所有工程组织问题都做成高自由度配置题。
很多事情其实没必要追求过度灵活,例如:
- 目录结构怎么组织
- Git 流程怎么走
- 开发语言怎么选
- 开发框架和基础库怎么选
- CI / CD 怎么分层
- 哪些检查在本地跑,哪些检查在合并前跑
- 哪些分支策略和门禁是默认要求
如果这些东西每个项目、每个团队、每次启动都重新设计,表面上看很灵活,实际上只会带来:
- AI 更难学会稳定工作方式
- 人与人之间协作成本更高
- 不同仓库之间迁移和复用变慢
- 很多低价值的流程争论反复出现
这里我其实有一个越来越强的判断:
平台不应该把这些工程选型题继续甩给用户,也不应该默认交给 AI 临场发挥。
因为这些选择看起来像“偏好”,实际上常常非常依赖长期经验积累。
例如:
- 什么时候 Git 流程该偏 trunk-based,什么时候该保留更强的 review 分支约束
- 某类系统更适合 Python、TypeScript、Go 还是别的语言
- Web 框架、任务编排框架、数据校验库和测试库该怎么搭配
- CI 应该做到多细,CD 应该做到多自动
- 哪些库虽然流行,但并不适合长期维护和 agent 稳定协作
这些判断背后,牵涉的都不是单点语法喜好,而是:
- 生态成熟度
- 调试和排错成本
- agent 是否容易稳定使用
- 团队招聘和协作成本
- 本地开发速度
- 正式环境的稳定性和可审计性
说得更直接一点,这类判断往往要靠很多年真实踩坑,才会慢慢形成稳定标准。
我自己花了十多年,才逐步建立起对这些工程决策的理解和判断力。到现在为止,我也不觉得现阶段的 AI 已经能够在这些问题上长期、稳定、始终做出妥善决策。
更现实一点说,在日常协作里,我几乎每天都要花很多次精力去纠正 AI 的错误理解和不合适的决策。
而且这些问题很多并不是“模型完全不会”,而是更麻烦的那一种:
- 它好像理解了一部分,但关键边界理解错了
- 它给出了一个能运行的方案,但从长期维护看并不合适
- 它局部上说得通,但放到完整工程链路里会产生新的不一致
这也是为什么我越来越不接受一种想法:
既然 AI 看起来已经能做很多事,那工程上的关键选择也可以顺手交给它。
因为真实感受恰恰相反。你不是偶尔纠正一次就够了,而是要持续、反复、每天纠正很多次。
它有时可以给出不错建议,但还远远没有可靠到可以让平台把这类预决策工作完全交给它。否则很容易出现:
- 同一个平台里的不同项目选型风格越来越散
- 同类问题在不同仓库里反复得到不一致答案
- AI 今天推荐一种做法,明天又推荐另一种做法
- 用户自己其实没有足够经验判断,只能被动接受表面上说得通的建议
所以在我看来,平台真正该做的不是“提供无限选择”,而是:
把高频、关键、容易产生长期影响的工程决策先收口成默认最佳实践。
所以我更偏向一种思路:
平台应该内置一套足够稳的最佳实践默认值,而不是默认把工程治理交给每个团队从零发明。
例如平台完全可以预置:
- 一套清楚的目录组织约定
- 一套可审阅的 Git 分支和合并策略
- 一组默认开发语言和适用边界,而不是让每个项目先从语言大战开始
- 一组默认框架、基础库、测试库和目录组织组合
- 一套分层的 CI / CD 模板
- 一套默认的质量门禁
- 一套适合 agent 执行的本地验证闭环
更进一步说,我理想中的平台最好做到:
- 默认技术栈已经选好
- 默认 Git 流程已经选好
- 默认测试框架已经选好
- 默认 CI / CD 路径已经选好
- 默认本地开发和生产部署分层方式已经选好
用户当然可以在有充分理由时改,但不应该一上来就先面对一大堆开放选择题。
因为多数用户真正想解决的是业务和产品问题,不是先花很多时间学习:
- 哪种 Git 流程适合自己
- 哪门语言长期更稳
- 哪个框架未来更容易维护
- 哪组库组合对 agent 更友好
- CI / CD 到底该怎么分层才合理
这些内容如果都让用户自己想、自己学、自己试,平台就没有真正替用户承担复杂度。
而如果把它们继续交给 AI 现做决定,问题也不会消失,只是会变成另一种更隐蔽的不稳定:
- 决策理由不透明
- 不同项目之间不可比
- 后续维护者难以理解为什么当初这么选
- agent 在不同仓库里很难形成稳定操作习惯
所以我越来越认同一种平台观:
真正好的 AI 软件研发平台,不是把所有选择都暴露出来,而是主动把大量正确选择预先做掉。
平台先把默认路径铺好,用户和 AI 再沿着这条路径高效执行。这样才能减少错误决策、减少风格漂移,也减少人和 agent 之间反复对齐的成本。
例如在目录约定上,我就很希望平台默认要求每个项目都带一个 examples/:
- 放典型的 public API 用法
- 放典型的输入数据
- 放典型的输出数据
这样 AI、文档和测试都会更容易围绕同一组例子工作,而不是在不同位置各写各的“示意样例”。
除了目录、Git 和 CI / CD,我还会希望平台把一些常见横切面直接内置处理。
因为这些东西虽然不是业务主逻辑,但几乎每个项目都会反复遇到。
例如:
- 用户交互后内部出错时,警告应该怎么显示
- 顶部通知应该怎么弹出、收起和分级
- 成功、失败、部分成功的反馈语义怎么统一
- 异常信息是给用户看、给工程师看,还是分别展示
如果这类问题每个项目都自己重新定义一遍,最后通常只会得到很多风格不一致、行为不一致、可维护性也不一致的实现。
所以我更倾向于平台直接给出默认方案。
例如:
- 一套统一的 warning / error 展示方式
- 一套统一的顶部通知机制
- 一套统一的反馈分级和默认文案策略
- 一套统一的日志、错误码和用户提示衔接方式
这样团队在做新项目或新模块时,就不用反复讨论这些横切面该怎么处理,而是默认站在一套已经验证过的最佳实践上往前做。
这类能力看起来不“炫”,但它们非常影响真实产出效率。
因为平台真正该内置的,不只是最核心的主流程能力,也包括这些高频、重复、容易做散的公共处理。
这里的重点不是“一刀切”,而是:
先把高频场景做成约定,再允许少量有理由的例外。
因为大多数团队真正需要的,并不是无穷多种流程组合方式,而是一条已经被验证过、可以高效产出的默认路径。
比如目录结构,如果平台已经有稳定约定,那么 AI 就更容易知道:
- 测试通常应该放哪里
- contract 通常应该放哪里
- 文档和真实代码之间应该怎么互相引用
比如 Git 流程,如果平台已经内置默认约束,那么 AI 和人都更容易形成一致预期:
- 什么时候该开分支
- 什么时候该补测试
- 什么时候该发起 review
- 什么时候允许合并
再比如 CI / CD,如果平台已经把本地验证、PR 门禁、主干发布这些层次分清楚,那么很多原本靠经验记忆的事情就能被平台直接托住。
我还会进一步要求:
常见工程场景应该由平台直接提供统一能力支持,而不是让每个项目自己写一堆脚本。
因为很多项目反复写脚本,其实并不是在沉淀差异化能力,而是在重复实现同一批高频工程动作。
例如这些事情,本来就非常适合平台内置:
commitpushprmain sync- 分支或临时产物的
delete CI / CD- 本地可编辑安装依赖库
skill安装- 环境安装
- 锁版本
如果这些基础动作都散落在各项目自己的脚本里,通常会出现几个问题:
- 用法不一致
- 质量门禁不一致
- 参数约定不一致
- agent 很难稳定复用
- 仓库一多之后维护成本越来越高
更合理的方式通常是:
- 平台提供统一入口
- 平台提供默认约束
- 项目只补必要的少量特化
这样做之后,团队真正要维护的就不再是一堆脚本细节,而是:
- 哪些步骤是默认流程
- 哪些场景允许例外
- 哪些地方需要项目级扩展
这会让工程治理清楚很多。
因为脚本越分散,经验越难沉淀;入口越统一,最佳实践越容易真的被执行。
这样做的价值非常直接:
- 降低项目启动成本
- 降低 agent 学习成本
- 降低跨仓库协作成本
- 提高执行一致性
- 让最佳实践真正变成默认生产力,而不是散落在口头经验里
所以我会把这件事理解成:
平台不是提供“无限灵活的工程积木”,而是提供“少量但强约束、可高效产出的工程骨架”。
对大多数研发团队来说,后者通常更有价值。
七、传统 skill 不够,平台要支持可编排的能力模块
如果只看单点能力,skill 很有价值。
但真实研发任务通常不是一个技能独立完成的,而是多个能力串起来:
- 一个模块读上下文
- 一个模块分析 contract
- 一个模块修改代码
- 一个模块补测试
- 一个模块做 review 和验收
现实里,一个模块的输出往往就是另一个模块的输入。
所以平台不能只提供一组彼此独立的 skill,还要支持:
- 明确输入输出
- 动态参数注入
- 上下游衔接
- 串行与并行编排
- fail-fast 边界
- UI 和工作流承接
这里我还会特别区分两类 skill。
第一类是系统内置能力的封装,例如:
- 对某个 API 的调用封装
- 对某个 CLI 的命令封装
- 对某类平台资源的标准化读写
这类 skill 很重要,因为它们能把底层操作收口成稳定入口。
但如果平台只支持这类 skill,我觉得还是不够。
因为研发里还有大量高价值 skill,并不直接对应某个系统原子功能,而是在组织一套工作方法。
例如:
- 按一组规则 review 文档树
- 对 PR 做分层检查和收口
- 对设计稿、文档、代码和测试做一致性核对
- 按 worklist 循环执行并逐项验收
- 做复盘、质检和结构化纠偏
这些 skill 的价值,不在于“调了哪个 API”或者“跑了哪条 CLI”,而在于:
它们把复杂任务里的判断顺序、执行步骤、验收方式和收口逻辑固定了下来。
所以一个成熟的平台,不应该只提供“系统直接功能”的 skill 运行能力,也应该提供“非系统直接功能”的 skill 运行能力。
换句话说,平台既要能运行工具型 skill,也要能运行方法型 skill。
前者解决“怎么调用系统能力”。
后者解决“怎么把一类复杂工作稳定做对”。
很多时候,真正拉开平台差距的,恰恰是后者。
因为 API 和 CLI 的封装别人也能做,但那些可复用的 review 方法、验收流程、文档治理规则、跨步骤工作流,才更接近团队真正沉淀下来的生产经验。
这里还有一个很重要的点:
skill 必须支持持续迭代。
真实使用里,skill 很少能一次写对。它往往会在执行中暴露问题,例如:
- 某个触发条件描述不清
- 某个步骤顺序容易被误解
- 某个验收要求没有写成可执行检查
- 某个边界场景会让 agent 走错方向
- 某个规则只在当前上下文里成立,换个场景就失效
所以平台不应该把 skill 当成静态说明书,而应该把它当成会持续进化的工作流资产。
每次 agent 执行出错,都应该能反过来沉淀成 skill 的改进输入:
- 这次偏差是什么
- 偏差发生在哪个步骤
- 是指令不清、缺少约束,还是验收方式不够硬
- 应该补一条规则、补一个 fail-fast 检查,还是调整执行顺序
- 修正后的 skill 如何验证真的生效
这种反思不是额外流程,而是 skill 能不能越用越稳的关键。
更进一步,修正后的 skill 不能只在当前 thread 里测试。
因为当前 thread 已经包含了大量上下文:用户刚刚指出的问题、agent 刚刚做过的分析、当前对话里的临时提醒,以及模型短期记住的纠偏方向。此时即使 agent 表现正确,也很难判断到底是 skill 生效了,还是当前上下文在帮它兜底。
所以更可靠的验证方式是:
- 修改 skill 后,开启一个新的 thread
- 只给新 thread 必要的触发输入
- 观察 agent 是否会自动按修正后的 skill 行事
- 用同类任务或最小复现场景检查问题是否不再出现
- 如果新 thread 仍然犯同类错误,说明 skill 还没有真正修好
也就是说,skill 的验收应该尽量接近“冷启动测试”。
只有在新的 context 里仍然生效,才能说明修正真正进入了 skill 本身,而不是只依赖当前对话里的临时记忆。
这也是为什么我会更偏向 GEM 这种能力模块化思路。
因为研发平台真正需要的,不是“很多 skill”,而是:
很多能被系统稳定编排、消费和组合的能力模块。
八、平台必须支持长时间运行的批量任务
很多平台 demo 看起来很聪明,是因为它们擅长处理一次性、短链路的小任务。
但真实研发里,经常会出现另一类任务:
- 上百个文档逐份 review
- 按 N 条规则逐条自查
- 每轮修完再重新检查
- 连续跑 2 到 3 轮,直到基本查不出新问题
这种任务的复杂度,往往不是一次 prompt 能不能答对,而是:
能不能把一个很长的执行链条稳定跑完,并且确保每一步真的落实。
如果让我再把这类平台能力收得更明确一点,我会特别看它能不能稳定支持三件事:
- 计划任务能连续执行到底,而不是跑到一半就停在自然语言总结里
- 能反复自检,直到确认没有明显偏差和遗漏,而不是只做一轮表面检查
- 能把大批量对象显式展开后稳定执行,而不是把“批处理”退化成一次笼统请求
比如一个 100 x N x 2~3 轮的检查任务,如果没有平台级支撑,很容易在中间退化成:
- 口头上说“已经检查过了”
- 实际只检查了部分文档
- 某些规则只在前几份文档上执行了
- 第二轮和第三轮只是重复第一轮的结论
- 中途上下文窗口一变,之前的状态就丢了
所以我会把这类能力也看成平台底座,而不是高级增强项。
一个真正能支撑长时间运行的研发平台,至少要有这些东西:
- 持久化的 worklist,而不是只存在于对话上下文里
- 明确的任务展开结构,例如“文档 x 规则 x 轮次”
- 能按 plan / worklist 连续推进到收口的执行引擎,而不是每做一段就等人重新提醒
- 每一项执行后的结构化结果记录
- 可恢复、可续跑、可跳过、可重试的状态机
- 每轮执行后的独立验收,而不是只看 agent 自述
- 明确的批处理执行能力,例如分片、循环、重试、进度统计和失败项回收
这里有三个很现实的使用原则。
第一,计划不能只是写出来,还要能连续执行到底。
很多平台会把“生成一个 plan”当成任务编排,但真正困难的是后面这段:系统能不能按这个 plan 持续推进,不因为上下文切换、对话结束、单轮响应完成,就把整件事停在半路。也就是说,平台要支持的不是“列计划”,而是“沿计划执行到收口”。
第二,不要相信 AI 说“这个任务已经完成了”。
这个判断必须回到可检查的执行记录、diff、测试结果和验收项,而不是只看自然语言总结。尤其是复杂任务,AI 很可能完成了其中一部分,就把整体任务描述成已经收口。
第三,自查不能只跑一遍,而且目标应该是尽量查到没有明显偏差和遗漏。
对于复杂任务,平台应该支持重复几轮自查,直到查不出新的有效问题,或者触发人工判断。这里的关键是“独立复查”:第二轮和第三轮不能只是复述第一轮结论,而要重新按规则检查修复后的结果。
第四,不要把一大批对象笼统交给 AI,然后期待它自己稳定做完。
比如“把这 100 篇文档都按这 20 条规则检查一遍”这种任务,如果只是丢给 agent 自由发挥,大概率会漏。它可能漏掉部分对象,漏掉部分规则,或者在后半段把检查标准逐渐简化。
更好的方式是让平台先把批量任务显式展开,再逐项执行、逐项记录、逐轮复查。也就是说,不是让 AI 自己声称“我都看过了”,而是让系统能证明:
- 哪些对象被处理过
- 每个对象按哪些规则处理过
- 哪些问题已经修复
- 哪些修复进入了下一轮复查
- 为什么现在可以停止
这也是为什么我会把“批处理任务执行”单独当成平台要求,而不是普通 agent 能力的附属品。
因为真正的批处理不是“让 AI 同时做很多事”,而是让系统显式管理:
- 当前批次范围
- 分片和顺序
- 每项是否完成
- 失败项怎么回收
- 下一轮复查从哪里继续
这里尤其重要的一点是:
平台不能只记录‘跑过了’,而要记录‘对哪个对象、按哪条规则、在第几轮、产出了什么结果’。
否则所谓长时间运行,最后往往只是长时间输出自然语言,而不是长时间稳定执行。
我会很看重平台是否能把这类任务显式展开成类似这样的结构:
- 文档 A,规则 1,第一轮检查
- 文档 A,规则 2,第一轮检查
- 文档 B,规则 1,第一轮检查
- 文档 B,规则 2,第一轮检查
- 第一轮修复后,再进入第二轮独立复查
这样平台才能真正知道:
- 哪些项目已经完成
- 哪些项目失败了
- 哪些项目还没开始
- 哪些项目是复查通过
- 哪些项目只是“改过”,但还没被独立验收
如果没有这层显式执行结构,所谓“自迭代直到查不出问题”,通常就无法保证真的落实。
因为这里最难的,不是生成意见,而是保证:
- 每一份都被扫到
- 每一条规则都被执行
- 每一轮都是独立复查,而不是沿用旧判断
- 收敛条件清楚,不会无限空转
所以在这类长任务里,平台真正要提供的,不只是 agent autonomy,而是 execution reliability。
换句话说,平台不应该只让 agent “一直跑”,还应该让系统能回答这些问题:
- 现在总进度是多少
- 卡在哪一批对象
- 哪条规则最容易反复出问题
- 哪些修改已经进入下一轮复查
- 为什么系统判断现在可以停止
只有这些都能被追踪,长时间运行才不是一种主观感觉,而是一种可审核、可验证、可恢复的工程执行能力。
九、平台应该支持 UI 和 CLI 的双轨触发
我不认为 AI 软件研发平台应该只提供一种交互入口。
更合理的形态通常是:
- 一条轨是 UI 触发,方便人直接查看、选择、审核和操作
- 一条轨是 CLI 触发,方便脚本、skill 和 agent 直接调用
因为真实研发里,这两类场景都长期存在。
有些操作更适合通过 UI 完成,例如:
- 查看 worklist
- 审核 diff
- 选择执行范围
- 人工拍板验收
有些操作则更适合通过 CLI 或 skill 完成,例如:
- agent 直接调用
- 批量化执行
- 编排到自动化流程里
- 在不同模块之间传递结构化输入输出
所以如果一个平台只能通过 UI 使用,它对 agent 来说就不够原生。
如果一个平台只能通过 CLI 使用,它对人类协作和审核又不够友好。
更成熟的做法应该是:
同一项能力,既能通过 UI 触发,也能通过 CLI 或 skill 调用。
这样平台能力才真正能同时被人和 agent 消费。
十、严格的读写权限控制,不是附加项,而是平台底座
如果 AI 平台真的能够读代码、改代码、跑命令、跨项目访问资源,那么权限控制就不能只是后补的安全功能。
它必须一开始就是平台底座。
我会尤其看重这几类控制:
- 哪些目录只读,哪些目录可写
- 哪些仓库可以访问,哪些不可以
- 哪些命令可以直接执行,哪些必须审批
- 哪些能力只能读事实源,不能直接改动
- 哪些高风险动作必须经过人工确认
这里不能只做成“是否 FULL 权限”的二元开关。
真正有用的权限模型应该更细:
- 路径权限要能区分不可见、只读、可写、可创建和可删除
- 命令权限要能区分禁止执行、允许执行、需要审批后执行
- 同一个命令还要能按参数、工作目录和目标路径继续收窄
- 不同任务阶段可以有不同权限,例如调研阶段只读,落地阶段才开放指定路径写入
- 临时提权必须有范围、理由、有效期和审计记录
也就是说,平台不应该只问“这个 agent 有没有全权限”,而应该能回答:
- 它能读哪些路径
- 它能改哪些路径
- 它能运行哪些命令
- 哪些命令必须先让人确认
- 哪些能力只是本次任务临时开放
FULL 权限可以作为极少数场景下的兜底模式,但不应该成为默认协作模型。
一个我觉得很合理的默认模型是:
一个 agent 负责一个项目。
也就是说,对这个 agent 来说:
- 它对自己负责的项目有写权限
- 对相关项目,尤其是直接依赖项目,只有读权限
- 如果没有额外授权,就不应该跨项目直接写入
这个边界非常重要。
因为很多研发任务确实需要跨项目理解,但不代表每个 agent 都应该天然拥有跨项目写权限。
更稳的做法通常是:
- 写权限按项目边界收敛
- 读权限按事实源和依赖关系适度放开
这样 agent 才能既拿到足够上下文,又不会轻易把局部任务扩散成跨仓库副作用。
这不只是安全问题,也是工程质量问题。
因为如果读写边界不清楚,AI 很容易:
- 误改不该改的文件
- 越权访问不该访问的项目
- 在错误位置写入产物
- 把一次局部任务扩散成全局副作用
一个真正能进入企业研发链路的平台,必须把“能看到什么、能改什么、在哪种条件下能改”定义得非常明确。
十一、跨项目功能开发,应该有协调者来组织多个 agent
如果一个功能本身就是跨项目的,例如:
- 前端改动同时依赖后端接口调整
- SDK 改动同时依赖协议仓库更新
- 平台能力改动需要多个仓库一起联动
那更好的做法通常不是放一个“全权限 agent”直接横跨所有项目处理。
我更倾向于一种分工更清楚的方式:
- 每个 agent 负责自己的项目
- 协调者负责拆任务、分配上下游关系、同步状态和组织验收
也就是说,跨项目功能开发更像是:
- 一个协调者
- 多个项目 agent 联合开发
而不是:
- 一个 agent 横穿所有仓库一路改过去
因为跨项目任务真正复杂的地方,往往不只是“改几份代码”,而是:
- 哪个项目先改
- 哪个项目的产物是上游输入
- 哪个项目只需要读取事实源
- 哪个项目需要真正落代码
- 哪些联动点必须一起验收
这些事情本来就更像编排问题,而不是单 agent 自治问题。
所以如果平台真的想支持跨项目研发,它就应该显式支持这种协作模型:
- 项目级 agent
- 跨项目协调者
- 可见的上下游依赖关系
- 可追踪的跨项目 diff 和验收状态
十二、平台界面不该只是一段对话
如果 AI 软件研发平台的主界面只有聊天框,我会觉得它的形态还太早期。
因为研发活动天然有很多结构化对象:
- 任务
- worklist
- diff
- contract
- 测试结果
- review 意见
- 验收状态
这些东西如果都折叠成自然语言对话,会带来两个问题:
- 事实越来越难审核
- 状态越来越难追踪
所以更成熟的平台界面,应该把这些对象显式化。
例如:
- 让任务和 worklist 可见
- 让 diff 和测试结果可直接审核
- 让上下游依赖和相关项目可追踪
- 让失败原因、阻塞点和待人工决策点显式暴露
我还会进一步要求:
界面不只是把对象列出来,而是要把强相关证据 inline 放在一起。
比如:
- 描述一个功能时,旁边就能看到相关验收测试内容和最近结果
- 描述一个文件或数据结构时,旁边就能看到对应代码和示例
- 看一条 review 意见时,旁边就能看到相关 diff、相关规则和修复后复查结果
因为研发里很多误判,不是因为信息不存在,而是因为信息散在太多地方,读者需要自己来回切换和手工拼装证据链。
如果平台界面只能做到“这里有文档、那里有代码、另外一处有测试结果”,那它仍然是在把集成工作留给人。
这件事的重要性,有点像附屏对工作效率的提升。
附屏本身并没有创造新的信息,但它减少了窗口切换,让人可以把主任务和参考材料同时放在视野里。AI 软件研发平台里的上下文聚合也是类似的:它不只是把信息存起来,而是减少人工在多个页面、多个文件、多个命令输出之间来回跳转的成本。
比如一个任务项的工作视图里,最好能同时呈现:
- 任务项原文
- 验收标准和验收标注
- 对应验收测试的运行结果
- 失败项、阻塞项和需要人工确认的点
- agent 对当前状态的摘要判断
这些内容不一定要全部默认展开。很多时候可以默认收缩,只把状态、结论和异常点露出来,让用户需要时再展开细节。但它们应该在同一个上下文里可达,而不是让用户在多个文件和界面之间反复跳转。
更好的做法应该是让人和 agent 在一个阅读面里就能看到:
- 当前结论
- 结论对应的真实代码
- 结论对应的测试和结果
- 结论是否已经被最新变更影响
这样平台才不只是一个信息入口集合,而是真正帮助人完成判断的工作台。
换句话说,聊天框可以是入口,但不应该是平台的全部。
十三、我更期待的平台,不是替代工程师,而是放大工程判断力
我对 AI 软件研发平台最核心的期待,不是“以后工程师可以少思考”,而是:
平台能把工程师最重要的判断力放大出来。
具体来说,就是让人更容易做到这些事情:
- 快速拿到完整上下文
- 看清真正重要的抓手
- 把不重要但耗时的部分交给 AI
- 对关键 contract、测试和架构做重点审核
- 在出现偏差时快速定位并纠正
如果一个平台只能让 AI 更快地产生更多内容,但不能让人更快判断什么重要、什么可信、什么该验收,那它最后大概率只是更高级的噪音放大器。
结尾
我不觉得 AI 软件研发平台的核心竞争力会只是模型接得多不多,或者生成速度快不快。
真正的分水岭,可能在这些地方:
- 是否真正理解研发工作流
- 是否真正提高迭代速度
- 是否把上下文工程做成平台能力
- 是否把 contract 和 verification 放在中心
- 是否优先让传统程序处理确定性问题
- 是否支持能力模块化与编排
- 是否同时支持 UI 和 CLI / skill 双轨触发
- 是否具备严格的读写权限控制
- 是否支持“项目 agent + 协调者”的跨项目协作模型
- 是否区分本地开发和正式部署
- 是否提供高可读性的文档与事实源入口
- 是否让工程师的领域判断力被放大,而不是被绕开
所以如果要我用一句话总结:
AI 软件研发平台,不是在研发流程旁边放一个 AI,而是围绕 AI 重新设计研发流程本身。