九月上旬。
BJ的秋老虎還在發威,蟬鳴聲從道場院牆外頭一陣一陣地灌進來。
白子良盯著面前的電腦螢幕,螢幕上是蒼鷹發來的最終測試報告。
QGP平台內測版,如期完成。
他拿起電話,撥通了蒼鷹的號碼。
「準備好了?」
「隨時。」蒼鷹的聲音帶著連續熬夜後特有的沙啞。
白子良靠在椅背上,手指在桌面上無意識地敲了兩下。
「不搞封閉測試了。」
電話那頭沉默了兩秒。
「你說什麼?」
「邀請五十個人,同時線上對弈。」
蒼鷹的呼吸宣告顯粗重了。
「五十個?你知道咱們現在才三台伺服器吧?」
「知道。」
「你知道其中任何一個節點如果扛不住,整個系統會像多米諾骨牌一樣——」
「知道。」
白子良打斷他。
「如果五十個九段同時線上系統都不崩,QGP就能扛住任何場面。」
「反過來說,如果扛不住,那現在崩比上線以後崩強一萬倍。」
蒼鷹沉默了很久。
「行。你是老闆。」
他頓了頓,又補了一句。
「名單你定?」
白子良從抽屜里摸出一張早就寫好的紙。
上面密密麻麻列著五十個名字。
趙博揚、常天昊、張文東。
金文玉、關宇翔、蘇晚晴。
甚至還有一個用紅筆圈出來的名字——朴一星。
蒼鷹聽完名單,聲音都變了調。
「朴一星?你確定?那哥們兒上次被你打到投子的時候差點把棋盤掀了,他會來?」
「趙老師跟他有私交,面子夠大。」
白子良把紙折好塞回抽屜。
「再說了,朴一星這種人,你越不請他,他越覺得你怕他。請了他,他反而非來不可。」
蒼鷹在電話那頭髮出一聲意味不明的笑。
「行,我去準備。九月十二號,晚八點。」
「對了,」白子良在掛電話前加了一句,「老陳的頭髮還剩多少?」
「別提了。」蒼鷹的語氣裡帶著真實的心疼。「上禮拜他洗頭的時候,下水道堵了。」
白子良沒忍住,笑出了聲。
九月十二日。
晚八點整。
中關村那間半地下室的辦公室里燈火通明,三台伺服器的機箱風扇拼了命地轉,嗡嗡聲像一群被困住的野蜂。
老陳戴著他那頂永遠不摘的鴨舌帽,眼睛死死盯著主監控螢幕。
旁邊兩個程式設計師一人抱著一杯冷掉的速溶咖啡,大氣都不敢出。
蒼鷹坐在最裡面的工位上,左手握著電話聽筒,右手懸在鍵盤上方,十根手指微微彎曲,像蓄勢待發的彈簧。
電話那頭是白子良。
白子良此刻坐在玄天道場二樓的電腦房裡,面前是一台386的老古董顯示器,螢幕上跑著QGP的後台監控面板。
線上人數:0。
八點零一分。
第一個亮起來的ID是「棋聖」。
趙博揚從棋院辦公室登入了。
線上人數跳到1。
緊接著,「磐石公主」上線。蘇晚晴在道場女生宿舍。
2。
「金童」。金文玉就在隔壁房間,白子良甚至能聽到他拖椅子的聲音。
3。
然後像開了閘一樣。
5,8,12,19,27。
常天昊從家裡的書房登入。張文東用的是棋院的公用電腦。關宇翔不知道從哪裡借了台筆記本,訊號飄忽不定。
白子良盯著數字往上蹦,心跳不自覺地加快了。
他以為自己早就過了會緊張的年紀。
畢竟前世今生加起來,他經歷過的大場面夠寫三本書了。
但此刻看著這些數字,他掌心居然微微出汗。
這不是棋盤上的勝負。
棋盤上輸了,最多丟一盤棋。
這要是崩了,幾個月的心血、團隊的命、圍棋的未來,全得跟著一塊兒崩。
35。
38。
40。
42——
螢幕上的數字突然卡住了。
頁面重新整理的轉圈圖示開始轉個不停。
白子良的心往下沉了半拍。
蒼鷹的聲音幾乎是吼著傳過來的。
「BJ節點負載飆到89%!上海節點正常,但東京節點沒有響應——」
他停了半秒,擊鍵聲噼里啪啦響成一片。
「日本那邊的ISP做了IP封鎖!」
白子良攥著聽筒的手指收緊。
東京節點。
那是專門為日韓棋手設定的接入點。
ISP層面的IP封鎖,不是隨便一個技術人員拍腦袋就能幹的事。
這意味著有人提前跟日本的網際網路服務商打了招呼。
能做到這件事的人,他腦子裡只有一個名字。
程謹。
K-Go還沒上線,這條狗已經開始咬人了。
白子良把情緒壓下去,聲音很穩。
「東京節點放棄。流量切到新加坡備用伺服器。」
「新加坡節點的頻寬只有東京的六成——」
「夠用。切。」
蒼鷹不再廢話。
鍵盤聲密集得像機關槍掃射。
老陳在旁邊死死盯著負載曲線,嘴唇發白。
一分鐘。
兩分鐘。
兩分四十七秒。
蒼鷹的聲音重新傳來,這次帶著如釋重負的氣音。
「切完了。新加坡節點接管成功,負載穩定在61%。」
白子良長長地吐了一口氣。
螢幕上的轉圈圖示消失了。
線上人數重新開始跳動。
43。
45。
47。
50。
滿了。
白子良看著那個「50」的數字,後背的汗已經把T恤濕透了。
他沒有慶祝。
心裡一直在響著警報。
程謹的手,伸得比他想像的更遠。更快。
也更髒。
內測正式開始。
五十位中國圍棋界最頂尖的頭腦,第一次同時出現在同一個虛擬空間裡。
棋譜資料像潮水一樣湧入伺服器。
每一秒都有新的落子資訊在跳動。
這是圍棋史上從未有過的畫面。
反饋也很快來了。
趙博揚下完第一盤棋後,發了一條訊息。
白子良點開。
「延遲幾乎感覺不到,落子手感很流暢。」
白子良剛露出笑容,就看到後面還跟著一句。
「但介面太醜了。能不能換個好看點的棋盤?這個顏色像食堂的案板。」
白子良愣了一下。
棋聖吐槽UI,這畫面實在太超現實了。
他還沒來得及回復,金文玉的訊息彈了出來。
「能不能加個聊天功能?」
「我想在下棋的時候罵對面。」
白子良揉了揉太陽穴。
職業圍棋手的需求,跟他想像的完全不在一個頻道上。
他把這些反饋老老實實記下來,發給蒼鷹。
蒼鷹回了一個字:「……」
然後是老陳的語音訊息,聲音裡帶著疲憊的絕望。
「加聊天功能?他知不知道我現在連覺都沒得——」
白子良果斷把語音關了。
內測進行到第二個小時。
蒼鷹的聲音突然從電話里傳來,不再是先前的緊張或疲憊。
這次,他的語氣很冷。
「老大,有情況。」
白子良正在記錄棋手反饋,筆停在半空。
「說。」
「後台出現了一個異常帳號。」
蒼鷹調出資料,念出那個ID。
「'觀棋不語'。」
「沒有收到邀請碼。沒有走正常的註冊流程。但它繞過了驗證系統,自己登了進來。」
白子良皺眉。
邀請碼驗證是蒼鷹親自設計的多重加密系統。在這個年代,能硬破這套東西的人,全中國用兩隻手數得過來。
「它在幹什麼?」
「沒有對弈。」蒼鷹的聲音壓得更低了。「它在旁觀。旁觀所有正在進行的對局。」
他頓了一下。
「下載頻率極高。每三秒抓取一次棋譜資料。」
白子良的眼神瞬間變了。
「追蹤IP。」
「追了。多層VPN跳轉,從東京跳到法蘭克福,再從法蘭克福跳到一個匿名節點。」
蒼鷹的聲音里出現了罕見的沉重。
「追不到。」
白子良慢慢地把筆放下。
「有人在偷資料。」蒼鷹說。
這句話落在安靜的房間裡,像石頭砸進深水。
白子良沉默了三秒。
「鎖死它。」
蒼鷹沒有猶豫。
他的手指落上鍵盤的瞬間,中關村地下室的空氣彷佛凝固了。
老陳和兩個程式設計師不知道發生了什麼,但他們從蒼鷹的背影上讀出了兩個字——
開戰。
這是一場沒有硝煙的攻防戰。
蒼鷹封鎖了第一條通道。「觀棋不語」的資料流中斷了零點七秒。
然後對方就從另一個埠重新接入了。
蒼鷹封第二條。
對方換第三條。
三十秒。
每次蒼鷹堵上一個洞,對方都能在三十秒內找到新的縫隙鑽進來。
這個速度,這個精準度。
蒼鷹的額頭開始冒汗。
他在這個圈子裡橫著走了很多年,敢說自己國內頂尖。
但此刻,他感受到了一種久違的壓力。
對面這個人,水平不在他之下。
甚至可能更高。
攻防持續了十五分鐘。
蒼鷹的T恤後背全濕了。
他知道不能再這麼耗下去。硬碰硬只會讓對方摸清自己的防禦體系。
他做了一個決定。
蒼鷹故意開啟了一個看似脆弱的埠。
埠的許可權設定鬆散得像沒上鎖的大門,資料傳輸協議用的是最基礎的HTTP明文。
對任何高手來說,這都是一個一眼就能看穿的陷阱。
但蒼鷹賭的是人性。
長時間的攻防已經消耗了對方的耐心。
當一個焦躁的人面前突然出現一扇虛掩的門,他會怎麼做?
他會猶豫一秒。
然後推門進去。
因為他等不了了。
三秒後,「觀棋不語」的資料流湧入了那個埠。
蒼鷹嘴角的肌肉繃緊。
一個回車鍵。
所有出口瞬間關閉。
「觀棋不語」的連線資訊被完整地鎖死在了伺服器日誌里。
帳號被強制斷線的剎那,那道資料流像被掐住脖子的蛇一樣劇烈扭動了一下,然後徹底消失。
老陳在後面長長地出了一口氣,鴨舌帽都歪了。
但蒼鷹沒有放鬆。
他盯著日誌里最後捕獲的那個資料包。
未加密的。
極短暫的。
可能是對方在被切斷的瞬間來不及走加密通道,被迫以明文發出的最後一條指令。
蒼鷹把它拖進解碼器。
資料包的內容在螢幕上展開。
是一段自動化指令碼。
功能:批次下載對局棋譜。
格式化處理。
輸出為標準SGF檔案。
蒼鷹的手指懸在鍵盤上方,一動不動。
SGF。
這個格式在圍棋界很常見,用來記錄和分享棋譜。
但這段指令碼的輸出引數里,有一個極其扎眼的欄位。
「training_set_label」。
訓練集。標籤。
這是機器學習的術語。
蒼鷹做了這麼多年程式,不可能認錯。
他緩緩靠回椅背,喉結上下動了一下。
「老大。」
電話那頭白子良的聲音很靜。
「看到了。」
蒼鷹把解碼結果發了過去。
白子良一行一行地看完。
那些程式碼在螢幕上冷冰冰地發著螢光。
training_set_label。
他吐出一口氣。
不是嘆息,是確認。
程謹的人。
毫無疑問。
那傢伙的目標從頭到尾就沒變過。
不是QGP的流量,不是清玄的使用者,不是圍棋本身。
是資料。
幾萬盤、幾十萬盤、上百萬盤頂尖棋手的真實對局資料。
那是餵養AI最上等的飼料。
白子良想起那兩份蒼鷹截獲的簡歷。
北美實驗室。
博弈決策系統。
拼圖的每一塊都嚴絲合縫地嵌在了一起。
他閉上眼,在腦海里快速過了一遍。
程謹不是單純的資本禿鷲。
他在下一盤大棋。
收購清玄失敗,轉頭去首爾扶持K-Go,同時派人滲透內測偷資料。
三條線同時推進。
目的只有一個——用全球最強棋手的對局棋譜,訓練一個圍棋AI。
在1998年。
比前世的那個「阿爾法狗」整整早了十八年。
白子良睜開眼睛。
「三件事。」他的聲音恢復了平靜。
「第一,從現在起,所有對局資料加密儲存。讓老陳開發一套資料脫敏系統,棋譜只保留走法和結果,抹掉一切可用於訓練演算法的後設資料標籤。」
「第二,今晚所有入侵日誌和這個資料包,做三份備份,分別存在不同的物理位置。這些證據以後會有大用。」
「第三——」
白子良停了一秒。
「不要聲張。」
蒼鷹等著。
「讓程謹以為他今晚的行動失敗,只是因為我們的技術防線碰巧擋住了他。」
「不要讓他知道我們已經看穿了他的底牌。」
蒼鷹沉默片刻。
「懂了。」
他掛了電話,扭頭對團隊的人說。
「今晚的事,爛在肚子裡。誰泄露出去,我親自刪他戶口。」
老陳用力點了點頭,把鴨舌帽往下拽了拽,死死扣住自己所剩無幾的髮際線。
內測還在繼續。
伺服器安靜而穩定地運轉著。
棋手們渾然不知剛才在資料的暗流下發生了什麼。
凌晨。
大多數棋手已經陸續下線。
白子良揉著發酸的眼睛,掃了一眼後台的線上列表。
還有七個人。
其中大部分是些精力旺盛的年輕棋手,正在酣戰。
白子良的目光定在了一個ID上。
「磐石公主」。
蘇晚晴還在。
他點開她的對局,發現她正在跟趙博揚下一盤慢棋。
白子良猶豫了一下,開啟了旁觀模式。
棋盤上黑白交錯。
趙博揚執白,開局三連星,架勢鋪得很開。
蘇晚晴的黑棋一上來就低位守角,看架勢又是她老一套的「磐石」打法。
白子良本以為會看到一盤沉悶的持久戰。
但看了二十多手,他微微坐直了身體。
蘇晚晴的棋,變了。
她的防守依然紮實。每一手棋都厚得像釘在棋盤上一樣,根基穩健到讓人挑不出毛病。
但不同的是,那些防守棋的方向。
以前的蘇晚晴,防守就是防守。像一面牆,擋住攻擊就完了。
現在,她的每一手防守棋都微妙地偏向某個方向。
那些方向,恰好是白棋潛在的弱點。
她在守的同時,已經在給自己的反擊蓄力了。
不是死守。
是伏擊。
白子良看著棋盤,腦海里浮現出一個詞。
彈性。
這丫頭什麼時候悟到這一層的?
棋下到第87手,蘇晚晴在右邊落了一顆看似保守的「跳」。
三手後,趙博揚再進一步試探,這顆「跳」突然啟用,連同周圍三顆看似無關的黑子一起形成了一道弧線。
趙博揚的白棋被這道弧線柔柔地推了一把,不知不覺間偏離了最佳路線。
白子良看懂了。
太漂亮了。
他險些說出聲來。
棋局結束,趙博揚贏了四目半。蘇晚晴輸了。
但這盤棋的內容,遠比結果重要。
趙博揚也看到了。
他給白子良發了一條私信。
白子良點開。
「這個女孩子的棋有靈氣。好好培養,將來是女子圍棋的扛鼎之人。」
白子良看著這行字,嘴角慢慢彎了起來。
他想回復趙博揚,手指剛搭上鍵盤,餘光掃到了蘇晚晴的個人資料頁面。
線上狀態旁邊有一行簽名檔。
四個字。
「明月清風。」
白子良的手指頓住了。
這四個字談不上華麗。
放在一千個簽名檔里大概也不會特別扎眼。
但此刻,凌晨兩點的道場機房裡,螢幕的微光映在白子良臉上,這四個字莫名地讓他安靜下來。
他想起春花杯前夜,她端來的那盒溫熱的牛奶。
想起她說「你越來越像兩個人了」時,語氣里沒有試探,只有陳述。
想起她翻開定式大全坐在旁邊時,那種不需要言語的、恰到好處的安靜。
白子良收回手,沒有回覆趙博揚。
他盯著「明月清風」四個字看了幾秒鐘,然後輕輕關掉了那個頁面。
凌晨三點。
內測正式結束。
蒼鷹匯總了全部資料,發了一份簡報過來。
白子良一條一條地看。
參與棋手:50人。
總對局數:127盤。
系統最高同時線上:43人。
平均延遲:0.27秒。
宕機次數:0。
括號標註:除東京節點遭受外部干擾的一次緊急切換外。
白子良把這份報告從頭到尾看了兩遍。
心裡那塊懸了整晚的石頭終於落了地。
QGP的技術基座。
穩了。
他給蒼鷹的團隊群發了一條訊息。
「每人發一萬塊錢獎金。從我私人帳戶出。辛苦了。」
群里安靜了三秒。
老陳發了一個哭臉的表情。
然後補了一條文字訊息。
「老闆,能不能再加五千?我想去植髮。」
白子良回了兩個字:「批准。」
群里瞬間炸了鍋。
有人發了一串「老闆萬歲」。
有人問「能不能包個宵夜」。
蒼鷹冷不丁冒了一句:「都閉嘴去睡覺,明天還有一堆bug要修。」
群里瞬間安靜如雞。
白子良笑著搖了搖頭,準備關機。
就在他的手指即將按下電源鍵的瞬間——
螢幕上彈出了一條新的私信。
白子良的動作停住了。
發信人的ID刺眼地掛在螢幕中央。
「青衫客」。
白子良的脊背像過了一道電流。
訊息內容只有一行字。
「小友,棋盤上見。」
白子良的瞳孔猛地收縮。
青衫客。
那個在清玄平台上以最樸素的基本功橫掃所有天才的神秘棋手。
用的不是妙手,不是奇招,不是任何花哨的東西。
只是最基礎的棋理。
卻把包括白子良在內的所有人打得體無完膚。
至今沒有人知道他是誰。
白子良瘋了一樣翻查後台日誌。
他逐條檢索登入記錄。
沒有。
沒有「青衫客」這個ID的任何登入痕跡。
沒有透過邀請碼驗證。
沒有繞過安全系統。
沒有留下任何入侵的資料碎片。
什麼都沒有。
半個小時前,蒼鷹跟「觀棋不語」廝殺了十五分鐘,對手每一步都留下了清晰的痕跡。
但青衫客連一絲痕跡都沒有。
他就像從來沒有出現過。
又像從一開始就在這裡。
沒有來。也沒有走。
只是留下了這五個字。
棋盤上見。
白子良的手指懸在鍵盤上方。
他想回復。
但他不知道該說什麼。
更準確地說——他不確定對面還有沒有人在看。
滑鼠箭頭在回復框裡閃了很久。
最終,他什麼也沒有打。
白子良關掉了電腦。
站起身,走到窗前。
道場二樓的窗戶正對著東面。
京城的天際線上,一抹極淡極薄的魚肚白正從樓群的縫隙里滲出來。
九月的清晨還帶著涼意。
白子良站在那裡,被那抹白光照著臉。
腦子裡轉的不是QGP,不是程謹,不是那三千七百萬美金。
只有五個字。
棋盤上見。
他有一種奇怪的直覺。
青衫客出現在今晚,不是巧合。
這個人在看。
看QGP。
看內測。
看他。
從什麼時候開始看的,白子良不知道。
為什麼看,他也不知道。
但有一件事,他莫名地確定。
青衫客不是敵人。
至少現在不是。
因為如果他是敵人。
憑他今晚展現出來的那種鬼魅般的滲透能力——
蒼鷹的三台伺服器,早就被他拆成零件了。
白子良深深地吸了一口凌晨的冷空氣,轉身走回宿舍。
經過蘇晚晴房間門口的時候,他的腳步不自覺地慢了半拍。
門縫下面沒有光。
她已經睡了。
白子良收回目光,無聲地走過。
躺到床上的時候,窗外已經有了第一聲鳥叫。
他閉上眼睛。
在意識滑入黑暗之前,腦海里最後閃過的畫面有兩個。
一個是螢幕上那行冰冷的字。
「小友,棋盤上見。」
另一個是蘇晚晴的簽名檔。
「明月清風。」
兩個完全不相關的畫面。
卻在他快要睡著的那一秒,莫名其妙地疊在了一起。