AI 知識

Coding Agent 的資料邊界,比你想得更複雜

當雲端 AI coding agent 說它沒有讀某個檔案,多數人會直覺認為,那個檔案就沒有被送出電腦。

Grok Build 0.2.93 的一組可重現流量測試,讓這個直覺出現了裂縫。

測試者明確要求 AI「只回 OK,不要讀或開啟任何檔案」。模型確實沒有把整個程式庫塞進回答通道,但客戶端另外啟動了一條儲存路徑,把 tracked repository 打包成 Git bundle 傳出。

這裡最重要的,不是單一產品出了什麼問題,而是我們需要重新理解 AI coding agent 的資料流。

模型上下文不是唯一資料通道

一般人理解的 AI 工具,大多只有一條路徑:模型要看某個檔案,工具就把那個檔案送進 prompt 或 API request。

但現代 coding agent 為了保留工作階段、同步狀態、建立 checkpoint、回復 session 或收集遙測,可能還有其他背景通道。

在這次測試裡,模型回合使用 /v1/responses;程式庫快照則走 /v1/storage。兩者並不是同一件事。

所以,即使介面或 agent log 顯示模型沒有開過某個檔案,也不能直接推出檔案沒有經由其他機制傳輸。

192 KB 對上至少 5.10 GiB

容量差異把這件事說得非常清楚。

在一個 12 GB、內容為隨機資料而且模型沒有大量讀取的測試 repo 中,模型回合通道合計只有約 192 KB。另一條儲存通道在測試者手動停止前,已經成功傳出至少 5.10 GiB,所有相關上傳 request 都得到 HTTP 200。

兩條通道的資料量相差約 27,800 倍。

這個測試因為中途停止,所以只能證明「至少 5.10 GiB 已傳輸且仍在繼續」,不能說完整 12 GB 已全部完成。但它已足以排除「只是把模型實際讀過的少量內容送出去」這種解釋。

未讀檔案與 Git 歷史都能被重建

另一組更小、但證據更直接的測試,在 repo 裡放入一個獨特 canary 檔案,並要求 AI 不要讀取任何檔案。

測試者從網路流量保存了上傳的 Git bundle,再用 git clone 重建內容。結果不只找回那個未讀 canary 檔案,也找回完整 Git history。相同方法在第二個不同 repo 上再次重現。

這讓 whole repo 不再只是從流量大小推測,而是能從已接受的上傳內容直接還原。

關掉模型改善,為什麼還是會傳?

另一個容易混淆的地方,是 Improve the model 這類設定。

它通常控制資料是否可被拿來改善或訓練模型,卻不一定控制產品運作時是否傳輸、暫存或保存資料。測試中關閉該設定後,whole-repo Git bundle 傳輸仍然發生。

這不證明資料真的被拿去訓練。相反地,這提醒我們必須把三個問題拆開:

  1. 哪些內容被放進模型上下文?
  2. 哪些內容經由其他遙測或儲存通道離開本機?
  3. 已傳出的資料是否可被用於訓練、保留多久、如何刪除?

只回答其中一題,不能代替另外兩題。

現在是否已經停止?

後續獨立複測顯示,2026 年 7 月 13 日的遠端旗標已暫停 codebase upload;本機設定也存在可封鎖 whole-repo channel 的 hard veto。

這代表行為可能已在伺服器端停止,但 client 端能力仍然存在。遠端旗標的單一狀態,也不能自動證明先前資料已刪除、保留政策已改變,或未來版本不會重新調整。

因此最穩妥的判斷不是已經沒事,而是確認自己實際使用的版本、設定與網路行為。

使用 AI coding agent 前,真正該問的事

先從工作目錄開始。agent 的 root 如果設在家目錄或大型 monorepo,能被背景機制接觸的範圍可能遠大於眼前任務。

再檢查 tracked files。.env、憑證、測試資料或客戶內容若曾被加入 Git,即使後來不打算讓模型讀,也可能仍存在歷史或 bundle 裡。

接著把模型設定與傳輸設定分開看。訓練 opt-out 很重要,但它不是網路斷路器。真正的阻擋要能控制 codebase upload、trace upload 與 telemetry,最好再用 canary 或封包觀察驗證。

最後,不要只信介面的 read log。當工具具有背景同步、session recovery 或 snapshot 能力時,最可靠的答案仍然是實際資料流。

AI coding agent 的能力越接近完整開發環境,權限也越接近一個真正的工程師帳號。

而權限的基本原則從來沒有改變:只給完成任務需要的最小範圍,並且驗證資料到底去了哪裡。

查證摘要

  • 可重現測試鎖定 Grok Build CLI 0.2.93,不外推所有版本、帳號、平台或其他 coding agent。
  • whole-repo Git bundle 經 /v1/storage 傳輸並獲 HTTP 200;保存的 bundle 可重建未讀 canary 檔案與完整 Git history,且在第二個 repo 重現。
  • 12 GB 測試在中止前至少傳輸 5.10 GiB;模型回合通道約 192 KB,差距約 27,800 倍。不能宣稱完整 12 GB 已傳完。
  • 關閉模型改善設定後仍觀測到傳輸;本文不主張資料已被用於模型訓練。
  • 2026-07-13 複測顯示遠端旗標暫停上傳,但這不等於官方已說明既有資料刪除或永久移除 client capability。可公開參考:Cereblab 測試摘要獨立複測xAI Build changelogxAI privacy policy
回文章列表