肥仔教程网

SEO 优化与 Web 开发技术学习分享平台

万字长文全网独家首次解密cursor核心:手把手打造AI Native IDE

Cursor在短短一年内负载增长了100倍,数据层每秒处理超过100万次查询,每天提供数十亿次代码补全。与联合创始人Sualeh Asif深入探讨其构建方式。

AI 编程应用 Cursor 是一个非常典型的现象级产品。2023 年 3 月刚起步时,年收入只有约 100 万美元,而到了 2025 年 4 月,这一数字飙升至 3 亿美元—— 25 个月时间,收入翻了整整 300 倍。

Cursor背后的成功路径,核心原理,值得每一个工程师,研发人员,产品经理,管理者学习。


Cursor是一款AI驱动的IDE,2024年以来成为工程师们最喜爱的工具。

Anysphere是Cursor背后的初创公司,成立于2022年,Cursor的第一个版本于两年前的2023年3月发布。上周,Anysphere宣布完成了9亿美元的C轮融资,公司估值达到99亿美元!该业务的年收入已超过5亿美元,这可能创下了记录:据我所知,没有其他开发工具公司在推出首个产品后的2年内达到这一里程碑。Cursor被财富500强中超过一半的大型科技公司使用,这也有所帮助。

同样在上周,该公司推出了Cursor 1.0,这是一个重大版本:值得注意的新增功能包括AI代码审查(使用名为BugBot的工具)、后台代理和内存支持(记住过往聊天的详细信息)。

我与Cursor联合创始人Sualeh Asif坐下来了解Cursor的工作原理以及团队如何构建这个工具,他分享了其内部结构的新细节:

1. 技术栈:TypeScript和Rust、云服务提供商、Turbopuffer、Datadog、PagerDuty等

2. 自动补全的工作原理:低延迟同步引擎将加密上下文传递给服务器,服务器运行推理

3. 聊天功能如何在不在服务器上存储代码的情况下工作:巧妙使用Merkle树避免在服务器上存储源代码,同时能够使用嵌入搜索源代码

4. Anyrun:Cursor的编排服务:一个Rust服务负责在云中安全地启动代理,具有适当的进程隔离,使用Amazon EC2和AWS Firecracker

5. 工程挑战:使用模式决定技术选择、扩展问题、冷启动问题、分片挑战和难以发现的故障

6. 出于必要的数据库迁移:Cursor如何以及为什么从Yugabyte(一个应该无限扩展的数据库)迁移到PostgreSQL。还有在大型索引故障期间,在几小时内迁移到Turbopuffer的史诗般努力

7. 工程文化和流程:每2-4周发布一次、异常保守的功能标记、专门的基础设施团队、实验文化以及他们面临的有趣工程挑战


Cursor的数据概览


在深入技术栈之前,让我们先从数字角度了解Cursor:

- 50:从事Cursor开发的工程师数量

- 100万:每秒事务数,峰值时更高

- 100倍:12个月内用户和负载的增长——有时每月翻倍

- 1亿+:企业客户每天使用Cursor编写的企业代码行数,如NVIDIA、Uber、Stripe、Instacart、Shopify、Ramp、Datadog等。Cursor声称美国最大的1000家公司中超过50%使用其产品

- 5亿美元+:年收入运行率。这在5月初为3亿美元,1月份为1亿美元,而一年前为零。Cursor可能正在创造收入增长记录?

- 10亿:企业和非企业用户每天使用Cursor编写的代码行数略少于这个数字

- 数百TB:存储在Cursor数据库中的索引规模。这可能看起来不如其他数字令人印象深刻,但与图像和视频相比,代码本身在存储方面相当小。此外,这不是代码本身,而是嵌入,因为Cursor不在其数据库中存储代码

Cursor 宽松的办公室

Cursor可能正在追赶GitHub Copilot的收入生成:路透社报道GitHub Copilot在2024年可能产生了5亿美元的收入。目前,Cursor有望在2025年产生相同的收入,如果增长继续以当前速度进行,甚至可能更多。


1. 技术栈


关于这个刚满3年的Cursor代码库的一些统计数据:


- 25,000个文件

- 700万行代码


编辑器是Visual Studio Code的分支,意味着它与VS Code具有相同的技术栈:


- TypeScript:大部分业务逻辑用这种语言编写

- Electron:Cursor使用的框架


在创办公司时,他们必须决定是从头开始构建编辑器(类似于Zed所做的),还是从分支开始。Sualeh解释了这个决定:


"我们需要拥有自己的编辑器,不能'仅仅'成为一个扩展,因为我们想要改变人们编程的方式。这意味着我们要么需要构建一个全新的IDE,要么分支一个现有的编辑器。


我们决定分支,因为从头开始需要大量努力才能构建一个稳定的编辑器。我们的价值主张不是构建稳定的编辑器,而是改变开发者编程的方式,以渐进的方式进行。例如,如果没有分支,构建神奇的'tab模型'会非常困难,而有了分支就很简单。分支让我们专注于体验,而不是编辑器。"


后端:


- TypeScript:大部分业务逻辑用这种语言编写

- Rust:所有性能关键组件都使用这种语言。下面讨论的编排器就是一个例子

- Node API到Rust:大部分业务逻辑在TypeScript中,性能密集型部分在Rust中,所以有一个桥梁通过Node.js从TypeScript调用Rust代码。一个例子是调用索引逻辑(用Rust编写),大量使用这个桥梁

- 单体架构:后端服务主要是一个大型单体,作为一个整体部署。这提醒我们单体架构对早期初创公司效果很好,可以帮助团队快速行动


数据库:


- Turbopuffer:一个多租户数据库,用于存储加密文件和工作空间的Merkle树,下面会介绍。团队偏爱这个数据库的可扩展性,不必处理数据库分片的复杂性,就像以前一样。我们在下面的"工程挑战"中介绍挑战

- Pinecone:一个向量数据库,存储一些文档的嵌入


数据流:


- Warpstream:一个与Apache Kafka兼容的数据流服务


工具:


- Datadog:用于日志记录和监控。Sualeh说他们是重度用户,发现Datadog的开发者体验远优于替代方案

- PagerDuty:用于值班管理,与他们的Slack集成

- Slack:内部通信和聊天

- Sentry:错误监控

- Amplitude:分析

- Stripe:购买Cursor计划时的计费和支付

- WorkOS:登录Cursor时的身份验证,如使用GitHub或Google Workspace登录

- Vercel:托管Cursor.com网站的平台

- Linear:用于管理工作

- Cursor:当然!团队使用Cursor来构建Cursor。最终,每个工程师都对自己提交的代码负责,无论是手写的还是Cursor生成的


模型训练:Cursor使用多个提供商来训练自己的模型并微调现有模型:


- Voltage Park

- Databricks MosaicML

- Foundry


物理基础设施

所有基础设施都在云服务提供商上运行。Sualeh说:


"我们非常是一个'云商店'。我们主要依赖AWS,然后是Azure进行推理。我们还使用其他几个较新的GPU云。"

大部分CPU基础设施在AWS上运行。他们还运营着数万个NVIDIA H100 GPU。很大一部分GPU在Azure内运行。


推理是Cursor迄今为止最大的GPU使用案例,这意味着生成下一个token,无论是作为自动补全还是完整的代码块。实际上,Azure GPU仅用于推理,不用于其他LLM相关工作,如微调和训练模型。


Terraform是Cursor用来管理基础设施(如GPU和虚拟机,如EC2实例)的工具。


2. Cursor自动补全的工作原理


为了理解构建Cursor的一些技术挑战,让我们看看第一次启动编辑器时会发生什么。


低延迟同步引擎:自动补全建议

打开项目或文件夹后,你可能会开始编辑文件。这意味着Cursor需要生成自动补全建议,Cursor团队称之为tab建议。


低延迟同步引擎为"tab模型"提供动力。这生成灰色显示的建议,可以通过按"Tab"键接受。建议需要在理想情况下不到一秒的时间内快速生成。以下是幕后发生的事情:


工作原理:

  1. 客户端本地收集当前上下文窗口(代码)的一小部分
  2. 代码被加密
  3. 加密的代码/上下文被发送到后端
  4. 后端解密代码/上下文
  5. 使用Cursor的内部LLM模型生成建议
  6. 建议被发送回来
  7. IDE显示建议。按"Tab"接受建议
  8. ...过程为下一个建议重复

这个"tab模型"必须尽可能快,数据传输尽可能低。发送多少上下文和建议质量之间总是有权衡:Cursor能发送的相关上下文越多,建议就越好。然而,发送大量上下文可能会减慢建议的显示,所以正确处理这一点是Cursor工程师面临的挑战之一。


3. Cursor聊天功能如何在不在服务器上存储代码的情况下工作


Cursor支持聊天模式,用于询问代码库、与代码库"聊天",或要求Cursor执行将启动代理进行重构、添加某些功能、修改方法等的操作。后端不存储源代码,但所有LLM操作都在那里完成。它通过代码库索引来管理这一点。以下是工作原理:


在聊天模式中提问:让我们以询问createTodo()方法为例,该方法是代码库的一部分,在server.js中定义。为了使事情复杂化,我在index.html中内联定义了一个类似的方法叫addTodo()。让我们看看Cursor如何处理这个!

Providing a codebase-related prompt to Cursor


提示被发送到Cursor服务器,在那里它解释提示,并决定需要执行代码库搜索。


使用代码库索引进行搜索。代码库索引是先前创建的嵌入。它尝试使用向量搜索定位最匹配上下文的嵌入。在这种情况下,向量搜索返回了两个非常接近的结果:在server.js和index.html中。

从客户端请求代码:服务器不存储任何源代码,但现在从server.js和index.html请求源代码,以便它可以分析两者并决定哪个相关。


最后,在向量搜索和从客户端请求相关源代码后,服务器有了回答问题所需的上下文。


Cursor在幕后做了一些事情来使这些搜索工作。


4.使用代码块进行语义索引代码

为了允许像上述情况那样使用嵌入进行向量搜索,Cursor首先需要将代码分解为更小的块,创建嵌入,并将这些嵌入存储在服务器上。以下是它的做法:


1. 创建代码块。Cursor将文件内容切片成更小的部分。每个部分稍后将成为一个嵌入

2. 在不存储文件名或代码的情况下创建嵌入。Cursor甚至不想在服务器上存储文件名,因为它可能被视为机密信息。相反,它发送混淆的文件名和加密的代码块到服务器。服务器解密代码,使用OpenAI的嵌入模型或他们自己的模型创建嵌入,并将嵌入存储在他们的向量数据库Turbopuffer中


创建嵌入在计算上是昂贵的,这是在Cursor后端使用云中GPU完成的原因之一。对于中等大小的代码库,索引通常需要不到一分钟,对于大型代码库可能需要几分钟或更长时间。你可以在Cursor设置→索引中查看索引状态。


使用Merkle树保持索引最新


当你使用Cursor或其他IDE编辑代码库时,Cursor的服务器端索引会过时。一个简单的解决方案是每隔几分钟运行重新索引操作。然而,由于索引在计算上是昂贵的——并且通过传输加密代码块使用带宽——这并不理想。相反,Cursor巧妙地使用Merkle树和高延迟同步引擎(同步引擎每3分钟运行一次)来保持服务器端索引最新。


Merkle树是一个树,其每个叶子都是底层文件的加密哈希(例如文件main.js的哈希)。每个节点都是其子节点哈希的组合。一个包含四个文件的简单项目的Merkle树看起来像这样:

Merkle树的工作原理:


  • 每个文件根据其内容获得一个哈希。树的叶子是文件
  • 每个文件夹根据其子节点的哈希获得一个哈希


Cursor使用与此非常相似的Merkle树,除了它使用混淆的文件名。Cursor客户端基于本地文件创建Merkle树,服务器也基于它已完成索引的文件创建一个。这意味着客户端和服务器都存储各自的Merkle树。


每3分钟,Cursor进行索引同步。为了确定哪些文件需要重新索引,它比较两个Merkle树;客户端上的是真实来源,服务器上的是索引状态。让我们以客户端"index.ts"更改为例:


使用树遍历定位需要重新索引的位置。树遍历不是我们开发者经常实现的东西,但对于这个用例,Cursor工程师必须这样做。Merkle树使树遍历高效,因为从根节点开始,很容易判断哈希是否匹配。在哈希有差异的地方,也很容易找到需要同步的文件。同样重要的是,Merkle树将同步操作最小化为仅更改的文件。


这种Merkle树结构很好地适应了Cursor的实际使用情况。例如,在一天结束时关闭计算机,然后第二天开始从git仓库获取更新是很常见的。在团队中,到第二天早上一堆文件发生变化是很常见的。使用这个Merkle树,Cursor尽可能少地进行重新索引,在客户端节省时间,在服务器端尽可能高效地使用计算。


安全索引


即使Cursor不在服务器端存储代码,代码库中也有一些敏感部分,即使加密后发送也不是好主意。敏感数据包括秘密、API密钥和密码。


使用.gitignore和.cursorignore是保持索引安全的最佳方式。秘密、API密钥、密码和其他敏感信息不应上传到源代码控制,通常存储为本地变量,或在添加到.gitignore的本地环境文件(.env文件)中。Cursor尊重.gitignore,不会索引其中列出的文件,也不会将这些文件的内容发送到服务器。此外,它提供了一个.cursorignore文件,应该添加Cursor要忽略的文件。


在上传块进行索引之前,Cursor还会扫描代码块以查找可能的秘密或敏感数据,并且不会发送它们。


索引非常大的代码库


对于大型代码库——通常是具有数千万行代码的单一仓库——索引整个代码库极其耗时,使用大量Cursor的计算资源,并且通常是不必要的。此时使用.cursorignore文件是明智的方法。文档提供了更多指导。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言