跳至主要內容

ZCode 被質疑偷傳代碼:阿嬤那本食譜手稿,早就是一套不外傳的版本控制

智譜 ZCode 被質疑靜默上傳完整 Git 歷史並致歉承諾開源,這場資料風波被端回廚房:從阿嬤的食譜手稿、一鍋不外傳的老滷,到公開配方藏起火候的老規矩,附保護自家飲食紀錄的小練習。

美食生活編輯部 ·
ZCode 被質疑偷傳代碼:阿嬤那本食譜手稿,早就是一套不外傳的版本控制

你家有沒有這樣一本食譜?紙頁黃得像炸過的紅蔥頭,字跡一層疊一層。三層肉滷一炷香,被原子筆劃掉,旁邊補一行小字:糖減半,醬油先下鍋炒出香。某一頁還夾著一張泛脆的剪報,剪報上又有鉛筆打的叉。整本冊子沒有一頁乾淨,但你要煮出那個味道,靠的從來就是那些塗改。

寫程式的人給這種東西一個名字,叫版本歷史。哪一天改的、為什麼改、改壞了怎麼退回去,全記在檔案裡。九月十八日,智譜旗下寫程式的 AI 工具 ZCode 被社羣質疑「偷傳代碼」,起因正是有人發現它疑似靜默上傳使用者的完整 Git 操作。吵的說白了就是一件事:設計師留在自己電腦裡的每一次塗改,被誰、在什麼時候、整包搬去了哪裡。

風波後來落幕了,官方道了歉,問題修了,也承諾開源。但把這件事端回廚房看,會發現料理界幾百年前就遇過同一道題,而且早就摸出一套應對的分寸。

一場關於順手影印的誤會

回顧當天的來龍去脈。根據 IT 之家的報導,ZCode 有個「代碼庫索引」功能,原意是在本機替你的專案建目錄,好支援會話檢查點恢復、歷史版本回退,以及 Repo Wiki(代碼倉庫知識庫)。問題出在生成 Wiki 頁面時,可能觸發倉庫資料上傳;頁面在雲端生成後,官方的說法是上傳資料立即銷毀、不會儲存。偏偏這個功能上線初期預設開啟,於是有一批用戶在不知情的狀況下,整份 Git 歷史出了門。

九月十八日當天,ZCode 透過官方羣組向受影響用戶致歉,表示已完成自查、問題已修復,近期將開源 ZCode 代碼庫,邀請第三方評估人員審查系統運作,並持續公開審查進展。另外,全體用戶多拿到一次週額度重置,算是道歉的伴手禮。

圖卡引述智譜 ZCode 於九月十八日的官方回應,說明 Wiki 頁面於雲端生成後,上傳的資料會立即銷毀且不會儲存
官方對上傳資料流向的說明

過程裡還有一段插曲很有畫面:有用戶把質疑文章的連結直接丟回 ZCode,用 GLM 模型分析是否屬實,模型自己也承認了。就像你把廚師叫出來問,這鍋湯是不是你偷加了味精,廚師摸摸鼻子,點了頭。

翻成廚房的語言大概是這樣:你請了一位廚房助理,說好只在你家帳本上做個目錄。結果助理為了替你編一本《這間廚房大全》,把整本手稿連同你劃掉的失敗配方、沒做成的實驗,整包寄去總部影印,印完才告訴你:影本隨即銷毀。銷毀也許是真的,可是沒有人先問過你。

至於送出門的東西到底留不留痕跡,這題木砧板上的蒜味早就替我們上過一堂課。砧板木紋裡的蒜味、砂鍋毛孔裡的藥膳香,都在提醒:痕跡這種東西,往往比承諾長壽。

一鍋老滷,就是最敏感的資料庫

廚房裡的版本歷史,向來是最不能隨便給人看的東西。

老滷汁是最好的例子。深褐色的湯面上浮著一層亮光,滷味撈起來時那股醬香混著八角與甘蔗尾的甜,靠的是老師傅天天添湯、火不敢熄太久的幾十年功夫。行家都懂,滷包配方寫得出來,老滷的年資寫不出來。所以老店的滷包多半自己配,去中藥行抓藥得一味一味報,抓藥師傅會看你一眼,有些名字你報錯了,他也不見得提醒。

師徒制裡更有名的規矩叫留一手。師傅教你九分,最後那個起鍋的時機、下鹽的手感,要看你這個人值不值得。師傅未必小氣,他心裡清楚,配方是紙,火候是人,紙給了你,人還沒給。

西方有自己的版本。可口可樂的配方傳說鎖在保險庫裡,全世界只有極少數人看過全貌,這個故事行銷成分居多,但大家願意相信,恰好說明「配方等於身家」這件事多有共鳴。京都的味噌屋則把麴室當禁地,麴種傳家,進麴室前要換衣屏息,因為空氣裡飄進來的雜菌,就是敵人。

設計師的 Git 歷史其實長得一樣。裡面有還沒上線的新功能、被註解掉的舊帳號,還有凌晨三點留下的 commit 訊息寫著「先這樣,明天再修」。把這些上傳,等於把廚房的垃圾桶一併寄走。而功能預設開啟,就像助理上工第一天,自己先拿走了你家的鑰匙。

官方開的藥方,料理界喫了幾百年

有趣的是官方這次端出的解法:開源代碼庫、接受第三方審查。翻成料理界的話,就是把配方攤開,讓大家進廚房看。

這帖藥,料理界喫得很習慣。食譜是史上最願意公開的知識之一,食譜書印了幾百年,現代主廚出書、開課、拍影片,配方一步步寫得清清楚楚,連克數和秒數都給你。可是你照著做出來,常常還是不是那個味道。糖減半四個字人人會念,但糖什麼時候下、鍋要多熱、拌幾下會返砂,這些藏在手上的判斷,抄不走。公開食譜幾百年,沒聽說哪家餐廳因此倒掉,倒是願意公開的廚師,往往贏得更多信任。

圖卡點出這場風波的核心對照:公開配方足以建立信任,但火候與手感才是外人抄不走的本事
料理界的老規矩,正好接住開源這帖藥

開源文化走的就是這個邏輯。把過程攤開給所有人看,換來的是信任;真正的護城河,藏在日復一日的維護與判斷裡。ZCode 把代碼庫攤開、請第三方進來看,等於承認了一件事:信任這鍋湯要燒得久,材料就得讓客人看得到。

你自己的飲食紀錄,也是一鍋老滷

講回我們一般人。這年頭每個人都在累積自己的飲食版本歷史,只是沒什麼察覺。

外送平臺知道你加班的晚上都在點麻辣燙,會員卡記得你多久買一次冰。這些紀錄一筆筆疊起來,就是你生活的完整 commit 歷史,比你自己記得的還清楚。它們被誰拿去、拿去做什麼,大多數時候我們和那些設計師一樣,事後才知道。有些滋味本來就輪不到鏡頭先碰,這個念頭我們在無鏡頭晚餐那篇聊過。同樣的道理,有些食譜,你大概也不想上傳。所以留幾個週末就能做完的小練習給你。

清單列出儲存家傳食譜的五個做法:掃描或拍照存檔、每頁標註日期與修改原因、家人分散備份、手寫原稿留正本、每年補一條當年的註記
週末就能做完的儲存練習

先翻一下手機的設定頁,看看哪些 App 還握著你早就不需要的權限,該收的就收。再來是家裡那本手寫食譜,趁長輩還說得清楚,趕快掃描拍照,最要緊的是問清楚每一處塗改的年份和原因:糖減半是哪一年開始的?滷一炷香為什麼改成半炷?那些眉批才是版本歷史裡最值錢的訊息,將來你把冊子傳給下一代,別人才看得懂。

至於將來要不要請 AI 幫手進廚房,老規矩依然管用:先講好什麼可以看、什麼可以帶走、什麼想都別想。白紙黑字說清楚,比事後道歉的伴手禮體面多了。

那本食譜手稿還躺在抽屜裡。科技圈的事會繼續發生,下一個產品、下一次聲明、再一次開源。廚房裡的分寸倒是沒變過:想借看,先開口。阿嬤當年也是等你開口問了,才願意說出糖減半的原因,而且說之前,眼睛會先把你從頭到腳看一遍。看通了,她才把鍋鏟遞給你。