你的產品有上傳照片,就已經在做生物特徵系統
TL;DR
- 只要你的產品有「上傳照片、生成另一張臉」這條路徑,你就已經在做生物特徵系統。功能文案叫它變裝、濾鏡還是玩法,都不改變資料類別。
- 每一個吃圖的上傳端點,上線前要寫死四個答案:預設、範圍、留存、撤回。寫不出來就不該收臉。
- 工程師看到的是 image-to-image,法務看到的是身份材料。兩邊看的是同一支 API。
- 本機推論不是道德姿態,是把「資料會不會出境」變成架構決定,而不是每次都要重新判斷。
- 我們自己有兩條會碰到臉的路徑,其中一條會把圖送進雲端模型。界線與還沒補完的功課都寫在第六節。
濾鏡文案改變不了資料類別
前兩篇談的是使用者那一側:一張臉進了雲端生成模型會發生什麼(第 1 篇),以及條款把這件事寫成什麼(第 2 篇)。這篇換一邊站,對做產品的人說話。
分野在這裡:傳統修圖工具的輸出「還是你」,它調的是同一張臉的像素。生成模型的輸出是「另一個你」,它產生的是一張原本不存在的臉,而且產生過程中,你的臉被完整讀過一次。
這件事在工程視角下是一個 image-to-image 任務。在法務與資料保護視角下,它是身份材料的蒐集與處理。兩邊講的是同一支 API,但只有一邊會被問責。
所以「我們只是做個好玩的變裝功能」這句話,在規格書上沒有效力。分類看的是你的系統實際收了什麼、留了什麼、送去哪裡,不是產品頁上那個動詞。
一張上傳 API 要回答的四個問題
這四個問題不是價值觀清單,是欄位。每個吃圖的端點上線前,答案要寫在文件裡,寫不出來就是還沒設計完。
| 問題 | 差的答案 | 較好的答案 |
|---|---|---|
| 預設 | 訓練或「改善服務」預設開,使用者要自己去找開關 | 預設關;或更乾脆,原圖根本不進可訓練的管線 |
| 範圍 | 原圖照收,EXIF、背景、同框的人一起進來 | 上傳前就裁切、去 EXIF;明講不收他人的臉 |
| 留存 | 圖跟對話綁在一起,刪了對話不一定刪得到檔案 | 原圖與生成物各自有過期時間,而且期限寫得出來 |
| 撤回 | 只能刪聊天紀錄,其他不知道 | 原圖、生成物、衍生權限一併停用;訓練批次做不到的部分,用白話講出來 |
第四欄那句「做不到的部分要講出來」是重點。撤回這件事,多數團隊做得到前半段(刪檔案)而做不到後半段(已經進過訓練的抽不回來)。做不到不是罪,假裝做得到才是。 在說明頁上寫清楚哪一段撤得回、哪一段撤不回,比寫一句模糊的「您可以隨時刪除您的資料」誠實得多,也安全得多。
清單:我們會怎麼看一個「自拍變裝」功能
不講故事,直接列檢查項。拿去對你自己的產品跑一遍:
- 原圖存在哪個儲存體?誰有讀取權限?保留多久?有沒有自動過期?
- 它會不會進訓練或「改善服務」的管線?如果有 opt-out,它管不管已經送出去的?
- 輸出能不能被再拿去訓練?很多團隊守住了輸入,忘了輸出也是一張臉。
- 除了臉,還收了什麼?EXIF、背景裡的門牌與文件、螢幕上的公司資料、證件版面。
- 圖裡如果有第二個人,你怎麼處理?有沒有任何機制,還是完全靠使用者自律?
- 使用者刪帳號的時候,快取、縮圖、CDN 副本、向量索引會不會一起消失?
- 你的條款是不是把權利擔保推回使用者就結束了?如果是,那一段保護的是你,不是他。
- 第三方供應商那一層:你的圖經過誰的 API?他們的留存政策你讀過嗎?
最後一項最容易漏。很多產品自己一行資料都沒留,但把圖原封不動轉發給某個第三方視覺 API,然後在隱私政策裡寫「我們不儲存您的照片」。那句話技術上為真,實質上什麼都沒承諾。
本機不是道德,是架構
我們的做法寫過很多次:需要保密、不該出境的東西走本機 Ollama,資料不離開這台機器。
這不是清高,是把一個每次都要重新判斷的問題,變成一次性的架構決定。當「會不會外流」已經由部署位置回答掉,你就不必在每一個新功能上重新爭論一次,也不會在趕上線的那個星期五做出不一樣的選擇。
實務上的分界大致是這樣:
- 可以走雲端:公開素材、不含人臉與文件的圖、示意圖、已經發布過的內容、去識別過的截圖。
- 該留在本機:正臉原圖、證件、客戶檔案、家戶與辦公空間照片、任何不是你本人的臉。
代價要老實說。本機推論的模型品質通常不如最前緣的雲端模型,而且硬體是你自己的成本。所以這是一個決策,不是一條教條:值不值得,看那份資料外流的後果有多大。後果小的走雲端,後果不可逆的留本機。臉屬於後者,因為它不能重設。
Ultra Lab 自己的紅線
寫別人之前先寫自己,連還沒做到的一起寫。
我們有兩條會碰到臉的路徑,先講送進模型的那條。 MindThread 有「看圖生文」:使用者上傳工作照生成貼文文案,那張圖被轉成 base64 送進 Gemini 做圖片辨識。圖裡如果有人臉,那張臉在那一刻被雲端模型讀過一次。
拿上面四個問題對它跑一遍,答案沒那麼好看:預設就是送出去(這是功能本身);範圍是整張原圖,我們沒有做「圖裡有沒有臉」的檢查;留存在 Firebase Storage,沒有自動到期;撤回目前只能刪貼文,圖不會跟著消失。這條路徑是這篇文章的標準下,我們自己還沒補完的功課。
另一條只存來顯示。 UltraSite 的名片產生器有選填頭像,上傳的圖在瀏覽器端壓成小方圖後存進我們的資料庫,用途只有一個:顯示在你自己那張卡片上。它不進 prompt、不參與生成、不送進任何生成模型。公開介面查那張卡片時回傳的是「有沒有照片」,不是照片本身,取圖要走另一個端點,這是為了不讓爬蟲整批收割。
同樣四個問題:預設不進任何可訓練管線;範圍限縮成一張小方圖;留存跟著那張卡片;撤回刪得掉(Firestore 立即生效,CDN 邊緣快取最多還有五分鐘的失效視窗)。這是我們的答案,不是標準答案,你可以拿去挑。
UltraProbe 的掃描,在未留 email 解鎖完整報告的情況下,預設不保存受測的 system prompt。 但同一套標準要套回自己身上:勾了深度分析,你的 prompt 會被送到 Gemini 做一次性推論,我們自己不落地存檔,卻確實經過了第三方。要完全不經第三方,就只跑不勾深度分析的確定性掃描。這正是上一節那個「我們不儲存您的照片」的坑,我們自己也站在坑邊。
然後是這篇最需要講清楚的一件事。
AASS 裡的 ADP(AI Data Protection)問的是「你有沒有把不該給 AI 的資料給它」。真正跑在已發佈的 ultraprobe 套件裡的,是十類純 regex、二十一條樣式:身分證字號、姓名、電子郵件、手機、地址、生日、信用卡、銀行帳號、API key、內部 IP。
這裡要訂正一件我們自己的事。我們過去在文章裡把統一編號、JWT、密碼、私鑰、資料庫連線字串也列進這份清單。那幾條規則確實寫了,但寫在一支沒有被任何地方引用的檔案裡,等於沒接線。寫了不等於跑著,這是我查自己才發現的。
它偵測不到人臉。 線上掃描器現在做的是 AVS 與 PDS 兩個維度,人臉輸入不在裡面。把「這段輸入裡有沒有一張臉」變成可檢查項,是 ADP 的下一題,不是現有功能。
我在這裡寫清楚,是因為這整個系列的論點就是「不要宣稱你做不到的事」。如果我一邊講這句,一邊讓你以為我們已經掃得到臉,那這三篇就白寫了。
還有:這篇是規格,不是「掃一下就安全」。 上面那四個問題與那份清單,沒有任何一個工具能代替你回答。工具能查的是你有沒有把答案寫進系統,不能替你決定答案該是什麼。
規則最後一條,對我們自己也一樣適用:未來若有功能真的需要臉或證件,必須當成一個新的品類處理,另外取得同意,預設走本機或零留存,禁止當成現有工具裡多出來的一個小選項。
收束
一個產品有沒有在做生物特徵系統,判準不在它怎麼稱呼自己,在它的上傳端點收了什麼。
預設、範圍、留存、撤回。四個問題,四個欄位。它們不難回答,難的是在功能排期壓力下,願意在上線前先回答。
如果這四件事你寫得出來,收臉這個決定至少是被做出來的,不是被默認的。如果寫不出來,那就先不要收。
想知道自己的應用在 AI 面前長什麼樣子,UltraProbe 可以掃給你看,但記得它的作用域:它查的是你有沒有把答案寫進系統,不是替你把答案想出來。
延伸閱讀
- 本系列第 1 篇:你以為在問 ChatGPT 長什麼樣子,系統在收一張生物憑證
- 本系列第 2 篇:ChatGPT 條款把臉寫成「內容」
- 我們定義了 AI 時代的安全標準:AASS v1.0
- 我們怎麼證明自己真的在做 AI?
常見問題
怎麼判斷我的產品算不算生物特徵系統?
看上傳端點實際收了什麼,不是看產品頁上的動詞。只要有使用者上傳人臉照片這條路徑,資料類別就是身份材料。工程視角下它是一個 image-to-image 任務,資料保護視角下它是身份材料的蒐集與處理,兩邊講的是同一支 API。
上線前該回答哪四個問題?
預設(訓練或改善服務是不是預設開)、範圍(收整張原圖還是裁切去 EXIF)、留存(原圖與生成物各自多久過期)、撤回(能不能一併停用,以及哪一段撤不回來)。四個答案要寫在文件裡,寫不出來就是還沒設計完。
撤回做不到的部分要怎麼處理?
照實寫出來。多數團隊做得到刪檔案,做不到把已經進過訓練批次的抽回。在說明頁寫清楚哪一段撤得回、哪一段撤不回,比寫一句模糊的「您可以隨時刪除您的資料」誠實得多,也安全得多。做不到不是罪,假裝做得到才是。
哪些影像工作該留在本機?
正臉原圖、證件、客戶檔案、家戶與辦公空間照片、任何不是你本人的臉。公開素材、不含人臉與文件的圖、去識別過的截圖可以走雲端。本機推論的代價是模型品質與硬體成本,所以這是決策不是教條:後果不可逆的留本機,臉屬於後者。
UltraProbe 的 ADP 可以掃出使用者上傳的人臉嗎?
不行。目前真正跑在已發佈套件裡的是十類純 regex、二十一條樣式的 PII 偵測(身分證、姓名、電子郵件、手機、地址、生日、信用卡、銀行帳號、API key、內部 IP),線上掃描器做的是 AVS 與 PDS 兩個維度。把「這段輸入裡有沒有一張臉」變成可檢查項是下一題,不是現有功能。