企业级 AI Coding 为什么还没发生质变:从工具提效到知识供给链

Code Agent 已经能完成越来越复杂的修改,企业研发却没有同步获得同等幅度的提效。问题横跨目标传达、执行验证与知识保鲜,需要把零散上下文升级成可追溯、可更新、可评测的知识供给链。

本文使用humanizerdocumd-visuals

一个团队准备给补贴系统增加“企业用户首单可与区域券叠加”的能力。开发者把需求发给 Code Agent,Agent 很快找到了优惠计算入口,新增判断、补了单测,也通过了本地构建。代码看上去干净,问题却藏在仓库之外:企业身份来自另一个服务,区域券只允许在支付前锁定,结算侧还会按照旧规则重算优惠。Agent 完成了它看到的任务,没有完成组织真正想交付的变化。

这类案例解释了一个看似矛盾的现象。Coding Agent 的代码生成、搜索和工具调用能力持续提升,个人在原型、脚本、局部重构上也能获得明显收益;到了跨域、跨仓库、要求长期维护的企业需求,整体交付周期却没有按相同比例缩短。编码时间下降以后,需求澄清、知识搜集、跨团队确认、返工和验收开始占据更大比重。

本文要回答的问题是:当 Agent 已经可以执行复杂编码任务,企业研发还缺少什么,才能把局部工具提效变成稳定的系统提效?

文章受到《AI Coding 思考:从工具提效到范式变革,我们还缺什么?》启发,保留其中“目标传达复杂度 × 执行复杂度”的观察,同时补上三个工程问题:执行为什么仍是瓶颈之一,所谓“降熵”如何落到可观测指标,以及专家知识怎样更新、失效和退出。这里讨论的是方法框架,不代表某个产品的内部实现。

一、先定义什么叫“质变”

如果只看生成的代码量,AI Coding 很容易显得成功。开发者让模型补 DTO、写测试、迁移 API,一小时完成过去半天的输入工作。这个指标的问题是,它只观察了研发链条中最容易被模型接管的一段。

企业交付的单位不是代码,而是一个经过验证、能够上线并继续维护的行为变化。真正值得观察的结果至少包括:从需求确认到上线的周期、人工等待时间、一次验收通过率、返工比例、线上缺陷、审查负担和每个成功任务的综合成本。如果 Agent 十分钟写完代码,开发者花两天寻找遗漏约束并协调下游,代码生成速度不等于交付速度。

“质变”也不必理解成程序员从流程中消失。更实用的判断是:原来必须依靠某个角色逐步传递的信息,是否变成了可复用的组织能力;原来串行等待的工作,是否可以在明确边界下并行或自动推进;人是否从重复转述和机械修改中退出,把注意力移到需求取舍、架构判断和风险验收上。

这意味着我们不能只问“模型写了多少代码”,还要问三个问题:

  1. Agent 是否得到了完成任务所需的有效事实?
  2. 它是否能在真实环境里安全执行并收集验证证据?
  3. 一次任务产生的新知识,能否降低下一次同类任务的成本?

三个问题分别指向知识供给、执行闭环和组织学习。缺少其中任何一个,提效都很难稳定积累。

二、两种复杂度决定任务适不适合交给 AI

判断一个任务的难度,可以先拆成两个维度。

目标传达复杂度描述的是:要让执行者准确理解结果,需要补充多少无法从任务表面直接推导的信息。它受业务术语、隐含规则、跨团队依赖、例外数量、事实变化速度和验收歧义影响。“把 JDK 从 17 升到 21”目标相对明确;“优化新客补贴转化,同时不能提高套利风险”需要大量业务判断。

执行复杂度描述的是:从明确目标走到可验证结果,需要多少步骤、工具、状态和副作用控制。修改一个配置项很简单;跨五个仓库变更接口、迁移数据并灰度上线,即使规格完整,执行仍然困难。

AI Coding 任务的目标传达复杂度与执行复杂度四象限

右下角的任务最适合优先自动化:目标清楚、执行繁琐,例如规则明确的依赖升级、批量 API 迁移、按照现有范式补齐测试。传统脚本不易覆盖其中的语义差异,Agent 又可以依靠清晰验收条件反复执行。

左下角通常不需要 Agent。目标和执行都简单时,一个静态检查、模板或普通自动化往往更便宜、更确定。为了展示 AI 而引入模型调用,只会增加波动和维护面。

左上角是顾问型任务:执行动作不多,目标却依赖价值判断,例如选择是否下线一条业务规则。Agent 可以收集证据、比较方案,责任仍应留在人类决策者手里。

企业核心业务需求大多落在右上角。它们同时要求理解业务意图和完成复杂执行,收益上限很高,失败成本也高。这里不能从“模型能写代码”直接推导出“任务可以端到端自动化”。需要分别降低目标传达成本和执行失败率,再决定自治程度。

四象限不是永久分类。同一类任务可以被工程化地向右下角移动。团队把“什么叫企业首单”、券叠加矩阵和结算校验写成机器可读规则后,目标传达复杂度会下降;把构建、沙箱、回归和灰度工具接入 Agent 后,执行复杂度不会消失,但其中一部分可以被稳定承接。平台建设的价值,就是改变任务在图中的位置。

三、从“人 → 系统”变成“人 → AI → 系统”,哪里会丢信息

传统研发也有信息损失。产品文档、技术方案和口头说明经过多人转述,最后才落成代码。引入 Agent 增加了一个能推理但也会补全空白的节点。信息不完整时,模型不会总是停下来等待,它可能根据仓库惯例、训练知识和局部上下文生成一个语法正确、逻辑自洽的解释。

因此,问题不只是“Prompt 写得好不好”。一次模型调用看到的是系统指令、当前任务、工具定义、仓库片段、检索结果和历史摘要的组合。任务所需事实可能根本没有被保存,也可能被保存却没有检索出来,还可能已经过期,或与另一份文档冲突。表达只是最后一公里。

原文用“信息熵”描述这种不确定性,很有启发性,但在工程里不能直接把 token 数量当成熵,也不能说输入越长,成功率必然越低。一份两百字的旧规则可能比两万字的准确材料更危险。要把“降熵”变成可以治理的工作,可以观察下面这些变量:

变量 典型问题 可观察信号
约束缺失 下游重算规则没有进入任务 事故复盘中新发现的必要事实数
来源冲突 Wiki 与代码、接口文档不一致 同一实体存在多个有效值
新鲜度不足 旧负责人、旧接口仍被召回 引用版本与当前版本的时间差
检索遗漏 知识存在但本次没有拿到 人工补充后任务才成功的材料
上下文噪声 大量无关文档挤占注意力 被引用内容中实际使用的比例
验证缺口 实现正确但没有覆盖关键行为 验收条件与自动检查的映射率

这些指标不要求一开始就精确。先在失败复盘里记录“缺了什么、错在哪里、依据哪一版”,就比统计 Prompt 长度更接近根因。

Anthropic 的 Context Engineering 文章把有效上下文概括为尽可能小而高信号的 token 集合,并强调即时检索、渐进披露和长任务压缩。这个结论对企业知识同样适用:Agent 不需要背下一部公司百科全书,需要在当前决策点拿到足够、可信、可追溯的事实。

四、执行能力并没有退出瓶颈列表

把企业 AI Coding 的主要矛盾放在目标传达上是合理的,但“后半段已经没有太大瓶颈”说得太早。真实执行包含仓库定位、环境搭建、依赖安装、跨文件修改、工具选择、状态保持、测试、权限和副作用控制。目标完全明确,也可能因为其中任何一步失败。

SWE-bench把真实 GitHub Issue 和对应 Pull Request 组织成仓库级软件工程任务;SWE-Lancer进一步收集真实自由职业软件工程任务,并用端到端测试或原始管理决策评估结果。这类基准的价值不在某个会快速过期的排行榜数字,而在于它们把“会生成代码”和“能在仓库里完成并验证任务”分开了。后者始终依赖执行环境、工具接口与可判定结果。

执行失败还会反过来污染目标理解。Agent 跑不通测试,可能误以为设计错了;权限不足拿不到依赖,可能换一条不符合架构的路径;日志过长被截断,可能遗漏真正的错误。知识供给和执行系统并非前后两个互不相干的箱子,它们会在循环中相互修正。

所以组织需要两条建设线:一条让 Agent 更准确地知道该做什么,另一条让它能够安全地动手、观察结果并恢复失败。业务团队没有必要自研基础模型,也未必需要自建完整 Code Agent,但仍然要提供仓库可运行性、稳定命令、沙箱、测试预言机、权限边界和发布证据。这些都是业务知识最终能够被执行的接口。

五、专家知识不能等同于一个“大知识库”

“建设统一专家知识库”容易让人联想到把所有文档导入一个向量库,再给各类 Agent 暴露搜索接口。这个方案解决了存储集中和基础召回,没有解决事实有效性、任务路由、权限、冲突与更新。

企业知识至少有四层,它们的来源和维护方式不同:

层级 主要内容 更合适的来源 更新方式
基础技术 中间件、安全、基础设施、通用实践 平台文档、可执行模板、策略代码 平台团队发布,版本化管理
业务领域 术语、规则、不变量、流程、责任边界 PRD、决策记录、领域模型、事件契约 业务与研发共同确认
团队协作 代码审查、发布窗口、所有者、例外流程 仓库规则、团队手册、权限系统 责任人审批,定期检查
仓库事实 架构、入口、依赖、接口、测试与配置 代码、Schema、构建系统、运行配置 从仓库自动生成并随提交校验

基础技术知识适合广泛复用,仓库事实必须绑定版本;业务规则可能跨仓库,却不能由代码单方面决定;团队习惯只应在所属范围内生效。把四层内容平铺进同一索引,会丢掉作用域和权威关系。

已有文章《让 Code Agent 读懂业务:把仓库知识做成可维护的 Skills》讨论了单个仓库里怎样组织术语、规则、代码锚点和验证方式,《LLM Wiki:把仓库编译成能读、能查、能更新的知识》讨论了代码知识自动生成。本篇再往上走一层:组织需要的不是一个更大的文档站,而是一条把多种来源加工成“可消费知识对象”的供给链。

六、知识供给链如何工作

知识供给链从事实源开始,经过提取、校验、发布、路由和观测,最终进入某次任务的 Context。任务结果和失败证据再反馈回来,触发修订或淘汰。它与数据流水线很像:重点不在仓库存了多少,而在输入质量、变换规则、消费契约和血缘。

企业 AI Coding 的知识供给链

一条知识不能只有正文。为了让系统判断它何时可用,至少需要下面这些元数据:

id: commerce.coupon.enterprise-first-order
kind: business-invariant
statement: 企业用户首单券可以与区域券叠加,但必须在支付前锁定资格
scope:
  domains: [marketing, order, settlement]
  repositories: [coupon-service, order-service, settlement-service]
evidence:
  - type: decision-record
    ref: docs/adr/ADR-042-coupon-stacking.md
  - type: contract-test
    ref: contracts/coupon-stacking.feature
owner: marketing-architecture
valid_from: 2026-08-01
review_after: 2026-11-01
supersedes: commerce.coupon.enterprise-first-order.v1
confidence: approved

statement供人和模型理解,scope用于路由,evidence让结论可核对,owner解决冲突升级,时间字段暴露新鲜度,supersedes避免新旧规则同时生效。最关键的是证据:如果一条规则无法指向决策记录、接口契约、测试或代码锚点,它只能作为线索,不能静默成为高风险修改的依据。

供给链中的“统一”也需要准确理解。统一的是知识对象协议、身份、权限、版本和观测方式,不是要求所有团队把内容迁移进同一种数据库。基础平台规范可以来自中央服务,仓库架构留在 Git,业务决策继续保存在协作文档;Context Builder 通过适配器读取它们,并保留来源。物理集中通常会制造新的迁移和治理瓶颈。

七、Context Builder 负责把知识变成当前任务的输入

知识存在不代表 Agent 能够使用。任务“增加企业首单券叠加”到达以后,系统要先识别涉及的领域和仓库,再组装一份任务契约:目标、明确排除项、业务不变量、相关接口、代码入口、可用工具和验收条件。这个过程就是 Context Engineering 在组织知识上的落点。

一个可解释的装配结果可以长这样:

{
  "task": "企业用户首单可与区域券叠加",
  "constraints": [
    {"id": "coupon.lock-before-pay", "source": "ADR-042", "version": 3},
    {"id": "settlement.recalculate", "source": "settlement-contract", "version": 8}
  ],
  "repositories": [
    {"name": "coupon-service", "entry": "CouponStackingPolicy"},
    {"name": "settlement-service", "entry": "DiscountRecalculator"}
  ],
  "verification": [
    "contract:coupon-stacking-enterprise-first-order",
    "integration:settlement-discount-recalculation"
  ],
  "unresolved": ["企业身份缓存最长允许延迟多久?"]
}

最后一个字段很重要。Context Builder 不应该把缺失事实编造成确定结论。高质量装配不仅提供答案,也要暴露无法从权威来源解决的问题,让人类在编码前完成一次成本较低的澄清。

Context 还需要渐进加载。任务开始时只给 Agent 任务契约和知识目录,进入优惠计算时再展开叠加规则,修改结算服务时再读取重算契约。把所有可能相关的文档一次塞满窗口,会增加冲突和成本,也让后续无法判断哪条材料真正影响了决策。

这也是 MCP、Skills、仓库文件和搜索接口的边界。它们是知识的发现或传输方式,不等于知识本身。MCP 可以暴露查询工具,Skill 可以提供领域路由,仓库文件适合承载版本绑定的规则;无论选择哪种入口,来源、作用域、版本和验证责任都不能省略。

八、从需求到验收,知识怎样流过一次真实任务

继续看首单券需求。产品经理提出目标时,业务知识层先给出“企业用户”“首单”和“区域券”的权威定义。系统发现“企业身份缓存延迟”没有明确约束,将它标为待确认,而不是让 Agent 自行选择。确认结果写回需求规格。

技术方案阶段,领域架构指出营销负责资格计算,订单负责优惠快照,结算只能校验不能改写已锁定的叠加关系。仓库事实层提供三个服务的入口、接口版本和现有测试。Agent 据此生成跨仓库方案,并列出发布顺序与兼容窗口。

进入单仓库实现后,可以使用《SDD:把模糊需求编译成 Coding Agent 能执行的开发流程》中的 Spec、Plan、Tasks 和 Converge。组织级知识给出约束,SDD 将这次需求特有的决定固化为可审查工件,Code Agent 再按任务修改代码。两者解决的不是同一个问题:知识供给链回答“组织已经知道什么”,SDD 回答“这次变化决定了什么”。

知识从需求、设计、实现流向验收并反馈更新

验证阶段不能只运行各仓库单测。任务契约要求验证支付前锁定、结算重算兼容和旧客户端行为,因此流水线运行契约测试和跨服务集成测试。测试失败时,系统记录失败对应的是哪条约束、哪个版本和哪段实现,而不是只把一屏日志交给模型。

上线后出现一条新事实:部分企业身份会在合并账户后发生变化。团队经过评审,将它加入领域规则,补充契约测试,并标记旧知识对象被新版本替代。下次同类需求无需重新询问同一批专家。只有这个反馈成立,一次研发工作才真正变成组织资产。

九、知识保鲜不能靠“让 AI 自动维护”一句话带过

知识管理几十年来最难的问题一直是更新。AI 可以从代码、会议和任务轨迹中提取候选事实,无法自动决定所有事实是否应该成为组织规则。代码可能本身就是待修复的错误,会议里可能只有未通过的提议,某次临时兼容也不应被提升为长期架构原则。

更稳妥的方式是把更新分成“候选生成”和“生效发布”两个阶段:

  1. 代码合并、Schema 变化、事故复盘或规格收敛后,系统生成知识变更候选,并附上 diff 与证据。
  2. 自动检查验证链接、作用域、重复与冲突,仓库事实还可以通过构建和静态分析复核。
  3. 低风险的派生事实自动发布,例如公开 API 列表;业务不变量和跨团队责任边界由所有者审批。
  4. 发布后进入版本记录,消费者可以继续使用旧版本完成尚未结束的任务。
  5. 到达复查时间、证据删除或消费失败率上升时,知识被标记为可疑,随后修订或退役。

自动化比例应该按知识类型决定。函数签名、依赖图、配置项和测试清单大多可以从仓库生成;“退款是否允许绕过风控”需要责任人确认;架构原则往往需要人类先做决定,AI 负责找证据和影响面。把所有内容都交给模型自治更新,会把知识漂移变成更隐蔽的系统性风险。

还要允许知识被删除。很多知识系统只会新增,不会退役,结果是检索同时返回三代规范。每条对象都应有状态:candidate、approved、deprecated、retired。消费者默认只读取与任务时间、范围匹配的有效版本,需要追溯历史时再显式展开。

十、工具可以多样,知识协议要稳定

企业里很难让所有人统一使用同一个 Code Agent。前端、后端、数据和产品的工作界面不同,不同团队也会在 Cursor、Claude Code、Codex、IDE 插件和自研工具之间切换。把知识体系绑定到某个客户端,会让每次工具迁移都变成知识迁移。

更合理的边界是稳定知识协议,允许消费端多样。一个 Agent 可以通过仓库内 AGENTS.md 和 Skills 读取规则,另一个通过 MCP 查询,第三个由流水线提前生成任务 Context。它们拿到的表示形式可以不同,但应共享知识 ID、版本、证据和访问控制。

OpenAI 的 Harness Engineering 实践采用了很有代表性的结构:短 AGENTS.md 作为目录,详细知识进入结构化 docs/,生成的数据库 Schema、产品规格和执行计划分别保存。这个案例不能证明所有团队都该照抄目录,却说明了一条稳健原则:入口保持短小,事实靠版本化工件承载,详细内容按需展开。

工具适配层还要处理权限。领域知识可能包含商业策略,生产日志可能带用户数据,仓库之间也有访问边界。检索系统不能因为 Agent 方便而绕过原有授权;缓存、追踪和评测样本同样需要继承数据等级。一次任务的 Context 装配记录应能回答“谁在什么目的下读取了哪一版知识”。

十一、怎样证明知识供给真的带来了提效

建设知识平台很容易陷入资产数量竞赛:生成了多少页面、接入了多少仓库、创建了多少 Skill。这些是产出指标,不能证明任务完成得更好。

评测需要以真实任务为单位,并按照四象限、领域和风险分层。选择一组历史任务,保存需求、代码基线和验收条件,用三种配置对比:只用 Code Agent;人工临时补充上下文;使用知识供给链自动装配。每种配置记录成功率、人工介入、总耗时、模型与基础设施成本、返工和遗漏约束。

任务级指标可以分成四组:

  • 交付结果:端到端验收通过率、上线周期、线上回滚和缺陷;
  • 人工负担:澄清轮次、等待专家时间、审查时长、接管次数;
  • 知识质量:必要约束召回率、无关材料比例、过期引用率、冲突发现率;
  • 单位经济性:每个成功任务的模型、平台和人工综合成本。

必要约束召回率很难自动得到,可以从小样本开始。让领域专家为历史任务标注十条关键事实,再看系统装配了几条;同时记录被装配内容中真正进入方案、代码或验证的比例。前者防止遗漏,后者控制噪声。

还要测“没有知识系统时是否已经足够”。对于目标清楚、仓库自解释良好的任务,额外检索可能降低速度。评测应允许结果表明某些场景无需平台介入,并把路由规则也作为优化对象。成熟系统的表现不是处处增加 Context,而是知道何时保持安静。

十二、最容易失败的几种建设方式

第一种失败是先建企业级本体。团队花半年统一术语、关系和分类,还没有选出一个高频任务验证消费价值。知识结构应该从任务反推:Agent 在哪一步缺了什么,最小对象需要哪些字段。跨域标准在真实复用出现后再抽象。

第二种失败是把文档生成当成知识更新。模型定期重写 Wiki,看上去内容常新,却没有验证结论是否与代码、契约和决策一致。生成解决表达成本,证据链和所有者才解决可信度。

第三种失败是把检索结果直接倾倒进 Prompt。召回十篇“相关”文档并不等于组装了可执行上下文。系统要先消除版本冲突,提取任务所需约束,保留引用,再把未决问题交给人。

第四种失败是中央平台包办所有知识。平台团队可以提供协议、索引、权限和观测,无法替业务团队决定什么是有效规则。没有明确所有者的知识,最终会变成“大家都能搜到,但没人敢相信”。

第五种失败是只优化 Agent,不改变交付接口。仓库依然无法一键构建,测试依然不稳定,环境和权限全靠口头申请。再准确的知识也无法穿过不可执行的工程环境。知识供给与仓库可运行性必须一起建设。

最后一种失败是把 AI 自动化当作必然收益。知识提取、审核、评测和平台维护都有成本。如果某类任务频率低、失败影响小、目标又容易描述,人工提供上下文可能更划算。供给链应该服务高频、高沟通成本或高风险任务,而不是覆盖每一次代码补全。

十三、从一个领域闭环开始

不需要先做公司级知识中台。选择一个需求频繁、边界相对清楚、已有测试基础的领域,例如优惠叠加或订单退款,收集最近二十个真实任务,标注每次最耗时的知识寻找和确认环节。

第一阶段只建设最小任务契约。把术语、五到十条业务不变量、仓库入口、负责人和验收命令写成版本化对象,让 Agent 能引用来源,让人工能看到缺口。目标是减少重复澄清,不追求自动更新。

第二阶段接入可生成的仓库事实。API、Schema、依赖和测试目录随 CI 更新,文档链接失效或代码锚点变化时报警。此时建立装配日志,记录每次任务读取了什么以及哪些材料被采用。

第三阶段才加入候选更新和评测闭环。任务结束后从规格、代码和验收证据提出知识变更,由所有者批准高风险内容。用历史任务回放比较成功率和人工负担,决定是否扩大到第二个领域。

扩展时优先复用协议和工具,不急着合并内容库。两个领域都需要 owner、evidence 和版本语义,可以共享平台;它们对“客户”“订单”的定义不同,则应保留各自作用域。统一能力与保留语义边界可以同时成立。

结语

Code Agent 让代码执行成本快速下降,也把研发中长期被编码掩盖的问题暴露出来:目标含有多少隐性知识,事实如何跨团队传递,验收能否机器判定,任务结束后组织是否真的学会了什么。

企业 AI Coding 的下一阶段不会只由更强模型推动。它需要一条知识供给链,把基础技术、业务规则、团队边界和仓库事实加工成有来源、有版本、有作用域的任务 Context;也需要可靠执行环境,让这些知识能够落成代码和验证证据。知识解决“做什么、为什么”,Harness 和工程基础设施解决“怎样安全做完”,SDD 保存“这次任务决定了什么”。

程序员的工作会随之向前移动,但不会退化为只写自然语言。有人仍要定义边界、处理冲突、设计验证、审查风险,并对知识对象的有效性负责。真正发生变化的,是这些判断不再每次从某个人的大脑重新传递,而能成为可复用、可检查、会过期也能被修正的工程资产。

参考资料