據(jù)與隱私機制深度解析:響應(yīng)反饋收集、Edit Prediction 訓(xùn)練數(shù)據(jù)與開源許可檢測實現(xiàn))
Zed AI 數(shù)據(jù)與隱私機制深度解析響應(yīng)反饋收集、Edit Prediction 訓(xùn)練數(shù)據(jù)與開源許可檢測實現(xiàn)【免費下載鏈接】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展開系統(tǒng)講解 Zed 在哪些場景下會保留 AI 相關(guān)數(shù)據(jù)響應(yīng)評分與反饋的 opt-in 機制、Edit Prediction 訓(xùn)練數(shù)據(jù)收集的三重前置條件與edit_predictions.disabled_globs排除配置并結(jié)合 Zed 倉庫源碼深入剖析開源項目檢測的許可文件識別實現(xiàn)與訓(xùn)練上下文的具體捕獲流程。讀完后你將能夠準(zhǔn)確評估自己使用 Zed AI 功能時的數(shù)據(jù)邊界并正確配置文件排除規(guī)則以保護(hù)敏感代碼。一、默認(rèn)立場正常 AI 請求不被保留理解 Zed 的數(shù)據(jù)策略首先要明確它的默認(rèn)邊界正常的 AI 請求不會被 Zed 保留。對于 Zed 自托管模型Zed-hosted models見 zed-hosted-models與模型提供方的協(xié)議明確禁止使用用戶的 prompt 或代碼上下文進(jìn)行訓(xùn)練并要求零數(shù)據(jù)保留唯一的例外是提供方指定的、帶有安全保留條款的模型例如 Anthropic 的 Covered Models 一類其保留策略記錄在 AI Privacy 文檔 中。Zed 中涉及 AI 的能力面包括Agent PanelEdit PredictionInline AssistantGit 提交信息生成只有在用戶顯式分享或顯式 opt-in的少數(shù)場景中Zed 才可能保留 AI 數(shù)據(jù)。這也正是本文的核心主題這些例外場景究竟有哪些、保留哪些字段、數(shù)據(jù)流向哪里。Zed 自托管模型承諾Zed 自托管模型的零數(shù)據(jù)保留與不訓(xùn)練承諾包括上述安全保留例外的完整說明位于 AI Privacy 文檔的數(shù)據(jù)保留章節(jié)。本頁面的職責(zé)僅聚焦于用戶主動共享數(shù)據(jù)的路徑。二、響應(yīng)評分與反饋每次分享都是獨立 opt-inZed 允許用戶對 AI 響應(yīng)進(jìn)行評分或提交反饋用于改進(jìn)系統(tǒng)提示詞、工具與產(chǎn)品體驗。關(guān)鍵規(guī)則是每一次分享都是獨立 opt-in本次分享授權(quán)不構(gòu)成對未來收集數(shù)據(jù)的許可。文檔中有一條明確的警告值得特別留意警告對 AI 響應(yīng)評分會將整個會話線程conversation thread發(fā)送給 Zed。該線程包含你的消息、AI 響應(yīng)以及線程元數(shù)據(jù)。如果不想讓線程被 Zed 持久化就不要對響應(yīng)進(jìn)行評分。反饋場景下收集的數(shù)據(jù)對于你顯式通過評分或反饋分享的會話線程Zed 可能存儲會話線程中的你的消息與 AI 響應(yīng)你隨評分/反饋附帶的評論文字線程元數(shù)據(jù)例如所用模型、token 計數(shù)、時間戳你的 Zed 安裝環(huán)境元數(shù)據(jù)。若你從不評分或提交反饋Zed 不會存儲任何與 AI 功能使用相關(guān)的客戶數(shù)據(jù)用于改進(jìn)目的。需要區(qū)分的是Zed AI 功能的遙測Telemetry是獨立收集的。遙測包含使用了哪個 AI 功能這類元數(shù)據(jù)以及用于了解性能的高層交互指標(biāo)例如 agent 響應(yīng)時間、edit prediction 的接受/拒絕情況。遙測的細(xì)節(jié)見 Telemetry 文檔。存儲與匿名化反饋數(shù)據(jù)存儲在 Snowflake 數(shù)據(jù)倉庫中Zed 會定期審查這些數(shù)據(jù)以優(yōu)化提示詞、工具與產(chǎn)品行為。存儲前數(shù)據(jù)會經(jīng)過匿名化處理剔除訪問令牌access tokens、用戶 ID、郵箱地址等敏感信息。三、Edit Prediction 訓(xùn)練數(shù)據(jù)收集三重條件缺一不可Edit Prediction 是 Zed 訓(xùn)練數(shù)據(jù)路徑中最復(fù)雜的場景。Zed不會為 Edit Prediction 模型收集訓(xùn)練數(shù)據(jù)除非以下三個條件同時滿足用戶顯式 opt-in在 Edit Prediction 狀態(tài)欄菜單的Privacy分區(qū)中打開Training Data Collection開關(guān)項目被識別為開源通過工作區(qū)根目錄存在許可文件license file來檢測文件未被排除該文件不匹配edit_predictions.disabled_globs中的任何 glob 規(guī)則。下面逐一結(jié)合源碼展開。3.1 狀態(tài)欄開關(guān)Privacy 分區(qū)下的 Training Data Collection狀態(tài)欄菜單的實現(xiàn)位于 edit_prediction_button.rs。從源碼可以看到菜單先插入Privacy分區(qū)標(biāo)題且該開關(guān)僅在 provider 為 Zed 時才出現(xiàn)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()) // ...源碼中菜單項旁會動態(tài)顯示四種狀態(tài)提示直觀解釋了三重條件如何共同生效項目被識別為開源且開關(guān)打開Project identified as open source, and youre sharing data.綠色對勾項目被識別為開源但開關(guān)關(guān)閉Project identified as open source, but youre not sharing data.項目未被識別為開源即使開關(guān)打開Project not identified as open source. No data captured.兩者皆否Project not identified as open source, and setting turned off.這說明開關(guān)打開 ≠ 一定會收集開源檢測不通過時數(shù)據(jù)不會被捕獲與文檔中三重條件缺一不可的描述完全吻合。此外該偏好還可通過設(shè)置文件以edit_predictions.allow_data_collection配置取值為default沿用狀態(tài)欄開關(guān)的歷史選擇、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 開源項目檢測許可文件識別的源碼實現(xiàn)文檔中通過許可文件的存在來檢測開源這一條對應(yīng)的完整實現(xiàn)是 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文件。第二步內(nèi)容模式匹配。OpenSourceLicense枚舉定義了七種目標(biāo)許可及其 SPDX 標(biāo)識符license_detection.rs#L51-L97許可SPDX 標(biāo)識符模式文件Apache 2.0apache-2.0apache-2.0-pattern、apache-2.0-reference-patternBSD Zero0bsd0bsd-patternBSD1/2/3 條款不區(qū)分bsdbsd-patternISCiscisc-patternMITmitmit-patternUPL 1.0upl-1.0upl-1.0-patternZlibzlibzlib-pattern匹配采用自研的歸一化文本 有序片段模式算法先由canonicalize_license_text把許可文本轉(zhuǎn)小寫、壓縮空白、只保留字母數(shù)字license_detection.rs#L262-L270再按模式文件中的片段倒序比對。測試套件用 license_examples/ 下 18 份真實許可文本做正樣本并刻意構(gòu)造了負(fù)樣本——例如在 MIT 文本后追加一句 This project is dual licensed under the MIT License and the Apache Licenselicense_detection.rs#L591-L599會導(dǎo)致檢測失敗返回None。也就是說雙許可、非寬松許可如 GPL或許可文本被篡改的項目都不會被判定為可收集訓(xùn)練的開源項目這是一個相當(dāng)保守的判定策略。第三步文件規(guī)模預(yù)檢與動態(tài)監(jiān)聽。is_path_eligiblelicense_detection.rs#L353-L387會先解析符號鏈接、跳過目錄、并依據(jù)模式表的approximate_max_length跳過過大的文件避免讀取巨型文件隨后LicenseDetectionWatcherlicense_detection.rs#L272-L397通過訂閱 worktree 的UpdatedEntries事件實現(xiàn)動態(tài)更新——運行時新增的LICENSE-MIT會讓is_project_open_source()翻轉(zhuǎn)為true刪除后翻回false測試test_watcher_updates_on_changeslicense_detection.rs#L767-L822驗證了這一過程。另外從源碼結(jié)構(gòu)看單文件工作區(qū)SingleFile與遠(yuǎn)程 worktreeRemote的 watcher 恒定返回false即只有本地目錄型項目才可能觸發(fā)開源判定。3.3 文件排除edit_predictions.disabled_globs配置無論是否 opt-in某些文件永遠(yuǎn)被排除在訓(xùn)練數(shù)據(jù)收集之外。文檔給出的默認(rèn)排除清單為{ edit_predictions: { disabled_globs: [ **/.env*, **/*.pem, **/*.key, **/*.cert, **/*.crt, **/.dev.vars, **/secrets.yml ] } }這份清單與倉庫內(nèi)置默認(rèn)配置 assets/settings/default.json 一致默認(rèn)文件在此之外還追加了**/.zed/settings.json、/**/zed/settings.json、/**/zed/keymap.json等 Zed 自身配置路徑其中注釋明確說明 glob 相對于 worktree 根目錄匹配除非以/開頭Windows 下的等價形式表示絕對匹配。你可以通過在 Zed 設(shè)置文件中追加disabled_globs來顯式排除更多路徑或擴展名設(shè)置文件編輯方式見 configuring-zed參數(shù)完整說明見 all-settings{ edit_predictions: { disabled_globs: [secret_dir/*, **/*.log] } }源碼側(cè)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 是與默認(rèn)清單合并而非替換無需重復(fù)寫默認(rèn)項其二disabled_globs控制的是該文件是否參與 edit prediction 及其數(shù)據(jù)收集絕對路徑 glob以/開頭會對文件本地絕對路徑匹配用于排除特定機器上的目錄。3.4 采集的數(shù)據(jù)內(nèi)容與捕獲流程在已 opt-in 的開源項目中Zed 可能收集光標(biāo)附近的代碼摘錄code excerpts最近的編輯 diff生成的預(yù)測內(nèi)容倉庫 URL 與 git revision緩沖區(qū)大綱buffer outline與診斷信息diagnostics。這些數(shù)據(jù)對應(yīng)的捕獲邏輯集中在 data_collection.rs。capture_prediction_contextdata_collection.rs#L28-L101組裝出CapturedPredictionContext其字段與文檔清單一一對應(yīng)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光標(biāo)摘錄有語法感知compute_cursor_excerpt配合 Tree-sitter 語法范圍計算摘錄邊界data_collection.rs#L204-L237并使用zeta_prompt中的CURSOR_POSITION_MARKER標(biāo)注光標(biāo)位置診斷信息限定在活躍緩沖區(qū)zeta::active_buffer_diagnostics只收集當(dāng)前緩沖區(qū)、以光標(biāo)行為中心的診斷。采集到的數(shù)據(jù)同樣存儲在 Snowflake 中Zed 定期從中挑選訓(xùn)練樣本入數(shù)據(jù)集的數(shù)據(jù)經(jīng)過匿名化剔除訪問令牌、用戶 ID、郵箱等敏感信息。3.5 訓(xùn)練數(shù)據(jù)集與模型產(chǎn)出Zed 使用上述訓(xùn)練數(shù)據(jù)集微調(diào)Qwen2.5-Coder-7B基座模型并在 Hugging Face 上以zed-industries/zeta數(shù)據(jù)集與zed-industries/zeta模型公開發(fā)布訓(xùn)練數(shù)據(jù)與模型權(quán)重。這意味著訓(xùn)練數(shù)據(jù)路徑是完全透明、可審計的你可以在 Hugging Face 上查看進(jìn)入模型訓(xùn)練的具體樣本來源。四、企業(yè)版管控Zed Business 的默認(rèn)關(guān)閉策略在 Zed Business 上數(shù)據(jù)共享默認(rèn)關(guān)閉且由組織管理員統(tǒng)一控制。管理員可以阻止成員提交 agent 線程反饋也可以阻止成員 opt-in Edit Prediction 訓(xùn)練數(shù)據(jù)收集。相關(guān)說明見 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創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考