手机新浪网手机版app(新浪新闻)
144.3MB · 2025-09-30
转载
Engineer’s Codex · 2025年5月11日
Cursor,这个流行的 AI IDE(最近宣布 ARR 达到 3 亿美元),使用 Merkle 树 来实现代码的快速索引。本文将详细解释其工作方式。
在进入 Cursor 的实现之前,我们先理解什么是 Merkle 树。
Merkle 树是一种树形结构:
这种层级结构的好处在于:只要任意一个底层数据块发生改变,其对应的哈希就会变化,从而逐级传递到上层,最终导致根哈希改变。
它像是一种数据“指纹系统”:
根哈希可以看作整个数据集的加密承诺。只要某个部分变了,根哈希也会跟着变。
根据 Cursor 创始人和其安全文档,流程如下:
Cursor 首先在本地切分文件,把代码拆成有语义意义的片段,然后再进入后续处理。
开启代码库索引后,Cursor 会扫描编辑器中打开的文件夹,为所有有效文件计算 Merkle 树哈希。这个树随后与 Cursor 服务器同步。
切分好的片段会传到服务器,由 OpenAI 的 embedding API 或定制模型生成向量嵌入。
嵌入连同元数据(起止行号、文件路径)存储在远程向量数据库(Turbopuffer)中。为保护隐私,Cursor 只存储加密后的相对路径。创始人强调:代码本身不会存储在数据库,生命周期结束即删除。
每隔 10 分钟,Cursor 会检查 Merkle 树哈希,找出变更的文件,仅上传变化部分。这样能极大降低带宽开销。
索引效果在很大程度上取决于如何切分代码:
生成嵌入后,Cursor 在实际使用中这样调用:
这支持了:
初始化索引时,Cursor 会创建“merkle client”,并把根哈希发给服务器。服务器据此判断需要同步的部分。这一过程在 GitHub issue (#2209, #981) 的日志中可见。
Cursor 使用 Merkle 树 + 嵌入向量 实现了大规模代码库的高效索引:
同时,这种方案也存在实现复杂度高、索引负载大、嵌入安全等挑战。