Cloudflare推出Artifacts支持Git的版本化存储2026年4月16日Cloudflare宣布推出Artifacts这是一个支持Git的版本化文件系统。智能体Agents改变了我们对源代码管理、文件系统和持久化状态的看法开发者和智能体生成的代码比以往任何时候都多未来5年编写的代码将超过整个编程历史的总和这促使满足此需求的系统规模发生了数量级的变化。而现有的源代码管理平台难以应对智能体带来的10倍数据量增长。Cloudflare认为需要一种新的基础工具于是打造了Artifacts。它是一个分布式、版本化的文件系统首先为智能体而构建并能服务于当今正在构建的各类应用程序。开发者可以通过编程方式创建存储库与智能体、沙盒、Workers或任何其他计算范式一起使用并从任何常规Git客户端连接到它。Artifacts目前对所有付费Workers计划的开发者进行私有测试计划在5月初开放公开测试。以下是使用示例javascript// 创建一个存储库const repo await env.AGENT_REPOS.create(name);// 将令牌和远程地址返回给你的智能体return { repo.remote, repo.token };bash# 克隆并像使用任何常规Git远程仓库一样使用它$ git clone https://x:${TOKEN}123def456abc.artifacts.cloudflare.net/git/repo-13194.git如果想从现有的Git存储库引导一个Artifacts存储库也可以使用 .import() 方法实现javascriptinterface Env { ARTIFACTS: Artifacts;}export default { async fetch(request: Request, env: Env) { // 从GitHub导入 const { remote, token } await env.ARTIFACTS.import({ source: { url: https://github.com/cloudflare/workers-sdk, branch: main, }, target: { name: workers-sdk, }, }); // 获取导入存储库的句柄 const repo await env.ARTIFACTS.get(workers-sdk); // 分叉为一个隔离的只读副本 const fork await repo.fork(workers-sdk-review, { readOnly: true, }); return Response.json({ remote: fork.remote, token: fork.token }); },};开发者可[查看文档](https://developers.cloudflare.com/artifacts/)开始使用若想了解Artifacts的用途、构建方式以及底层工作原理可继续阅读。为什么选择Git什么是版本化文件系统智能体了解GitGit深深融入了大多数模型的训练数据中其常规使用场景和边缘情况智能体都很熟悉针对代码进行优化的模型和/或工具尤其擅长使用Git。而且Git的数据模型不仅适用于源代码管理还适用于任何需要跟踪状态、进行时间回溯以及持久化大量小数据的场景如代码、配置、会话提示和智能体历史记录等。Cloudflare本可以发明一种全新的、定制的协议但这会带来冷启动问题。AI模型不了解这种新协议还需分发相关技能、命令行工具或期望用户查阅文档这些都会增加使用难度。而若为智能体提供一个经过身份验证的、安全的HTTPS Git远程地址让它们像操作普通Git存储库一样操作效果会很好。对于不支持Git的客户端如Cloudflare Worker、Lambda函数或Node.js应用程序Cloudflare提供了REST API和即将推出的特定语言的SDK这些客户端也可使用 [isomorphic-git](https://isomorphic-git.org/)不过在很多情况下一个更简单的TypeScript API可以减少所需的API调用。不仅仅用于源代码管理Artifacts的Git API可能会让人认为它仅用于源代码管理但实际上Git API和数据模型是一种强大的持久化状态的方式它允许对任何数据进行分叉、时间回溯和状态比较。在Cloudflare内部将Artifacts用于内部智能体自动将文件系统的当前状态和会话历史记录持久化到每个会话的Artifacts存储库中这能实现以下功能无需配置和保留块存储即可持久化沙盒状态。与他人共享会话并允许他们在会话提示状态和文件状态之间进行时间回溯无论是否对“实际”存储库源代码管理进行了提交。最重要的是能够从任何时间点分叉会话让团队成员可以与同事共享会话并让同事继续处理。调试问题时需要他人帮忙发送一个URL并分叉会话即可想改进一个API让同事分叉会话并从停止的地方继续。此外一些团队在不需要使用Git协议但需要具备回滚、克隆、比较等语义的场景下也想使用Artifacts。例如将每个客户的配置作为产品的一部分进行存储并且希望具备回滚功能Artifacts就是一个不错的选择。Cloudflare很高兴看到团队探索Artifacts在非Git场景下的应用就像探索其在Git相关场景下的应用一样。底层原理Artifacts构建在Durable Objects之上。如今Durable Objects的工作机制本身就具备创建数百万甚至数千万以上个有状态、隔离计算实例的能力这正是支持每个命名空间数百万个Git存储库所需要的。美国职业棒球大联盟用于实时比赛转播、Confluence白板以及Cloudflare自己的 [Agents SDK](https://developers.cloudflare.com/agents/) 都在大规模使用Durable Objects因此Artifacts是在一个经过长时间生产验证的基础组件上构建的。不过需要一个能够在Cloudflare Workers上运行的Git实现它要体积小、尽可能完整、可扩展支持 [notes](https://git-scm.com/docs/git-notes)、[LFS](https://git-lfs.com/)且高效。因此Cloudflare使用 [Zig](https://ziglang.org/) 编写了一个实现并将其编译为WebAssemblyWasm。选择Zig有三个原因整个Git协议引擎用纯Zig编写无需libc编译为一个约100KB的WASM二进制文件还有优化空间。它从头实现了SHA - 1、zlib压缩/解压缩、增量编码/解码、包解析以及完整的Git智能HTTP协议除标准库外没有任何外部依赖。Zig让可以手动控制内存分配这在像Durable Objects这样资源受限的环境中非常重要。Zig构建系统使能够轻松地在WASM运行时生产环境和原生构建针对libgit2进行正确性验证测试之间共享代码。WASM模块通过一个轻量级的回调接口与JavaScript宿主进行通信包括11个用于存储操作的宿主导入函数如host_get_object、host_put_object等和一个用于流式输出的函数host_emit_bytes。WASM端可以独立进行全面测试。在底层Artifacts还使用了R2用于快照和KV用于跟踪认证令牌。一个Worker作为前端处理认证和授权、关键指标错误、延迟并实时查找每个Artifacts存储库Durable Object。具体来说文件存储在底层Durable Object的SQLite数据库中。Durable Object存储的最大行大小为2MB因此大型Git对象会被分块并存储在多行中。使用了同步KV APIstate.storage.kv其底层由SQLite支持。Durable Object的内存限制约为128MB这意味着可以生成数千万个实例它们快速且轻量但必须在这些限制内工作。在拉取和推送操作中大量使用流式传输直接返回一个由原始WASM输出块构建的 ReadableStream。避免自己计算Git增量而是将原始增量和基础哈希与解析后的对象一起持久化。在拉取时如果请求客户端已经有基础对象Zig会发送增量而不是完整对象从而节省带宽和内存。支持Git协议的v1和v2版本。支持包括ls - refs、浅克隆deepen、deepen - since、deepen - relative以及使用have/want协商的增量拉取等功能。有一个广泛的测试套件包括针对Git客户端的一致性测试和针对libgit2服务器的验证测试以确保协议支持的正确性。此外Artifacts原生支持 [git - notes](https://git-scm.com/docs/git-notes)。Artifacts以智能体为优先设计注释功能使智能体能够向Git对象添加注释元数据包括提示、智能体归属和其他可以从存储库中读写而不改变对象本身的元数据。大型存储库的难题试试ArtifactFS大多数存储库规模并不大而且Git在存储方面 [设计得非常高效](https://github.blog/open-source/git/gits-database-internals-i-packed-object-store/)大多数存储库的克隆操作最多只需几秒钟主要时间花在网络设置、认证和 [校验和计算](https://git-scm.com/book/ms/v2/Git-Internals-Git-Objects) 上。在大多数智能体或沙盒场景中只需在沙盒启动时克隆存储库并开始工作即可。但对于多GB级别的存储库和/或包含数百万个对象的存储库如何快速克隆这样的存储库而不让智能体等待数分钟才能开始工作同时又不消耗过多计算资源呢一个流行的Web框架2.4GB且历史悠久的克隆操作接近2分钟。浅克隆速度更快但仍无法将时间缩短到个位数秒而且并不总是想省略历史记录智能体可能会用到。Cloudflare开源了 [ArtifactFS](https://github.com/cloudflare/artifact-fs)这是一个文件系统驱动程序旨在尽可能快地挂载大型Git存储库它会在需要时动态加载文件内容而不是在初始克隆时阻塞。它非常适合智能体、沙盒、容器和其他对启动时间要求较高的场景。如果能为每个大型存储库的沙盒启动时间节省约90 - 100秒并且每月运行10000个这样的沙盒任务那么每月就能节省2778个沙盒小时。可以将ArtifactFS看作是“异步的Git克隆”ArtifactFS执行无数据克隆即只获取文件树和引用而不获取文件内容。它可以在沙盒启动时完成这一操作让智能体工具能够立即开始工作。在后台它通过一个轻量级守护进程并发地加载下载文件内容。它优先加载智能体通常首先需要操作的文件如包清单package.json、go.mod、配置文件和代码同时尽可能降低二进制文件如图像、可执行文件和其他非文本文件的优先级以便智能体在文件加载过程中可以扫描文件树。如果智能体尝试读取尚未完全加载的文件读取操作将阻塞直到文件加载完成。该文件系统不会尝试将文件“同步”回远程存储库因为处理数千或数百万个对象时这通常非常缓慢。而且由于使用的是Git协议所以不需要这样做。智能体只需像操作任何存储库一样进行提交和推送无需学习新的API。重要的是ArtifactFS可以与任何Git远程仓库配合使用而不仅仅是Cloudflare自己的Artifacts。如果从GitHub、GitLab或自建的Git基础设施克隆大型存储库仍然可以使用ArtifactFS。未来规划Cloudflare今天的发布只是一个测试版本已经在着手开发一系列新功能这些功能将在接下来的几周内陆续推出扩展提供的 [可用指标](https://developers.cloudflare.com/artifacts/observability/metrics/)。目前提供每个命名空间的关键操作计数、每个存储库的操作计数以及每个存储库的存储字节数等指标以便轻松管理数百万个Artifacts。支持存储库级事件的 [事件订阅](https://developers.cloudflare.com/queues/event-subscriptions/)这样就可以在任何命名空间内的存储库进行推送、拉取、克隆和分叉操作时……