No. 178·精读

43.8%对33%:Genie登顶SWE-bench,靠还原工程师的思考过程

Automating Software Engineering: Genie Tops SWE-Bench, w/ Alistair Pullen, from Latent.Space podcast

Latent.Space 的 Swyx 与 Alessio 采访 Cosine 的 Alistair Pullen,讲 Genie 如何在 SWE-bench 基准上取得最优成绩。

节目音频00:00 / 1:09:30
中文精读由 AI 基于原始访谈改写,非官方翻译,可能存在偏差或错误;表述以原节目为准。

2024年9月底,伦敦创业公司Cosine的CEO Alistair Pullen在一架飞往旧金山的航班上,用飞机WiFi按下了发布键。他发布的AI软件工程师Genie,在软件工程基准SWE-bench上拿到30%的解决率,是当时的最高纪录。几天后他又给出第二个数字:在OpenAI人工校验过的SWE-bench Verified上,Genie做对500道题里的219道,得分43.8%,同期GPT-4o是33%。

顺带一提,他这次旧金山之行只待两天。他自己的建议是:别学我,别从伦敦飞旧金山只待两天。

这期节目是Cognitive Revolution从Latent Space播客串台来的内容,原对话发生在Latent Space两位主持人Swyx和Alessio与Alistair之间,Swyx还是Cosine的天使投资人。Nathan Labenz在开场把推荐理由说得很直白:Cosine做的事,就是他那套AI自动化方法论的极限版本。把复杂工作拆成AI能处理的小块,人工筛出黄金样本,用合成数据补齐推理链,高强度微调,最后把所有环节串成一个agent。区别只在于Cosine预算更大、野心更足,而且真把行业最难的问题之一刷到了第一。

从外卖App到YC:两个手机开发者的转型

Alistair的起点很普通。埃克塞特大学计算机系毕业,他和联合创始人Sam一个写iOS一个写Android,在校时接外包项目,毕业后赶上疫情,俩人就在卧室里继续接活。后来一位同学拉他进了一家YC孵化的生鲜快送创业公司Fancy,他搬去伦敦,又把Sam拉进来。两个人包办了这家公司全部工程:客户端App、后端、库存系统、司机调度算法。18个月后,公司被GoPuff收购。

2022年,期权兑现完,两人决定自己干。Sam在Reddit上看到GPT-3,Alistair回家打开playground,第一件事是问它能不能写JSON。能写。俩人立刻去试作为手机开发者最想试的事:让AI从零写一个App。他们用4000 token的上下文窗口搭了一套链式prompt系统,先定技术栈,再逐层细化需求,最后让codex模型写每个模块。系统脆弱得要命,但偶尔真能跑出一个前后端齐全、能启动的东西。他们把demo拿给后来当COO的联合创始人Yang看,Yang的反应是:"你们这是发现了火。"

三个人申请YC。面试又短又狠,面试官直说讨厌这个想法,觉得做不成。Alistair把那场面试当成免费咨询,当场转向:从零写App太远,那就先帮开发者处理已有的代码库。YC说行,两周交MVP。做出来的第一个产品是个很糟的命令行工具,之后转型做代码库语义检索。为了不把代码传上云,他们试着在本地跑语义搜索,几百万行的仓库,HNSW索引在VS Code里直接把内存吃光。公司当时叫Build It,麻烦在于没人会念,YC第一次聚会所有人都念成"build build build",后来改名Cosine。

回头看,他自己总结得很清楚:他们从第一天就想做"让AI替自己干活",只是技术没到,就先把技术到位后必需的零件提前造好,检索是最重要的一个。等模型追上来,零件插上就能用。后来发生的事,基本就是这个剧本。

核心洞察:模型读的是PR,缺的是"为什么"

Genie发布视频里,Alistair管它叫"世界首个AI软件工程同事",重点全在训练数据上。他的核心判断是:写代码的模型和做软件工程的模型,是两回事。

打个比方,一个PR是大量思考和讨论被压缩后的最终产物。预训练模型读到的是这些最终diff,它学会了模仿结果,但PR本身信息损耗极大,为什么改、怎么想到的,基本都丢了。所以纯靠代码语料预训练的模型,在HumanEval这种"写个函数"的测试上能拿高分,到了SWE-bench这种真实仓库任务上就不行,因为它没有还原"人是怎么解决这个问题的"。

Cosine把全部精力押在这里:用一套他们称为derivation pipeline的流程,尽可能法医式地还原历史上每个改动背后的思考过程,再把推理链做成训练数据。Alistair的原话是,输出格式、diff怎么写这些都是外围,决定基准成绩的核心只有一件事:

问题是怎么被人解决的,以及我们能不能最好地还原人是怎么解决这些问题的。

原始数据有多脏,有个插曲可以作证。他们最早用GPT-3.5的16k版本直接灌数据,没做任何清洗,结果发现开源数据里最大的一块是更新README和文档。第一版模型别的不会,特别擅长更新README、写注释,还会在PR评论里跟人吵架,你给它反馈,它顶回一句"我觉得你不对"。从那天起他们明白,数据清洗和对齐的工作量远超预期。

数据流水线:故意把代码写坏,再教模型改对

这里有个反直觉的点。人类公开发布的代码,绝大多数是能跑的状态,模型见多了就只会"一枪命中",没见过迭代,自然不会迭代。真实工程里,第一次就写对的情况很少。

Cosine的解法分两步。第一步,合成运行时错误:故意篡改AST,制造数组越界、引用不存在的变量这类基础模型本来就会犯的错,按一定概率混进训练数据。第二步,自我改进循环:第一批数据是完美样本,题目加答案,直接训;生成第二批时,让上一版模型先试着解题,预期它会做错,然后拿错误状态和正确状态做diff,把"从错误状态改到正确状态"的过程做成新数据喂回去。如此往复,模型学会了迭代,也学会了从错误里推理下一步该改什么。

数据集做到多大?Alistair的回答很实在:预算能撑多大就多大,他们是按每月烧钱额的多少倍来决定花多少的。即便如此,灌进模型的token以十亿计,而常规微调数据集的量级是百万。这也是OpenAI微调团队对他们产生兴趣的起点,团队负责人John Allard公开为他们背书,说Cosine在推动微调的能力边界。

技术细节也有意思。OpenAI的自服务微调要动态决定LoRA适配器的大小:太小配大数据没信号,太大配小数据学不到东西。Cosine因为数据量巨大,用上了比公开版本更大的适配器,随之要重调学习率调度等一串参数。Alistair说,他们现在的数据集只是"目前买得起的最低配置",接下来六到十二个月要摸清的是数据的scaling law长什么样,瓶颈到底在模型还是在适配器。

四步循环:检索、规划、写码、测试里的硬细节

Genie的工作流分四步:找文件、规划、写代码、跑测试。每一步都有值得记的东西。

先说检索,这是他们眼中最肥的性能洼地。代码语义检索是个出了名的坑,他们的老说法是:要搜代码在做什么,别搜代码长什么样。最直觉的方案,把代码库切块、嵌入、算余弦相似度,实测效果很差,代码的形态和自然语言差太远。他们第一个有效的方案,是训一个模型把英文查询先转成一段"假想的答案代码",再拿这段代码的嵌入去搜,仅这一步就把检索准确率拉上去一大截。到了Genie,他们换了思路:不搭检索引擎,让模型在自博弈生成的数据里学会开发者找代码的方式。从文件系统入手,挑候选文件,判断是不是目标,看到可疑的import就点进去,go to definition、go to references,沿着调用图一步步逼近。和人类开发者在陌生代码库里的动作一模一样。

目前的检索准确率是66%左右,口径是:完成任务所需的代码行,模型找到了约66%。一个关键动作是给模型接上语言服务器,让它真正用上go to definition,仅此一项把检索从54%拉到60%出头。Alistair的类比:LSP坏掉的编辑器,就像突然被缴了械,你意识不到自己平时多依赖它。

规划环节,他的判断是:让基础模型"一步一步想"远远不够,这类推理被模型本身的智力封了顶,否则它们不会在SWE-bench上离SOTA那么远。Cosine要的是让推理过程模仿工程师解题的思路。他还有一个清晰的杠杆:更强的推理模型每发布一次,他重新生成一遍数据,信号就更强,再训一版模型,就完成一次跳级。新模型对他来说是白捡的性能。另外Genie计划做到一切可编辑,包括它写的代码,patch里有个小错你手动改掉,它接着干。

写代码是模型最舒服的环节。他们对log probs做了分析,把上下文窗口里每个位置的token平均概率画出来,结论是模型写代码时的置信度远高于循环里的其他环节。训练方式上有个差异:多数模型改代码会重写整段,Genie被训练成直接写diff和patch,省token,而且patch本来就是人类工作的最终产物。Alistair猜这会让模型动用预训练里不同的"脑区",他没有证据,但概率曲线支持这个判断。

然后是那条重要的曲线。Genie的解题概率随上下文长度线性衰减,60k token是分水岭,超过60k,失败概率就大于成功概率。哪怕训练数据里有在11万token处成功解题的样本,实际推理时模型在长上下文尾部就是不行。Alistair把这归因于基础模型的注意力机制,并把这份分析讲给了OpenAI微调团队。他们据此做的优化很朴素:不动结构,想办法让关键内容尽量落在60k以内的甜区。

跑测试这步,他们刻意做轻。Genie不负责搭建代码库环境,它架在GitHub上,直接调用你的CI,跑完通过Checks API把结果拉进上下文。理由是绝大多数企业本来就有CI流水线,让模型从零搭环境属于额外风险。交互上有两种模式:全自动模式,在Linear里派个工单它就直接干;网页端模式,任务太模糊它会先反问澄清,因为他们判断,从第一天就理解错方向然后搞砸,比多问一句让人烦得多。上线后你可以像审真人PR一样留评论,它接着改。Alistair还补了一句,它回应评审的态度比真人同事好,因为训练数据里那些敷衍的"LGTM"和不服气的抬杠,都被过滤掉了。

榜单风波,以及几个反直觉判断

榜单这事始于Devin。今年3月Devin发布并宣布自己是SOTA,Alistair把它当成挑战书,用他的话说,友谊、睡眠、体重全搭了进去,换来一个可以客观衡量的标尺,在此之前评估Genie只能靠"感觉一下好不好用"。

Genie的成绩目前没挂上SWE-bench官方排行榜,原因值得展开。SWE-bench在提交规则里新加了要求:必须附上模型轨迹,也就是推理过程,相当于数学考试要写解题步骤。Cosine的patch是公开的,任何人可以去他们的GitHub仓库复现数字。轨迹他们拒绝交。理由很商业:模型输出是训练数据的镜像,把轨迹交出去,等于把整套方法论拱手让人,对方拿一个强基座模型做蒸馏,Genie就被白嫖了。作为闭源公司,这是他必须做的取舍。

基准本身也在演进。原版SWE-bench有2294道题,Swyx估计跑一遍要8000美元,Alistair说他们自己的成本不方便公开,反正比这高,而且迭代起来太慢。此前的SWE-bench Lite偏简单,衡量不了整体水平。他们本来计划自己做一套300题的"SWE-bench small",按难度分布抽样,结果OpenAI用人工标注抢先做了,就是500题的Verified。Alistair对此很满意:题目确认可解,跑起来便宜,迭代快。他还打算再进一步,SWE-bench只有通过和不通过两种结果,信息太稀疏,他们想测出模型在哪一步开始跑偏,就像数学卷子能看出你最后一行才错。

节目里还有几个和主流认知相左的判断。第一,浏览器没那么重要。Genie也带URL阅读和Perplexity API查询工具,但Alistair认为,读文档和Stack Overflow是锦上添花,把对的文件找出来才是根本。第二,超长上下文不是万能药。被问到如果有1000万token窗口会不会换路线,他说不会,Cosine的方法对基座模型中立,哪个最强就上哪个,等Gemini 1.5开放微调,Genie当天就能迁过去。第三,做难的事。他拿Cursor举例:从VS Code插件改成fork VS Code,当时几乎没人看好,事后看这是Cursor赢的关键。他自己总结的创业教训就一句:不管你多小、资源多少,去做难的事,回报最大。

商业化部分有个亮点:客户定制模型。Cosine内部有一个叫John的Genie版本,用员工名字命名,做法是把跑公开数据的同一条流水线,原样跑在Cosine自己的代码库上,得到一个既懂软件工程、又对自家仓库极其熟练的同事。Alistair说这个体验好到惊人。至于企业愿不愿意交出历史代码,他接触下来的观察是态度反而在软化,因为企业算得清账:如果这东西真能让团队提速,收益大于信息安全风险。理想客户画像也明确:技术栈以TypeScript、JavaScript、Python、Java为主,因为训练数据里JavaScript加TypeScript加TSX占了将近一半,Python占21%,总共覆盖15种语言。

对了,发布视频的初剪版,开场是Alistair模仿特朗普说"Cosine是世界上最了不起的AI实验室"。朋友们劝他删了,理由是没人知道你是谁。

明天就能用上的三件事

这期节目最有价值的部分,是把"微调一个领域agent"的全流程摊开了。哪怕不做编程产品,下面几条明天就能套用。

  • 先造零件,再等风来。Cosine在模型只有4k上下文时就开始做检索工具,等128k模型出现,零件插上就用。你今天就可以把业务流程里模型暂时做不好的环节,先做成独立的工具和数据管线。
  • 训练数据要还原过程,别只喂结果。只喂最终产物的模型学不会迭代。把人解决问题的中间步骤、错误和修正过程记下来,这些推理链才是微调里最值钱的部分。合成错误、让模型试错再教它改,是已被验证的做法。
  • 用eval和log probs驱动迭代,别凭感觉。SWE-bench给了Cosine一把客观标尺,log probs分析让他们发现60k悬崖并做出针对性优化。先给你的业务定一个可量化的评测集,再盯着模型的置信度曲线找性能洼地。

Nathan Labenz在开场说的那句话,可以当整期节目的注脚:如果Cosine用这套方法能在SWE-bench上刷新纪录,就没有理由怀疑你能在自己的业务里做同样的事。前提只有一个,肯下功夫把活干了。

In this special crossover episode of The Cognitive Revolution, Nathan shares an insightful conversation from the Latent.Space podcast. Swyx and Alessio interview Alistair Pullen of Cosine, creators of Genie, showcasing the cutting edge of AI automation in software engineering. Learn how Cosine achieves state-of-the-art results on the SWE-bench benchmark by implementing advanced AI techniques. This episode complements Nathan's recent discussion on AI Automation, demonstrating how far these practices can be pushed in real-world applications. Don't miss this opportunity to explore the future of AI-driven software development and its implications for businesses across industries.
Check out the Latent.Space podcast here: https://www.latent.space
Apply to join over 400 Founders and Execs in the Turpentine Network: https://www.turpentinenetwork.co/

SPONSORS:
WorkOS: Building an enterprise-ready SaaS app? WorkOS has got you covered with easy-to-integrate APIs for SAML, SCIM, and more. Join top startups like Vercel, Perplexity, Jasper & Webflow in powering your app with WorkOS. Enjoy a free tier for up to 1M users! Start now at https://bit.ly/WorkOS-Turpentine-Network
Weights & Biases Weave: Weights & Biases Weave is a lightweight AI developer toolkit designed to simplify your LLM app development. With Weave, you can trace and debug input, metadata and output with just 2 lines of code. Make real progress on your LLM development and visit the following link to get started with Weave today: https://wandb.me/cr
80,000 Hours: 80,000 Hours offers free one-on-one career advising for Cognitive Revolution listeners aiming to tackle global challenges, especially in AI. They connect high-potential individuals with experts, opportunities, and personalized career plans to maximize positive impact. Apply for a free call at https://80000hours.org/cognitiverevolution to accelerate your career and contribute to solving pressing AI-related issues.
Omneky: Omneky is an omnichannel creative generation platform that lets you launch hundreds of thousands of ad iterations that actually work customized across all platforms, with a click of a button. Omneky combines generative AI and real-time advertising data. Mention "Cog Rev" for 10% off https://www.omneky.com/

CHAPTERS:
(00:00:00) About the Show
(00:00:22) Sponsors: WorkOS
(00:01:22) About the Episode
(00:04:29) Alistair and Cosine intro
(00:13:50) Building the Code Retrieval Tool
(00:17:36) Sponsors: Weights & Biases Weave | 80,000 Hours
(00:20:15) Developing Genie and Fine-tuning Process
(00:27:41) Working with Customer Data
(00:30:53) Code Retrieval Challenges and Solutions
(00:36:39) Sponsors: Omneky
(00:37:02) Planning and Reasoning in AI Models
(00:45:55) Language Support and Generalization
(00:49:46) Fine-tuning Experience with OpenAI
(00:52:56) Synthetic Data and Self-improvement Loop
(00:55:57) Benchmarking and SWE-bench Results
(01:01:47) Future Plans for Genie
(01:03:02) Industry Trends and Cursor's Success
(01:05:23) Calls to Action and Ideal Customers
(01:08:43) Outro

本集资源与出处