個人資料保護

編碼代理程式會把你相當多的資料送到它的模型供應商:它讀過的每個檔案、每一次指令輸出、它看過的資料庫匯出或 CSV 的每一列,都會進入對話。當那些資料含有個人資訊——客戶姓名、電子郵件地址、電話號碼、卡號、街道地址——供應商也會收到它們。

個人資料保護把那些個人資料留在你的 Mac 上。在一個請求出發前往模型供應商之前,主機端的代理伺服器會在其中找出個人資料,並把每個值換成一個逼真的替身:真名換成編出來的名字,真實郵件地址換成 @example.com 的地址,依此類推。回覆回來時,代理伺服器會把真實值放回去。供應商看到的永遠只是替身;代理程式、你的檔案與你的終端機仍然使用真實值運作,而代理程式從不看到替身。

偵測在裝置上以內建的 Rampart 模型執行。不會有任何東西被送到別處去掃描。

本章說明這項功能會換掉什麼、替身如何運作、在哪裡看到它發揮作用,以及它的限制。個人資料保護是按機器設定的(在設定編輯器中即工作區);欄位參考見設定 → 個人資料保護。

開啟它

開啟機器的設定,並在側邊欄的安全性下選擇個人資料保護。

工作區 Web app 編輯器的個人資料保護窗格:說明文字、一個「防護」群組,其中未勾選的主開關「在個人資料送達模型之前將其換成替身」位於五個變灰且已勾選的類別之上,關於原始碼與安全性時間軸的註腳,以及連結「Rampart — National Design Studio, CC BY 4.0」。

這個窗格有一個群組,防護:

設定預設涵蓋範圍
在個人資料送達模型之前將其換成替身關閉主開關。它關閉時,下方各類別會變灰。
人名開啟名字與姓氏。
電子郵件地址與電話號碼開啟電子郵件地址;至少七位數的電話號碼。
卡號、銀行帳號與稅號開啟支付卡號、銀行帳號與匯款路由號碼、稅號。
社會安全號碼、護照、駕照及其他證件開啟美國社會安全號碼與其他政府身分證號。
街道地址(保留城市、州與郵遞區號)開啟街道那一行(門牌號、街道、單位),整段一起替換。

點選儲存。這項設定會在該機器的下一次 AI 請求生效。

群組下方,窗格註明原始碼交由模式規則處理,而每次替換都會計入安全性時間軸,但值本身從不被記錄。Rampart — National Design Studio, CC BY 4.0 連結是偵測模型的出處說明。

注意: 偵測模型隨應用程式一起出貨。在未包含它的建置中,開啟這個開關會提議下載它(約 14 MB);若下載被拒或失敗,開關會自行回到關閉。

什麼會被換掉

偵測結合兩道處理:

  • 模式規則搭配驗證器可精確辨識結構化資料:電子郵件地址、卡號(以 Luhn 演算法檢查)、社會安全號碼等等。
  • Rampart 模型是一個在 Mac 的 CPU 上執行的小型 token 分類器,會在文句與資料中找出非結構化的種類——人名與街道地址。

接著 Bromure 會過濾模型的提議,讓一般的程式碼與產品名稱不被誤認為人:

  • 原始碼只套用模式規則。 程式碼中的名字幾乎總是識別碼,所以程式碼會被排除在模型那一道之外;程式碼中的郵件地址、卡號與社會安全號碼仍然會被替換。
  • 知名產品、公司與工具的名稱(Claude、GitHub、Docker、Postgres…)絕不會被當成人。
  • 城市、州與郵遞區號會保留,看起來像 URL 或 IP 位址的東西也會保留。地址中只有街道那一行會被替換。
  • 一個值絕不跨行,而太短或太像程式碼、不可能是某人資料的片段會被放過。

只有對話的文字會被改動。代理伺服器逐一字串改寫請求,其餘每個位元組都維持代理程式送出時的原樣。模型的思考、簽章與加密內容在任一方向都不會被觸碰,所以供應商的完整性檢查仍然會通過。

替身如何運作

每個替身看起來都像真的,所以模型仍然可以對那些資料進行推理:

種類替身
姓名一個逼真、可發音的名字
電子郵件一個 @example.com 的地址
電話號碼一個與原本相同格式的號碼
卡號一個能通過 Luhn 檢查的測試卡號
社會安全號碼一個位於從未核發的 9xx 區間的號碼

替身在每台機器內保持一致。同一個真實值永遠取得同一個替身——跨回合,也跨應用程式重新啟動——因為每一個都是用該機器專屬的金鑰從那個值導出的。這有兩個意義:

  • 代理程式每回合重送的對話會維持位元組完全相同,所以供應商的提示快取仍然有效。
  • 模型在整段對話中看到的是一位一致的人或客戶,而不是每回合一個新的隨機名字。

每個替身在使用前都會與字典以及所有其他項目比對,這樣在回覆中把它還原時就不會改動到一般詞彙。同時也是日常詞彙的名字(「Will」、「Grace」)只會在它被偵測為人名的地方被替換。

每台機器專屬的金鑰位於 ~/Library/Application Support/BromureAC/pii/<工作區 id>.key(權限 0600)。值與替身的對照表從不寫入磁碟;隨著那些值再次出現,它會在記憶體中重建。

把真實值放回去

隨著回覆以串流回來,代理伺服器會在代理程式看到之前,把每個替身換回它的真實值——在文字中,也在工具呼叫的參數中,所以代理程式寫的檔案或執行的指令拿到的是真實資料。回覆的還原適用於 Anthropic Messages API、OpenAI 的 Chat Completions 與 Responses API,以及 Gemini,無論是串流或整批送出。串流時,代理伺服器會一次保留幾個字元,讓被切在兩個區塊之間的替身仍然能被辨識。

適用範圍

個人資料保護作用於代理程式送往雲端 AI 供應商的請求——即追蹤能擷取本文的那些已知 AI 主機,HuggingFace 除外——而且必須是該請求帶有對話時。它不適用於:

  • 裝置端模型。 由 Mac 自己的推論引擎處理的回合從不離開這台 Mac,因此不會被改寫。
  • 經壓縮的請求本文。 用戶端已把本文壓縮的請求會不經掃描直接通過。

因為替換發生在 Fusion 把問題分發出去之前,所以 Fusion 面板上的其他模型同樣收到替身。

看它發揮作用

每一個有新值被替換的請求,都會在安全性時間軸中加上一列個人資料保護:各類型的計數與目的主機(例如 3 個姓名 · 1 個電話號碼 → api.anthropic.com),判定為已換成替身。這些列只帶計數——值本身從不被記錄。先前回合已替換過、隨歷史一起重送的值不會再被計入。對模型預算而言過大的請求會得到一列判定為部分——已達模型預算;僅套用模式規則,即使什麼都沒被替換也一樣。

總覽分頁的已替換的個人資料磚塊會加總最近 24 小時替換掉的值,而防護表格有一個個人資料保護欄位,顯示哪些機器開啟了這項功能。

限制

  • 這是偵測,不是保證。 這個模型犧牲了一點召回率,換來在程式碼上大幅減少的誤判;不尋常的格式、處於不尋常情境中的名字,或原始碼裡的個人資料,都可能通過。請把它當成大幅降低曝露,而不是「沒有任何個人資料送到供應商」的證明。
  • 非常大的請求有一部分只套用模式。 模型每個請求最多讀取 300,000 個字元的新文字,由新到舊;超出這個預算的部分只會套用模式規則,而安全性時間軸會把該請求記為「部分——已達模型預算;僅套用模式規則」。更早的歷史在先前的回合就已處理過。
  • 只有對話的文字會被改動。 圖片、以二進位資料送出的檔案附件,以及像 id 與模型名稱之類的欄位都不會被掃描。
  • 追蹤紀錄保留真實值。 當追蹤擷取 AI 本文時,儲存的請求是代理程式送出的那一份,儲存的回覆是還原後的那一份,所以兩者都含有真實值——就像每一份追蹤本文一樣,在你的 Mac 上經過加密。供應商收到的替身版本並不會被儲存。