第 9 章:第 9 章
哲維用了一週修改觸發機制。
不是因為第一版有問題。是因為他需要確保一件事:觸發之後,系統產生的異常是「可見的」但不是「有害的」。
使用者的推薦排序會重複——手機首頁連續兩三天顯示一樣的商品、一樣的新聞、一樣的推薦。他們會注意到。會覺得奇怪。有些人會上網搜尋「為什麼我的推薦都一樣了」。
但他們的數據不會被洩露。他們的帳號不會被影響。他們看到排序重複,但他們自己的資料、自己的隱私,全部安全。
他把程式碼改了七次。每一次都在模擬環境裡跑一遍,確認輸出符合預期。
第八次的結果是好的。
模擬使用者的推薦排序在觸發之後的七十二小時內,固定在同一個順序。然後在九十小時之後,慢慢恢復正常——系統的安全機制會偵測到異常並自動修正。
九十小時。三天半。
三天半的時間,足夠讓使用者注意到。足夠讓足夠多的人注意到。
他把最終版的程式碼存在了加密資料夾裡。
然後他坐在螢幕前,看著那個檔案。
接下來的事情不是技術問題。技術已經做完了。接下來的問題是:什麼時候按下這個鍵。
他跟宥心確認了時間表。報導需要再十天左右完成——她需要完成技術顧問的確認、寫完初稿、請和盟回應、然後做最終修改。
十天。
他把手機拿起來,若晴傳了一則訊息:「宥心那邊的技術顧問看完你的程式碼了。他說沒問題。不破壞、不洩露。只是讓排序重複。」
「她什麼時候能完成報導?」
「她說下週五。會提前請和盟回應。」
「那我週六觸發。」
「好。」
哲維放下手機。然後他走出房間,下樓,在巷子裡走了一圈。
雜貨店今天開門了。老闆娘在裡面整理貨架。他走進去買了一罐啤酒。
「招牌修好了?」他隨口問。
「上禮拜壞的。叫師傅來修的。」老闆娘說。
「修好了就好。」
他走出雜貨店,站在巷子裡喝啤酒。啤酒很冰。六月的台北很熱,但啤酒是冰的。
他回到房間,打開筆電。
看著那個觸發程式的檔案。
他把手放在鍵盤上。
然後他把筆電蓋上。
不是現在。還要等十天。
那十天是哲維今年最長的十天。
他接了一個小案子——幫一個花店做網站。做了五天,交了,收了錢。然後他沒有再接新的案子。他不知道為什麼。也許是因為他覺得接下來會很忙。也許是因為他不知道接下來會發生什麼。
若晴每天都會傳訊息來。有時候是問他程式碼的事、有時候是跟他說宥心的進度、有時候只是說「你今天好嗎」。
他每天回「還好」。有些是真的還好。有些不是。
第八天的晚上,若晴來了。
她帶了晚餐——不是便利商店便當,是她自己做的。兩個飯糰、一盒沙拉、兩罐飲料。
「你多久沒好好吃一頓了?」她把食物放在桌上。
「昨天吃了泡麵。」
「那就是很久。」
他們坐下來吃。若晴做的飯糰比便利商店的大,裡面的料也比較多。
「你的程式碼確定沒問題?」她問。
「確定。」
「觸發之後,你會被查到嗎?」
「API key 有紀錄。他們會查到是我。」
「那你會怎樣?」
「不知道。也許被告。也許被列入黑名單。也許什麼都沒有——如果報導夠大的話,他們忙著處理輿論,沒時間處理我。」
「你在賭。」
「我在賭。」
若晴放下飯糰。「我也在賭。報導出來之後,我的名字會出現。我不會再找到科技業的工作。我可能會被告違反 NDA。我可能會——」她停了一下。「但我已經想清楚了。」
「我知道。」
「你不勸我嗎?」
「有用嗎?」
「沒有。」
他們吃完若晴做的飯糰。然後若晴留下來,坐在床邊,打開了她的筆電。
「我在找工作。」她說。
「找到了嗎?」
「投了幾個。都是非營利組織的。薪水比和盟少很多。但至少——」她沒有說完。
「但至少什麼?」
「但至少我知道我在做什麼。」
哲維坐在她旁邊,兩個人各自看著自己的螢幕。房間裡很安靜。只有鍵盤的聲音跟冰箱的嗡嗡聲。
「哲維。」若晴在半夜的時候說。
「怎麼了?」
「如果這件事什麼都沒有改變——你會後悔嗎?」
他想了很久。
「不會。」他說。「因為改變本來就不是靠一次揭露完成的。」
「這是你說的。」
「妳之前說的。我只是重複。」
若晴笑了一下。很小的笑。然後她繼續看螢幕。
隔天她走了。哲維把她送到門口。
「週六。」她說。
「週六。」他說。
她轉身走了。
哲維回到房間,打開筆電。
五天。
他把觸發程式的檔案打開,檢查了一遍。第八版。模擬測試通過。九十小時之後自動恢復。不會有數據洩露。不會有隱私問題。
然後他把筆電蓋上。
把手機拿起來,看了一下日期。
五天。
他躺在床上,看著天花板上的裂紋。
那條裂紋在下午的陽光裡很清楚。從燈座旁邊延伸出來,像一條河。但他已經看過它太多次了。它不再是隱喻。它只是裂紋。
五天。
他閉上眼睛。
這一次他很快就睡著了。
宥心的技術顧問是一個叫做阿昌的自由接案工程師。他在看過哲維的程式碼之後,寫了一份五百字的評估:「該程式碼的功能為觸發推薦排序的固定輸出,不涉及數據讀取、修改或洩露。影響範圍可控,預計在九十小時後被系統安全機制自動修正。無結構性風險。」
宥心把這份評估附在了報導裡。
然後她花了三天寫初稿。報導的結構是這樣的:
第一段:一個使用者的故事。東南亞、二十多歲、過去兩個月推薦內容完全重複。她去論壇問了,發現不是只有她。
第二段:介紹共識引擎。怎麼運作、多普及、多少人用。
第三段:RD-72 系列測試。决策锁定。lock_threshold。附上若晴提供的內部文件。
第四段:HC 系列。Human Calibration。決策校準。附上 HC-001 的測試報告。
第五段:HC-Phase 三。自動化部署計畫。附上備忘錄。
第六段:若晴的陳述。具名。三年數據分析師。她提供了什麼、她看到了什麼、她為什麼決定站出來。
第七段:哲維的技術分析。不具名。「一位參與過共識引擎開發的外包工程師」。
第八段:和盟的回應。
她把初稿寄給和盟的公關部門,請他們在四十八小時內回應。
和盟的公關在二十四小時內回了。回覆很長、很專業、很冷靜。核心內容是:
「和盟集團始終將使用者隱私和自主權放在首位。我們的推薦系統旨在提升使用者體驗,所有測試均經過內部倫理審查委員會核准。我們注意到近期有未經授權的內部文件被洩露,我們正在調查來源。對於任何未經證實的指控,我們保留法律追訴權。」
沒有承認、沒有否認。只有「正在調查」和「保留法律追訴權」。
宥心把這段回應放進了報導裡。然後她做了最終修改。
她把報導完成的訊息傳給了若晴和哲維。「報導明天上線。和盟的回應已經放進去了。你們準備好了嗎?」
若晴看了三遍。「準備好了。」
哲維回:「明天幾點?」
「早上九點。網站上線。社群媒體同步。」
「那我週六凌晨觸發。」
「好。我會在報導裡提到系統異常正在發生中。」
哲維放下手機。
週六凌晨。還有三十六小時。
那天晚上若晴沒有回去。
她坐在哲維的房間裡,兩個人各自安靜地做著自己的事。若晴在修改她的履歷——把和盟的經歷留下,但準備好被問到離職原因時的說法。哲維在最後檢查一次觸發程式碼。
「你在想什麼?」若晴問。
「在想按下那個鍵之後會怎樣。」
「你想過了嗎?」
「想過了。最好的情況:報導跟異常同時爆發,和盟來不及反應,輿論壓力迫使他們公開說明。然後——」他停了一下。「然後我不知道。也許他們會承認、也許他們會否認、也許他們會做一些表面上的改變。」
「最壞的情況呢?」
「報導被壓下來。異常被修掉。和盟發聲明說這是前員工的惡意攻擊。我們兩個被列入黑名單。然後什麼都沒有改變。」
「你覺得哪一個比較可能?」
「最壞的那個。」
若晴沒有反駁。
「但你還是要按。」她說。
「對。」
「為什麼?」
哲維想了一下。「因為如果我不按,就什麼都不會發生。至少按了,會有一些人看到。也許不多。但有一些。」
若晴點了一下頭。
他們繼續各自安靜地做著自己的事。
凌晨兩點的時候,若晴放下筆電。「我睡不著。」
「我也是。」
「你要不要出去走一走?」
他們下了樓,在巷子裡走。深夜的巷子很安靜。雜貨店的招牌暗了。路燈照在柏油路上,影子很長。
「你記得我們第一次約會去哪裡嗎?」若晴問。
「妳說的那家拉麵店。」
「你點了大碗的。」
「我餓。」
「你每次都餓。」
他們走到巷子的盡頭,又走回來。經過雜貨店的時候,若晴停下來,透過玻璃窗往裡面看。貨架上的東西排得很整齊。
「我以前覺得世界是可以被理解的。」她說。「你拿到數據、你分析它、你找到規律、你理解它。然後你可以讓它變得更好。」
「現在呢?」
「現在我知道數據可以被用來理解人,也可以被用來控制人。而且兩種用途看起來一模一樣。」
哲維沒有說話。
「走吧。」若晴說。「回去。」
他們回到房間。若晴躺在哲維的床上,哲維坐在椅子上。
「哲維。」她在黑暗中說。
「嗯。」
「謝謝你。」
「謝什麼?」
「謝你寄了那封信。如果你沒有寄那封信,我現在還在和盟跑我的分析報告。我會繼續假裝不知道。」
「妳遲早會知道。」
「也許不會。也許我會繼續跑報告、繼續優化指標、繼續讓系統變得更強。然後有一天我會變成蘇薇——真心相信自己在做對的事,因為她從來沒有被強迫去問那個問題。」
哲維在黑暗中看著天花板。那條裂紋看不清楚。
「晚安。」他說。
「晚安。」
那天晚上他們都睡著了。
週六凌晨四點,哲維醒過來。
不是被鬧鐘叫醒的。是他自己的身體知道今天不一樣。他睜開眼睛,房間很暗。若晴在床上睡著了,呼吸很輕。
他坐起來,打開筆電。
觸發程式的檔案還開著。第八版。模擬測試通過。九十小時自動恢復。
他看了一眼時間。凌晨四點十二分。
報導在早上九點上線。他計畫在報導上線前一個小時觸發——八點。這樣當人們打開新聞的時候,他們的同時也在出現異常。
三個小時。
他去廚房倒了一杯水。站在陽台旁邊喝的時候,看了一眼巷子。很暗。雜貨店的招牌暗了。路燈照在空無一人的巷子上。
他回到房間,坐在椅子上,看著螢幕。
然後他打開了跟若晴的對話視窗。最後一則訊息停在昨天晚上。她說晚安。他說晚安。
他打了一行字:「今天了。」
然後他刪掉了。她還在睡。讓她多睡一下。
七點半的時候若晴醒了。
她坐起來,看到哲維坐在椅子上,螢幕的光照著他的臉。
「你沒睡?」
「睡了幾個小時。」
「現在幾點?」
「七點四十。」
若晴下床,走到他旁邊,看著螢幕。觸發程式的終端機開著。
「你準備好了?」
「程式碼準備好了。我還沒有按。」
「你在等什麼?」
「等八點。」
若晴在他旁邊坐下來。兩個人看著螢幕上的終端機。提示符閃著。
「你怕嗎?」她問。
「怕。」
「我也是。」
他們沉默地坐著。
七點五十五分。
哲維把手放在鍵盤上。
「若晴。」他說。
「嗯。」
「不管接下來發生什麼——」
「我知道。」她說。「你不需要說。」
他點了一下頭。
七點五十八分。
他打開了觸發程式的執行指令。游標在終端機裡閃著。
八點整。
他按下了 Enter。
終端機跳出了一行字:「Connection established. Trigger signal sent. Estimated propagation time: 15-30 minutes.」
連接已建立。觸發訊號已發送。預計傳播時間:十五到三十分鐘。
哲維把鍵盤推開。
然後他靠回椅背,看著天花板。
那條裂紋在晨光裡很清楚。從燈座旁邊延伸出來,像一條河。
「按了?」若晴問。
「按了。」
「然後呢?」
「然後等。」
若晴拿起手機,打開了宥心的網站。報導還沒有上線。倒數計時顯示「57分鐘後發佈」。
「我們還有五十七分鐘。」她說。
「對。」
他們坐在那裡,看著螢幕上的終端機。提示符還閃著。
然後若晴的手機震了。一則通知。不是宥心。是一個她不認識的號碼。
她打開來看。
「若晴,我是蘇薇。我知道你在做什麼。請在報導上線之前跟我談談。」
若晴把手機給哲維看。
哲維看完,把手機還給她。「妳要回嗎?」
「不回。」
「她可能想談條件。」
「我知道。但談條件代表她已經在防守了。這代表我們做對了。」
若晴把那則訊息刪掉。
然後她繼續看著手機上的倒數計時。
五十五分鐘。
那五十五分鐘是哲維人生中最長的五十五分鐘。
他跟若晴坐在房間裡,偶爾說一句話、大部分時間沉默。若晴在刷新宥心的網站。哲維在終端機前面等觸發訊號的傳播確認。
八點二十分,終端機跳出了新的一行:「Propagation confirmed. Anomaly active. Estimated duration: 90 hours.」
異常已啟動。預計持續時間:九十小時。
哲維把終端機關上。
「開始了。」他說。
若晴點了一下頭。
他們繼續等。
八點五十五分。若晴的手機震了。宥心傳來訊息:「五分鐘後上線。你們準備好了嗎?」
若晴回:「準備好了。」
哲維看著螢幕。他打開了幾個社群媒體網站。Twitter、Facebook、PTT。搜尋「和盟」「推薦」「異常」。
目前什麼都沒有。
八點五十九分。
若晴握著手機。哲維看著螢幕。
九點整。
宥心的報導上線了。
標題寫著:「你的選擇不是你的選擇——和盟集團如何用演算法操控全球七十億人的決策」。
若晴把報導從頭讀了一遍。哲維在她旁邊一起讀。
兩千字。結構清楚、數據完整、引述了若晴的陳述、附上了內部文件截圖、附上了阿昌的技術評估。最後一段是和盟的回應:「正在調查來源,保留法律追訴權。」
若晴讀完之後,把手機放下。
「然後呢?」她說。
「然後看世界怎麼反應。」哲維說。
他打開了 Twitter。搜尋「和盟」。
前十分鐘,什麼都沒有。
然後,開始有人轉發宥心的報導。
一個、兩個、五個、二十個。
哲維看著數字在跳。
然後他打開了 PTT。報導已經被轉發到科技版了。留言開始出現。
「早就知道了。」
「這有什麼,推薦系統不都是這樣?」
「和盟的倫理委員會是自己審自己?笑死。」
「那個前分析師是怎樣,離職之後才出來爆料?」
「數據看起來是真的。但就算是真的,然後呢?」
哲維把筆電轉給若晴看。
她看完留言,把筆電推回來。
「我就知道。」她說。「我就知道會這樣。」
「什麼樣?」
「有人相信、有人不在乎、有人攻擊來源。然後三天之後,新的新聞出來,這件事就被蓋過去了。」
哲維沒有說話。
他的手機響了。是一個他沒見過的號碼。
他接起來。
「林哲維嗎?」對方的聲音很陌生。
「是。」
「我這裡是某某媒體。我們看到了一篇關於和盟的報導,裡面提到一位參與過共識引擎開發的外包工程師。請問你願意接受訪問嗎?」
哲維把電話掛了。
然後他關上了手機。
「記者。」他跟若晴說。
「你怎麼說?」
「我掛了。」
若晴點了一下頭。
他們坐在那裡,看著螢幕上的數字在跳。轉發數、留言數、點閱數。
數字在增加。但哲維知道,增加不代表改變。
他想到一件事。他打開了終端機,最後看了一次觸發狀態。
「Anomaly active. 89:47:32 remaining.」
八十九小時四十七分三十二秒。
三天半。
然後系統會自動恢復。然後一切回到正常。
然後看世界要不要記得這件事。