Video thumbnail for 【人工智能】AI如何学会编程 | Cursor团队内部分享 | 强化学习 | 多步骤工具调用 | 奖励信号 | 信用分配 | 长上下文 | 状态工具 | 硬件优化 | 编程agent的未来

🔥AI程式設計解密:Cursor團隊揭露超人類編碼模型訓練秘辛!🔥

Summary

Language:

Quick Abstract

想了解 AI 如何編寫程式碼?Cursor 團隊分享了他們訓練超人類程式模型的內部討論,揭示了 AI 程式設計領域最前沿的挑戰與突破方向。從強化學習的稀疏獎勵到長上下文處理,從多步驟工具調用到即時使用者回饋,他們的見解將直接影響開發者的日常工作體驗。

Quick Takeaways:

  • 程式設計的強化學習與其他領域有根本差異,需要優化多步驟的工具調用過程。

  • Cursor 團隊重視無法通過傳統方式驗證的場景,需要在沒有明確反饋信號的情況下進行強化學習。

  • 測試是重要的獎勵訊號,但需結合真實變更的對比數據。

  • 長上下文很重要,但成本高昂,混合機制如 DeepSeek 的 NSA 機制值得關注。

  • 記憶工具允許模型存儲資訊片段,但跨時間序列的信用分配是難點。

  • 未來模型將使用更多 Token,並能復用之前的推理過程,提升效率。

  • 高品質數據比算力更稀缺,如何有效利用算力是未來的優化方向。

引言

大家好,这里是最佳拍档,我是大飞。在如今广泛使用编程 AI 工具的时代,不知大家是否思考过 AI 是如何生成这些代码的。这不仅是技术问题,更是关于如何让机器真正理解人类意图的深入思考。在 AI IDE 领域,Cursor 处于领先地位。尽管我们知道 Cursor 在训练自己的小模型,但其设计思路及背后思考一直是个谜。前不久,Cursor 放出近 1 小时的内部团队讨论视频,深度剖析了所用技术与思考,让我们有机会深入了解 Cursor 团队对训练超人类编程模型的看法,这些见解揭示了当前 AI 编程领域最前沿的挑战与突破方向。

训练编程 AI 的挑战

编程领域强化学习的独特性

Cursor 团队指出,编程领域的强化学习与数学或写作等其他领域有根本差异。数学推理中,答案通常较短,推理过程能助模型逐步得出正确答案。但在编程中,推理嵌入在答案里,代码既是思考过程也是最终结果。编程任务往往需多步骤工具调用,不像简单生成任务生成推理 token 后生成答案并获奖励,而是生成 token、调用工具、获取响应,且可能需多次迭代。这种多步骤特点使强化学习形态发生根本变化,需优化整个多步骤工具调用过程,而非单一输出。

无明确反馈信号的强化学习

Cursor 团队特别关注无法通过传统方式验证的场景。数学问题有标准答案,编程问题可通过测试验证,但实际应用中,用户常不明确告知系统解决方案是否有效,这就需在无明确反馈信号下进行强化学习,这是前所未有的挑战。

写作与编程的差异及训练方法思考

对于写作等领域,当前后训练方法常让模型写出僵硬内容,这非模型固有局限,而是训练方式所致。团队提出有趣想法,为何一定要训练模型预测下一个词,而非整个章节?若让模型据当前章节预测下一章节,用相似性度量评估预测与真实章节的相似度,就能将下一个词的预测问题转化为更长序列预测,并允许使用语义奖励优化。不过,编程和写作关键差异在于,代码好坏有相对客观标准,主要是功能性是否正确,而写作质量很大程度上取决于个人品味。

训练方法与奖励信号

对测试作为奖励信号的态度

Cursor 团队对将测试作为奖励信号既认可又谨慎。测试优势明显,提供接近真实的信号,若覆盖充分,能给出代码是否有效的可靠反馈,可基于此进行长期强化学习并学习有趣行为模式。但测试无法捕捉所有重要方面,需放宽条件寻找其他获奖励方式。

创新的奖励方式

一个创新想法是使用真实变更的对比数据,如某个功能变更的真实 diff,虽非完美信号,但可作为验证信号的有用信息。团队还提到模型实际看到的是优势值(相对奖励),若任务太困难,稀疏奖励会成问题,成功率达百分之一或稍高时信号可用。对于大任务分解,如完整 Pull Request,除非投入大量计算资源,否则困难且稀疏,若能分解为更小部分并分别测试,可能减少奖励稀疏,显著提升模型性能。

工具选择与应用

不同实验室的工具集选择

不同实验室会选择不同工具集训练强化学习模型。OpenAI 的 o3 模型专门针对终端高度优化,只倾向于使用 grep 和 sed 命令,除终端外不愿使用其他工具。而 Claude 模型倾向于围绕搜索和编辑设计,这种差异反映了不同团队对工具复杂性与效果权衡的不同理解。

终端工具的优势与拓展

终端工具受青睐主因是简单性,无需构建复杂测试框架运行 agent,给它 shell 访问权限就能完成工作。但可在核心工具集基础上做得更好,如代码检查工具 Linter 能提供大量信号,不过获取信号需运行语言服务器,让其在任意代码上运行相当困难。Cursor 自带预安装语言服务器扩展,用户设置后可获得 Linter 等工具信号。

语义搜索工具的优势

语义搜索在静态代码文件上可能无法提供比多跳搜索更多信息,但速度更快、成本更低、使用上下文窗口更少。

用工具管理模型行为

团队提到可用工具管理模型本身行为,如很多推理模型喜欢过度推理,缓解方法是给模型添加思考工具,任务需推理时才调用启用推理过程。现在推理模型常提交用户消息后、未看到任何内容前就开始思考并调用所有工具,团队成员建议某些步骤可在工具调用之后再进行思考。

代码与长上下文交互

长上下文的重要性与趋势

Cursor 团队指出,长上下文在某种程度上非常重要,若将所有内容限制在 8K token 以内,所有模型基本等效,可能需至少 50 - 60k token 上下文长度才能看出不同模型区别。上下文趋势会越来越长,但成本也会越来越高。

上下文窗口长度与评估

对于上下文窗口长度,更长肯定更好,但存在递减效应。长期来看,即时查询检索相关 token 不是唯一方法,最有意义的可能是使用混合机制,如 DeepSeek 的 NSA 机制,将注意力分为三部分,一个进行滑动窗口注意力关注短期,另外两个进行块状注意力,每隔一定数量 token 存储为键和值,查询关注这些块并获得最相关的前 k 个块,然后对这些块进行完全注意力。对于长上下文评估,真正困难在于判断基线效果,因各种机制都有效,评估必须非常严谨。

复杂状态工具:记忆工具

记忆工具的概念与问题

Cursor 团队提出记忆工具概念,允许模型存储信息片段并稍后检索。但问题是如何鼓励模型存储对以后有用的好记忆,这涉及跨时间序列的信用分配问题。记忆工具包含“存储记忆”和“检索记忆”两个不同工具,检索记忆相对简单,有帮助可获奖励,存储记忆则复杂得多,奖励要看后面一系列动作表现,而非当前步骤。

记忆工具的训练

训练时需做很多不同情境下的采样才能给到信号,既要让模型学会写入记忆,又要做后续采样读取记忆并根据效果回传奖励。这种跨轨迹的信用分配问题使记忆存储机制很难直接反向传播,最好办法是做基准测试,用不同规则、启发式方法或提示词实验,比较不同情况下存储与忘记记忆的效果。

硬件对长上下文处理的影响

新一代 GPU 的支持

Cursor 团队对底层技术有深刻理解,新一代 GPU 让长上下文处理更易。GB200 和 NVL72 架构通过两种方式支持超长上下文:一是拥有 72 个通过 NVLink 网格互连的 GPU,可进行大规模张量并行,还能把注意力头分布在不同设备上,更易搞定 KV 存储;二是 Grace CPU 能做统一内存,可存储更多 KV。另外,KV 不一定要都放在 GPU 上,运算和加载交错,用到注意力时再加载到 GPU 就行。

文档级注意力

Cursor 团队特别喜欢文档级注意力(章鱼注意力 squid attention)概念,每个文档像不同触手,让每个文档独立“关注自己”,最后一起全局关注。好处是可把多个文档的 key 和 value 各自缓存起来,推理时随时替换,无需重新预填充,这对产品快速创建内容、语义检索和读取文件等功能非常有用。

优化真实世界使用

当前强化学习方法的局限

Cursor 团队指出,目前大多数强化学习为完成一堆测试用例,但训练人员真正关心的是模型处理人类实际需求的能力,如在文件中添加 console log 等以人为中心的工作。要获得以人为本的奖励信号,需从真实环境中的真实人类那里获得真实信号,如用户是否喜欢 agent 所做更改或是否接受编辑。

优化方法

团队提出观察用户实际做出的真实更改,据此判断模型做得像不像。让后台对某个问题进行三到四次尝试,尝试不同模型、参数设置和温度,选择最有效选项作为训练奖励模型的信号。若有奖励信号但用户总在三个选项中选一个,可只针对此信号训练奖励模型,好处是奖励模型看到真实情况后会比原始模型知道更多,饱和更晚。

编程 agent 的未来

模型发展趋势

Cursor 团队认为未来模型会使用更多 token,特别是在输出上下文方面。像 o3 模型会一直生成内容直到建立正确上下文才知如何解决问题,预计未来模型会在做决定前连续调用工具很长时间,但这样较浪费,很多内容下次需重新算。不过大多数情况没必要每次都推理那么多,可复用之前推理过程摊销成本,如让 agent 查看轨迹或在代码库中之前做过的事情,学到有用知识并存储。

长上下文与代码库专用模型

长上下文或代码库专用模型会变得重要,只要能复用之前积累的知识、理解代码结构,不用每次都重新理解,模型就会高效很多。另外,输出 token 的扩展会让训练采样更高效,通常 SFT 中模型只从输出 token 获得信号,相当低效,若超长输出,信用分配也困难。Cursor 团队发现,对于大语言模型训练,高质量数据比算力更稀缺,最好的数据有限,如何有效利用算力可能是未来优化方向。

总结与展望

从 Cursor 团队的讨论中,我们看到编程 AI 更清晰的未来图景,它们将更智能,能理解当前任务需求,从历史经验中学习,建立对代码库的深入理解并高效重用知识。我们正站在编程范式转换的临界点,即将从手动编写每一行代码、逐步调试和反复测试的方式,逐渐被 AI 辅助的协作式编程取代。在新模式下,开发者将更多专注于高层次设计和创意,具体实现细节交给能理解上下文、学习代码偏好并持续改进的 AI agent 。大家对编程 AI 的未来有何看法?欢迎在评论区留言。感谢收看本期视频,下期再见。

Was this summary helpful?

Quick Actions

Watch on YouTube

Related Summaries

Summarize a New YouTube Video

Enter a YouTube video URL below to get a quick summary and key takeaways.