← 文章列表

ZCode 的仓库快照,越过了哪些数据边界

问题不只是代码有没有被上传,而是上传边界、解密权和训练价值都没有被用户真正看见

一个 AI 编程工具把代码发到云端,并不自动等于丑闻。用户主动引用文件,服务器当然会收到。ZCode 这次引起争议的,却是用户还没发出 Prompt,客户端就可能开始捕获工作区快照,而且范围伸进了 .git。

技术博主 Ferstar 在自己的设备上发现,一个待上传的加密快照有 313 MB,清单包含 42,411 个文件,.git 约占清单所统计工作区大小的 86.6%;这个比例不是对 313 MB 密文逐项测量的结果。这些数字来自一个项目,不能代表所有用户;“待上传”也不能直接写成“云端已经收到”。但它足以让人追问:一次代码请求,为什么需要附带整座仓库的过去?

本文目录

先看包里有什么,再问为什么打包

“AI 编程本来就要上传代码”绕过了最关键的区别。主动交给模型的当前文件、桌面端捕获的工作区、仓库的版本历史,是三种不同范围的授权。允许工具读代码,不意味着同意它在另一个时刻,把另一批数据交给服务器。

.git 也不是一份可以忽略的缓存。Git 把提交、目录树和文件内容存成对象,提交还关联父提交、作者、时间和说明。当前工作树只是其中一个状态。后来删除的配置和密钥,可能仍留在尚未回收的历史对象里;没有推到远端的分支、本地 reflog、.git/config,还可能带出开发方向、操作痕迹和内部服务地址。

Ferstar 的清单里,.git/lfs 约 196.1 MB,.git/objects 约 102.2 MB,.git/logs 约 0.6 MB。问题因此不只是多传了几个文件:远端代码托管平台通常看不到的本地记录,也可能随着快照离开电脑。上传工作树像交出一张照片,上传 .git 则可能连草稿、废片和底片一起交出去。

不过,这份技术材料能证明到哪一步,需要说清。快照清单支持对采集范围的质疑;逆向重建的链路支持对发送能力的质疑;具体哪些包已经成功抵达云端,还需要对应记录。failureCount: 564 是失败重试计数,不能说成成功上传了 564 次。把这些层次混在一起,反而给真正需要回答的问题留下了躲避空间。对一个用户,后果还取决于哪些数据成功上传、谁访问过以及如何使用;对产品设计,待上传包中已经出现不应默认采集的内容,就值得追究。前者需要补齐影响范围,后者要求收紧采集规则,不能用其中一项尚未查清来搁置另一项。

加密也没有替用户解决这个问题。在研究者重建的链路中,临时密钥由服务端公钥封装,本地没有可自行解密的密钥。这没有把解密控制权交给用户,也不能据此排除服务端读取内容的能力。用户拿到本地密文,无法据此独立审计内容,更不能从“已加密”推出“厂商无法读取”。

“生成 Wiki”能解释用途,解释不了范围

据 2026 年 9 月 18 日媒体转述的群内官方回应,智谱将上传归因于代码库索引和 Repo Wiki:该功能上线初期默认开启,Wiki 在云端生成后相关数据会立即销毁。公司称问题已修复,承诺开源 ZCode、邀请第三方审查,并给用户重置一次周额度。

这不是一个完全不成立的解释。生成仓库 Wiki 确实需要读取代码,检查点恢复也需要保存状态。仅凭一个包含历史的快照,不能排除实现粗糙、多个功能共用捕获链路等解释,更不能跳到“训练才是真实目的”。但无论意图是哪一种,产品都需要回答同一个问题:为什么它实际收集的内容,比用户启用的功能所展示的范围更宽?

是否修复要看实际版本和实现,旧数据如何处理则是另一项责任。对产品目的的解释不能代替对旧版采集范围的交代,新的承诺也不能证明旧包从未形成或上传。

用户界面里的开关尤其需要讲清楚:

用户要控制的行为 开关至少应该控制什么
是否上传 本地捕获和网络发送的实际边界
是否建立索引 获准上传的数据能否用于索引服务
是否改进模型 数据能否进入模型训练用途

如果关闭“优化体验”只撤回训练授权,关闭“仓库快照索引”只改变服务端处理,两者都不能停止本地捕获和上传,那么用户看到的关闭状态就不能表达他想要的拒绝。这里需要的是开关与实际链路的对应证据,不能靠名字猜。

“立即销毁”同样要有可核对的对象:删的是 OSS 对象、解密后的临时文件,还是也包括副本、备份及其他存储?哪些版本受影响,哪些工作区成功上传,处理日志能否支持删除承诺?这些空白没有被“这是 Repo Wiki 功能”填上。即使 Wiki 是唯一用途,过宽的采集边界仍然需要解释。

完整 Git 仓库有训练价值,但不是现成的 RL 数据集

原先让我警惕的另一点,是这类数据并非没有用的误上传文件。仓库保留了多少历史,取决于克隆深度、分支和对象回收等条件。能取得的历史不只是更多 Token,还有同一工程的状态变化:一次重构改了哪些模块,一个尝试后来被怎样回退,测试资产和依赖又给改动施加了什么约束。

仓库上下文、执行反馈和真实工程验证已经是代码 Agent 研究中的重要材料。例如 2026 年 8 月公布的自演化编码 Agent 研究,以及真实代码修复的强化学习研究,都讨论了这些连接。它们支持对潜在价值的分析,不能证明智谱实际使用过这批快照。

但 Git 历史不等于完整的工作过程。提交说明未必交代用户真正想做什么,回退未必证明前一步错误,分支留下的也可能只是个人操作噪声。一个补丁最终被提交,不代表它已经通过可靠测试,更不自动提供强化学习所需的奖励信号。

要把这些原料变成可用轨迹,还需要把用户 Prompt、Agent 工具调用、补丁、测试输出和最终结果对应起来,并处理环境复现与敏感信息。快照提供状态,关联记录补出动作和意图,验证结果才帮助判断动作是否有效。 缺少这些连接,不能把一个加密包直接叫作 RL 训练样本。

所以,我不接受两种省事的说法。一种是“拿到了完整仓库,所以已经用于后训练”;截至 9 月 18 日,材料没有公开证据支持这一步。另一种是“只是生成 Wiki,所以无需讨论训练价值”。有价值不证明已经使用,但恰恰要求用途限制和授权更明确。用户不该等到发现加密包,才知道厂商已经具备获取这类工程数据的能力。

信任要靠哪一层兑现

这件事也提醒我,“模型权重开放”与“工具的数据通道透明”相隔很远。桌面端、Agent Harness、更新机制和 sidecar 都可能在模型调用之外工作。即便运行本地模型,也不能仅凭这一点推断工作区没有离开电脑;要检查的是承载模型的整套运行环境。

仓库索引当然可以做。合理的起点,是首次启用时说清上传对象、目的、接收方和留存时间,打包前展示可读清单,并在打包层排除 .git、密钥等不应采集的内容。停止上传、删除云端数据、查看处理记录,也应是用户能够执行和核对的动作。

对已经用过 ZCode 的人,按这次事件的材料,应该关注明确修复后的版本,并检查 ~/.zcode/v2/checkpoints;Windows 通常对应 %USERPROFILE%\.zcode\v2\checkpoints。本地没有待上传文件,不等于云端没有副本。如果历史中曾出现密钥或内部凭据,就不能只检查当前工作树,需要按可能暴露处理并轮换。

我更关心智谱接下来交出什么证据:受影响版本与范围、开关对应的行为、成功上传记录,以及留存和删除审计。开源可以帮助检查客户端,额度重置可以补偿使用体验,却都不能替代这些回答。用户交出去的究竟是哪一批文件,应当在包离开电脑之前就看得见。

参考资料

写作附记

原始提示词

$blog-writer 智谱 zcode 偷偷上传整个 git 仓库的详细来龙去脉,知乎上已经有博主逆向分析了 zcode 代码,智谱现在的解释很牵强,RL 后训练,有完整的 git 仓库,对训练的帮助很大。 重写这三月的文章,注意,如果不是 AI 写的,不用重写

目录

评论

评论区将在滚动到此处后加载。