# 写代码只占程序员三成时间,CodiumAI 想拿下剩下的七成 > Cognitive Revolution No. 111 中文精读 - 原标题:Flow Engineering and Code Integrity at Scale with Itamar Friedman, CEO of Codium AI - 发布日期:2024-03-12 - 主持:Nathan Labenz - 网页版:https://cogrev.1mmt.com/ep/111-flow-engineering-and-code-integrity-at-scale-with-itamar-fri-KPBVND.html - 精读字数:约 4680 字(阅读约 10 分钟) > 本文为 cogrev.1mmt.com 基于原始访谈的 AI 改写中文精读,非官方翻译;引用请注明出处并链接网页版。 GitHub Copilot 用三年多时间做到一亿美元年收入,是第一个跑通商业化的编程大模型产品。可 CodiumAI 创始人兼 CEO 伊塔玛·弗里德曼(Itamar Friedman)在 Cognitive Revolution 播客里给出的数字更扎心:**在成熟团队里,写代码最多占程序员三成时间,不少团队连三成都不到**。剩下的时间花在测试、代码评审、集成、重构和维护上,而这恰恰是当时所有 AI 编程工具最薄弱的地带。 这期节目发布于 2024 年 3 月。CodiumAI 成立仅 18 个月,已服务数十万开发者,光 VS Code 插件就有约 25 万活跃用户。弗里德曼此前的公司 Codota 是代码补全产品 Tabnine 的前身,他算是最早一批做 AI 编程工具的人。这次他带来两样东西:一款主打「代码完整性」的产品,和一篇名为 AlphaCodium 的研究。后者用大约一百次模型调用,把 GPT-4 在编程竞赛基准上的通过率翻了一倍多;DeepMind 的 AlphaCode 达到类似水平,靠的是上百万次调用。 ## 写代码,是程序员最不忙的部分 弗里德曼把 2022 年 8 月称作「BC 时代」,ChatGPT 出现之前。那时他刚看到 Copilot 跑通的早期信号,判断代码补全的本质是把搜索搬进 IDE:以前要 Google 五次、翻五个 Stack Overflow 页面,现在结果直接变成代码。Stack Overflow 流量持续下滑,就是这个变化的注脚。 但他同时判断,补全和生成很快会变成大宗商品。当时市面已有约 15 款同类工具,Copilot 领先,本地开源模型迟早够用。企业还在批量采购,原因有二:那三成时间确实重要,而且补全是 LLM 最顺手的事,模型本来就是训练来按上下文补下一行代码的。让它判断「这段代码到底能不能跑」,训练和产品设计都差得远。 真正的问题在写完代码之后。测试呢?评审呢?对照 Jira 工单检查有没有漏功能呢?这些活没人爱干,却占掉大头。他给成熟团队算了笔账:**搞清楚要做什么、动手写、保证代码能跑且能并入现有系统,三个阶段里动手写低于 30%,不少研究给出的数字还要更低**。还有一层常被忽略:真实项目里大量工作是改旧代码,写完一周它就是遗留代码,等着被修、被重构。那些炫酷的 agent 演示,生成一个五页面的注册加仪表盘网站,这类东西 GitHub 上本来就有现成仓库。 红杉资本也把软件开发切成 pre-build、build、ship 三段,CodiumAI 的判断类似,但更激进: > 「一个虚拟团队成员不能只写代码、不测试、不理解更深的上下文。团队成员要覆盖 pre-build、build、ship 三个阶段。」 公司名用「完整性」而非「测试」,也有讲究。测试是验证代码意图的老办法,还有别的路径:自动为代码生成一份规格说明,再和产品经理写的需求文档做匹配,代码符不符合预期,照样能查。往后走,弗里德曼还想查开发实践,甚至公司文化层面的东西。 ## 产品:先告诉你该测什么,再帮你测 主持人内森·拉本兹(Nathan Labenz)装上插件试了一周。他点下「生成测试」,插件先弹出 20 个值得测的行为,每个还能展开子行为,一个函数最多能挖出 50 到 100 种测试角度,然后才给出前六条具体测试。弗里德曼说,开发者反馈最多的价值恰恰在这里:**用完之后知道了自己的代码该怎么测,边界情况在哪**。生成代码好玩也省时间,想清楚怎么测才是大家又恨又躲不掉的活。内森平时做原型,不碰生产环境,原本以为自己用不上多少,结果光这个功能就够回本。 内森也点了「运行并修复」,随即抛出疑问:修复本身谁来把关?这个问题贯穿了整期对话,弗里德曼的答案不靠单点功能,靠的是把验证嵌进整个流程。 另一个让内森上头的是「增强」(Enhance)命令。他自学编程多年,点一下,插件把类型标注、规范写法全补齐,像请了个私教。但弗里德曼坦白,**大约一半开发者讨厌这个功能**,因为每个人对好代码的口味不同,类似空格还是 Tab 之争,没有对错。解法是开放配置:每个仓库一份配置文件,写清楚这个项目里「增强」意味着什么;技术负责人可以给初级开发者预设原则。已经有客户做了示范:老 API 要废弃,配置之后,谁误用了老接口,插件立刻提示换新的。再往后,他希望 AI 能自动学习团队的最佳实践,第一步先让人能自己配。 面向团队的另一条线是 Git 插件 PR-Agent,专治拉取请求评审这个老大难,输入 /describe 就能生成完整的 PR 描述。插件里还有 ChatGPT 式的对话入口 Codiumate,可以圈选上下文提问,比复制粘贴省事。还有个概念叫「DRY by AI」:程序员讲究不重复自己(DRY),可现实是需求写在 Jira,代码写一遍,测试再写一遍,三份东西高度重叠还常常不同步。AI 的机会是让代码、测试、规格说明三者互相生成、保持一致。目前靠用户点按钮触发,等准确率够了,会变成自动对齐加告警。 运营上还有两个细节。其一,他们坚持零数据留存:上下文在运行时现场计算,靠依赖图算法决定往上往下追多少层,早期不建向量数据库,就是为了打消企业客户对代码被索引存储的顾虑。其二,JetBrains 插件的增长速度反超 VS Code,可能几个月内就盖过去,评分 4.8。企业市场里 JetBrains 的地盘比想象中大。 至于 1000 万行 monorepo 的上下文难题,弗里德曼的判断是,窗口涨到 12.8 万 token 当然有帮助,但**窗口解决不了注意力聚焦,更替代不了分步处理**。人拿到一大坨代码也会先整理再动手,模型一样要走步骤,卡帕西说过,迭代本质上是给模型增加思考块。他们的理念是把算法算出来的子上下文亮给用户:在「扩展测试套件」功能里,开发者能看到并增删模型引用的依赖清单,想要覆盖更广的测试就手动加。语言相关的依赖图是苦活,开源生态里 tree-sitter 之类远远不够,JetBrains 和 GitHub 手里都有内部方案,只是没开放。 ## AlphaCodium:把提示工程换成流工程 重头戏是研究。他们选的基准是 DeepMind 设计的 CodeContests,题目来自 Codeforces 竞赛。选它有讲究:LeetCode 的 Hard 题都偏简单,HumanEval 早已饱和,有人发现 GPT-4 在某个日期之前的题全对、之后的题全错,基本坐实了训练数据污染。Codeforces 的私有测试用例不在互联网上,像 Kaggle 一样防刷分。这个基准此前只有 DeepMind 和 OpenAI 认真提交过,CodiumAI 是第三家。 先看前人成绩。DeepMind 的 AlphaCode 一代微调了专用模型,解出约 28% 的题目,大致相当于参赛者的中位水平,代价是**每道题上百万次模型调用**,完全不实用。二代换了 Gemini Pro,调用量降了几个量级,但模型照样要针对竞赛微调,换个场景就得重训。AlphaCodium 走了另一条路:**用现成的 GPT-4,不做任何微调,每道题约一百次调用,几分钟,几美元**。五次提交、每次约三个候选方案、每个方案约 15 次调用。测试集上解出 30% 的题目,超过一半参赛者,约 51 到 52 百分位;验证集上最高接近一半,内森总结这是 AlphaCode 一代的两倍,和二代相当。想进前 10%,得把调用加到一千次以上,他们刻意不做,为的是留下一个别人能复现的实用结果。 为什么只提交 5 次?同行惯例是 10 次。他们从产品角度考虑,给用户推荐前三个或前五个方案比较合理,少跑一半还省时间。真提交 10 次,成绩还会更好,这个对比其实偏向 DeepMind 和 OpenAI。 方法被命名为流工程(Flow Engineering),刻意避开「思维链」和「智能体」两个词,思维链只是流的一种。论文标题就叫「从提示工程到流工程」,**流程拆细之后,每一步的提示词变得极简,花在提示上的功夫降到 5% 左右**。内森读完仓库里的全部提示词,评价是简短、清晰,真正的功夫全在任务拆解上。 流程分两段。预处理阶段不写一行代码:先反思问题本身,再推理公开测试用例,然后生成几个候选解题策略,注意只是策略,没有代码,接着排序,最后生成额外的 AI 测试,专门补边界情况。迭代阶段才动手:生成代码,自我改进几轮,跑公开测试,失败就修,再跑 AI 生成的测试,继续修。 这里有个关键设计叫锚定:**凡是通过的测试立刻锚定,后续任何改动都必须保持通过;失败的测试则先反思,到底是代码错了,还是测试本身错了**。开发者写测试时也常纠结这个问题,而且天然偏向接受绿灯,这套偏见被原样搬进流程,攒出一个不断增长的已通过测试池。思路借自课程学习,先易后难,逐步推进。防错误累积靠两个手法:知识累积,让信息带着前几步的消化结果往下传;跳跃注入,把第 4 步的输出直接插回第 7 步,绕开中间的损耗。 输出格式用 YAML,比 JSON 和 XML 都省 token,人也能直接读,内森说他已经从 XML 阵营倒戈。还有个反直觉的点,内森的原话值得整段引用: > 「让 AI 做一件事,然后马上拿它的方案让它批评自己,直觉上这不该管用。但它就是管用。」 卡帕西读了论文后在推特上重点夸的,正是这条流的设计。项目开源,提示词、温度参数、全部配置都在仓库里。顺带一个耐人寻味的细节:GPT-4 直接提示在验证集上的领先幅度明显大于其他模型,到了测试集差距却缩小,指向部分验证题与训练数据重合;流工程的价值,在更干净的测试集上反而更突出。他们还测了更多模型,DeepSeek 意外能打,尤其在测试集上泛化得好;有些模型聊天很强,写代码拉胯。 ## 分歧点:AI 写的代码,质量到底降没降 这是全期最有张力的讨论。一边是 GitHub 报告说 AI 让代码质量提升,一边是另一些报告说代码质量在下滑,加里·马库斯的质疑被内森认真转述:可能速度上去了,技术债也在堆积,收益是海市蜃楼。 弗里德曼的回应:两种说法都对,取决于场景。从零开始的原型项目,AI 产出接近甚至超过普通开发者;可如果是服务上亿用户的产品,要往复杂代码库里加功能,需要大量上下文,**当前质量大概率下降**。根源在于整个行业把生成设计成了系统一。他引用丹尼尔·卡尼曼《思考,快与慢》:给点上下文,给个提示,立刻要答案,这是快思考。AlphaCodium 展示的是系统二,慢下来,分步骤,过程中还去取相关信息。做智能体未必等于系统二,关键看流程属性。 他的预测很具体:**到 2024 年底,系统二式的生成会让 AI 在复杂代码上的质量反超普通开发者**。企业对补全之外的用例兴趣也在涨,PR 评审只是第一个,2024 年底前大家会在更多环节用上 AI。 ## 明天就能用的东西 这期内容的价值超出编程圈,AlphaCodium 本质上是一份通用的 AI 工作流设计模板。能直接搬走的有这些: - 先拆解再动手。把大任务切成每一步都可靠的子任务,生成代码前先反思问题、列策略。内森的建议更进一步:把自己行业的成功工作流写下来,很多团队从没文档化过自己的流程。 - 生成后立刻自评。用另一个提示词让模型批评刚产出的结果,多轮迭代,实测有效。 - 结构化输出改用 YAML,省 token 又可读。 - 锚定已验证的结果,先易后难,困难决策尽量往后推,用跳跃注入防止错误累积。 - 要求模型输出小而模块化的单元,方便单独验证。 写代码的人,明天可以装 CodiumAI 插件跑一次「生成测试」,看看它给函数列出的行为清单,多半会撞见自己从没想过的边界情况;团队可以试试开源的 PR-Agent。做 AI 产品的人,直接去读 AlphaCodium 的 GitHub 仓库,提示词和参数全公开,照着搭自己的流。节目结尾内森还推荐了 TinyStories 那期,微软研究院的 Ronen Eldan 和 Yuanzhi Li 用三岁儿童读物水平的数据,训出了带推理能力的小模型,想理解模型怎么学会思考,值得一听。