ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Zed AI 数据与隐私机制深度解析:响应反馈收集、Edit Prediction 训练数据与开源许可检测实现

Zed AI 数据与隐私机制深度解析:响应反馈收集、Edit Prediction 训练数据与开源许可检测实现 Zed AI 数据与隐私机制深度解析响应反馈收集、Edit Prediction 训练数据与开源许可检测实现【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed本篇围绕 Zed 官方文档《Feedback and Training Data》docs/src/ai/ai-improvement.md展开系统讲解 Zed 在哪些场景下会保留 AI 相关数据响应评分与反馈的 opt-in 机制、Edit Prediction 训练数据收集的三重前置条件与edit_predictions.disabled_globs排除配置并结合 Zed 仓库源码深入剖析开源项目检测的许可文件识别实现与训练上下文的具体捕获流程。读完后你将能够准确评估自己使用 Zed AI 功能时的数据边界并正确配置文件排除规则以保护敏感代码。一、默认立场正常 AI 请求不被保留理解 Zed 的数据策略首先要明确它的默认边界正常的 AI 请求不会被 Zed 保留。对于 Zed 自托管模型Zed-hosted models见 zed-hosted-models与模型提供方的协议明确禁止使用用户的 prompt 或代码上下文进行训练并要求零数据保留唯一的例外是提供方指定的、带有安全保留条款的模型例如 Anthropic 的 Covered Models 一类其保留策略记录在 AI Privacy 文档 中。Zed 中涉及 AI 的能力面包括Agent PanelEdit PredictionInline AssistantGit 提交信息生成只有在用户显式分享或显式 opt-in的少数场景中Zed 才可能保留 AI 数据。这也正是本文的核心主题这些例外场景究竟有哪些、保留哪些字段、数据流向哪里。Zed 自托管模型承诺Zed 自托管模型的零数据保留与不训练承诺包括上述安全保留例外的完整说明位于 AI Privacy 文档的数据保留章节。本页面的职责仅聚焦于用户主动共享数据的路径。二、响应评分与反馈每次分享都是独立 opt-inZed 允许用户对 AI 响应进行评分或提交反馈用于改进系统提示词、工具与产品体验。关键规则是每一次分享都是独立 opt-in本次分享授权不构成对未来收集数据的许可。文档中有一条明确的警告值得特别留意警告对 AI 响应评分会将整个会话线程conversation thread发送给 Zed。该线程包含你的消息、AI 响应以及线程元数据。如果不想让线程被 Zed 持久化就不要对响应进行评分。反馈场景下收集的数据对于你显式通过评分或反馈分享的会话线程Zed 可能存储会话线程中的你的消息与 AI 响应你随评分/反馈附带的评论文字线程元数据例如所用模型、token 计数、时间戳你的 Zed 安装环境元数据。若你从不评分或提交反馈Zed 不会存储任何与 AI 功能使用相关的客户数据用于改进目的。需要区分的是Zed AI 功能的遥测Telemetry是独立收集的。遥测包含使用了哪个 AI 功能这类元数据以及用于了解性能的高层交互指标例如 agent 响应时间、edit prediction 的接受/拒绝情况。遥测的细节见 Telemetry 文档。存储与匿名化反馈数据存储在 Snowflake 数据仓库中Zed 会定期审查这些数据以优化提示词、工具与产品行为。存储前数据会经过匿名化处理剔除访问令牌access tokens、用户 ID、邮箱地址等敏感信息。三、Edit Prediction 训练数据收集三重条件缺一不可Edit Prediction 是 Zed 训练数据路径中最复杂的场景。Zed不会为 Edit Prediction 模型收集训练数据除非以下三个条件同时满足用户显式 opt-in在 Edit Prediction 状态栏菜单的Privacy分区中打开Training Data Collection开关项目被识别为开源通过工作区根目录存在许可文件license file来检测文件未被排除该文件不匹配edit_predictions.disabled_globs中的任何 glob 规则。下面逐一结合源码展开。3.1 状态栏开关Privacy 分区下的 Training Data Collection状态栏菜单的实现位于 edit_prediction_button.rs。从源码可以看到菜单先插入Privacy分区标题且该开关仅在 provider 为 Zed 时才出现menu menu.separator().header(Privacy); if matches!(provider, EditPredictionProvider::Zed) { if let Some(provider) self.edit_prediction_provider { let data_collection provider.data_collection_state(cx); // ... menu menu.item( ContextMenuEntry::new(Training Data Collection) .toggleable(IconPosition::Start, data_collection.is_enabled()) // ...源码中菜单项旁会动态显示四种状态提示直观解释了三重条件如何共同生效项目被识别为开源且开关打开Project identified as open source, and youre sharing data.绿色对勾项目被识别为开源但开关关闭Project identified as open source, but youre not sharing data.项目未被识别为开源即使开关打开Project not identified as open source. No data captured.两者皆否Project not identified as open source, and setting turned off.这说明开关打开 ≠ 一定会收集开源检测不通过时数据不会被捕获与文档中三重条件缺一不可的描述完全吻合。此外该偏好还可通过设置文件以edit_predictions.allow_data_collection配置取值为default沿用状态栏开关的历史选择、yes允许或no永不允许见 settings_content 中的定义/// Controls whether Zed may collect training data when using Zeds Edit Predictions. /// Data is only ever captured for files in projects that are detected as open source. /// /// - default: use the preference previously set via the status-bar toggle, /// or false if no preference has been stored. /// - yes: allow data collection for files in open-source projects. /// - no: never allow data collection. pub allow_data_collection: OptionEditPredictionDataCollectionChoice,3.2 开源项目检测许可文件识别的源码实现文档中通过许可文件的存在来检测开源这一条对应的完整实现是 license_detection.rs。其工作过程分为三步第一步文件名正则筛选。LICENSE_FILE_NAME_REGEXlicense_detection.rs#L21-L49匹配最常见的许可文件命名兼容美式license与英式licence拼写支持LICENSE、LICENSE.txt、LICENSE.md、LICENSE-APACHE、LICENSE-MIT、APACHE-2.0、BSD-3-CLAUSE等常见变体且大小写不敏感。测试用例license_detection.rs#L664-L721明确了它的边界COPYING、LICENSE.html、MYLICENSE、子目录中的src/LICENSE、以及LICENSE-GPL都不匹配——即检测范围限定于根目录下的宽松许可permissive license文件。第二步内容模式匹配。OpenSourceLicense枚举定义了七种目标许可及其 SPDX 标识符license_detection.rs#L51-L97许可SPDX 标识符模式文件Apache 2.0apache-2.0apache-2.0-pattern、apache-2.0-reference-patternBSD Zero0bsd0bsd-patternBSD1/2/3 条款不区分bsdbsd-patternISCiscisc-patternMITmitmit-patternUPL 1.0upl-1.0upl-1.0-patternZlibzlibzlib-pattern匹配采用自研的归一化文本 有序片段模式算法先由canonicalize_license_text把许可文本转小写、压缩空白、只保留字母数字license_detection.rs#L262-L270再按模式文件中的片段倒序比对。测试套件用 license_examples/ 下 18 份真实许可文本做正样本并刻意构造了负样本——例如在 MIT 文本后追加一句 This project is dual licensed under the MIT License and the Apache Licenselicense_detection.rs#L591-L599会导致检测失败返回None。也就是说双许可、非宽松许可如 GPL或许可文本被篡改的项目都不会被判定为可收集训练的开源项目这是一个相当保守的判定策略。第三步文件规模预检与动态监听。is_path_eligiblelicense_detection.rs#L353-L387会先解析符号链接、跳过目录、并依据模式表的approximate_max_length跳过过大的文件避免读取巨型文件随后LicenseDetectionWatcherlicense_detection.rs#L272-L397通过订阅 worktree 的UpdatedEntries事件实现动态更新——运行时新增的LICENSE-MIT会让is_project_open_source()翻转为true删除后翻回false测试test_watcher_updates_on_changeslicense_detection.rs#L767-L822验证了这一过程。另外从源码结构看单文件工作区SingleFile与远程 worktreeRemote的 watcher 恒定返回false即只有本地目录型项目才可能触发开源判定。3.3 文件排除edit_predictions.disabled_globs配置无论是否 opt-in某些文件永远被排除在训练数据收集之外。文档给出的默认排除清单为{ edit_predictions: { disabled_globs: [ **/.env*, **/*.pem, **/*.key, **/*.cert, **/*.crt, **/.dev.vars, **/secrets.yml ] } }这份清单与仓库内置默认配置 assets/settings/default.json 一致默认文件在此之外还追加了**/.zed/settings.json、/**/zed/settings.json、/**/zed/keymap.json等 Zed 自身配置路径其中注释明确说明 glob 相对于 worktree 根目录匹配除非以/开头Windows 下的等价形式表示绝对匹配。你可以通过在 Zed 设置文件中追加disabled_globs来显式排除更多路径或扩展名设置文件编辑方式见 configuring-zed参数完整说明见 all-settings{ edit_predictions: { disabled_globs: [secret_dir/*, **/*.log] } }源码侧disabled_globs被解析为VecDisabledGlob并在EditPredictionSettings::enabled_for_file中生效/// A list of globs representing files that edit predictions should be disabled for. /// This list adds to a pre-existing, sensible default set of globs. /// Any additional ones you add are combined with them. pub disabled_globs: VecDisabledGlob, /// Returns whether edit predictions are enabled for the given path. pub fn enabled_for_file(self, file: Arcdyn File, cx: App) - bool { !self.disabled_globs.iter().any(|glob| { if glob.is_absolute { file.as_local() .is_some_and(|local| glob.matcher.is_match(local.abs_path(cx))) } else { glob.matcher.is_match(file.path().as_std_path()) } }) }需要注意两点其一用户配置的 glob 是与默认清单合并而非替换无需重复写默认项其二disabled_globs控制的是该文件是否参与 edit prediction 及其数据收集绝对路径 glob以/开头会对文件本地绝对路径匹配用于排除特定机器上的目录。3.4 采集的数据内容与捕获流程在已 opt-in 的开源项目中Zed 可能收集光标附近的代码摘录code excerpts最近的编辑 diff生成的预测内容仓库 URL 与 git revision缓冲区大纲buffer outline与诊断信息diagnostics。这些数据对应的捕获逻辑集中在 data_collection.rs。capture_prediction_contextdata_collection.rs#L28-L101组装出CapturedPredictionContext其字段与文档清单一一对应pub(crate) struct CapturedPredictionContext { pub(crate) repository_url: OptionString, pub(crate) revision: OptionString, pub(crate) uncommitted_diff: OptionString, pub(crate) buffer_diagnostics: Veczeta_prompt::ActiveBufferDiagnostic, pub(crate) editable_context: Veczeta_prompt::RelatedFile, }从源码可以看到几个具体的工程约束未提交 diff 有 64 KiB 上限MAX_UNCOMMITTED_DIFF_SIZEdata_collection.rs#L13先按 hunk 估算总大小超限则整段放弃避免上报巨型 diff光标摘录有语法感知compute_cursor_excerpt配合 Tree-sitter 语法范围计算摘录边界data_collection.rs#L204-L237并使用zeta_prompt中的CURSOR_POSITION_MARKER标注光标位置诊断信息限定在活跃缓冲区zeta::active_buffer_diagnostics只收集当前缓冲区、以光标行为中心的诊断。采集到的数据同样存储在 Snowflake 中Zed 定期从中挑选训练样本入数据集的数据经过匿名化剔除访问令牌、用户 ID、邮箱等敏感信息。3.5 训练数据集与模型产出Zed 使用上述训练数据集微调Qwen2.5-Coder-7B基座模型并在 Hugging Face 上以zed-industries/zeta数据集与zed-industries/zeta模型公开发布训练数据与模型权重。这意味着训练数据路径是完全透明、可审计的你可以在 Hugging Face 上查看进入模型训练的具体样本来源。四、企业版管控Zed Business 的默认关闭策略在 Zed Business 上数据共享默认关闭且由组织管理员统一控制。管理员可以阻止成员提交 agent 线程反馈也可以阻止成员 opt-in Edit Prediction 训练数据收集。相关说明见 Privacy for Business 与 Admin Controls 的 contenteditable="false">【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表