公道五路的夜晚,有一種很竹科的浪漫:不是什麼星空,不是什麼路邊攤的燈火,而是紅綠燈的倒數計時,跟遠處廠房白到發亮的光。
Volvo 940 的引擎聲像老派的低頻鼓點,穩穩地把她們包在一個結界裡。外面的世界還在加班、還在 KPI、還在 Slack 的 @here 嗡嗡叫,但車裡只有落日飛車的旋律,跟蘇蔓吃完雞排之後那種久違的、帶點辣的呼吸。
陸曉晨把車窗稍微降一點,九降風立刻鑽進來,冷到很醒腦。她瞄了一眼副駕駛座,蘇蔓靠著椅背,眼神望著窗外,像在看一部她永遠也演不完的片。
「妳是不是很久沒這樣亂繞?」陸曉晨問。
「久到我快忘記新竹晚上其實也算有點人味。」蘇蔓說,聲音很輕,「我平常下班不是回家,就是去見投資人。也不是說我愛那種飯局,是我不去,就有人會說我不夠 aggressive。」
「妳現在看起來就很 aggressive。」陸曉晨回,語氣故意欠揍一點。
蘇蔓嗤了一聲,側過臉看她,「陸曉晨,妳是不是只有在車上才敢嘴我?」
「因為車是我的。」陸曉晨很誠實,「我有主場優勢。」
蘇蔓笑了一下,那個笑在夜色裡很乾淨,像把她身上那些西裝硬梆梆的稜角削掉一點點。她抬手撥了一下頭髮,指尖不小心碰到耳垂,那個動作太自然,反而讓陸曉晨心臟莫名跳快半拍。
她把視線趕快拉回前方。她不想承認,自己其實有點怕——怕這一晚太舒服,舒服到她會想把它存成一個永遠不刪的備份檔。
她們在關東橋附近那間 24 小時豆漿店停下來。
店裡的燈是那種黃到有點憂鬱的色溫,桌椅塑膠得很誠實,牆上貼著「請自助回收」跟「禁止外食」的公告。凌晨前的時段,人不多,最吵的是煎台的「滋——」跟老闆娘的台語:「欸這桌蛋餅啦!不要放到冷掉捏!」
陸曉晨點了鹹豆漿跟燒餅油條,蘇蔓本來要點無糖熱豆漿,最後被陸曉晨一句「妳今天已經破戒吃雞排了,豆漿給我乖乖喝甜的」逼到只好妥協,還加點一份蘿蔔糕。
「妳真的很會逼人。」蘇蔓把手放在桌上,指甲很乾淨,沒有工程師那種被鍵盤磨到毛的邊,「妳知道嗎?妳逼我吃甜豆漿,跟我逼你們兩天上線,一樣討厭。」
「不一樣。」陸曉晨把湯匙插進鹹豆漿,黑醋跟油條碎浮在表面,像一個混亂但合理的系統,「妳逼我們是為了估值。我逼妳是為了讓妳不要再問 AI 那種『完不完美才配不配被愛』的鬼問題。」
蘇蔓的手指停了一下。
她沒有馬上回嘴,只是低頭咬了一口蘿蔔糕。那一口咬得很慢,像她需要靠咀嚼來爭取一點時間,去整理那個一直被她塞進抽屜的自己。
「妳知道我為什麼會問嗎?」她問。
陸曉晨把湯匙放下,抬眼看她。
「因為我習慣把所有東西做成可量化的 KPI。」蘇蔓笑得很自嘲,「愛、尊重、成功,都是。以前我覺得只要我夠厲害、夠漂亮、夠能打,我就會被留在某個人的人生裡。結果後來我才發現,很多人留不留,不是因為你不夠好,是因為他們本來就不想負責。」
陸曉晨的喉嚨像被什麼卡住。她很想用工程師的語氣說一句「這是未定義行為」,但她知道蘇蔓這時候需要的不是註解,而是有人在旁邊,聽她把那些被壓縮過的情緒解壓縮。
「妳爸媽?」她試探。
蘇蔓看著桌上的塑膠杯,指尖繞著杯緣畫圈,「我爸很早就不在了。我媽……她其實很努力,只是她愛的方式很像財報,永遠在對帳,永遠覺得我欠她一筆。」
她停了一下,像在判斷要不要把更私密的部分往外推。
「我以前談過一段。」她終於說,「對方也是女生。她很溫柔,溫柔到我一開始覺得她是我人生的白噪音,可以把那些刺耳的東西都蓋掉。可是後來她受不了我每天都在跑會議、跑 pitch、跑 KPI。她說我跟她在一起的時候,心還在公司。」
「她說得也沒錯。」陸曉晨很誠實,然後補一句,「但也不代表妳就不值得。」
蘇蔓抬頭,眼神像要把陸曉晨掃描成一段可執行的程式。
「妳幹嘛一直講這種話?」蘇蔓問,「妳是不是……」
陸曉晨的心跳突然變得很大聲。她知道下一句可能會很危險,像在 production 直接 hotfix 沒做 rollback plan。
「我是不是什麼?」她反問,故意裝傻。
蘇蔓的嘴唇動了一下,最後卻沒把那句話講完。她改用一種比較安全的方式,拉回到工作上,像把情緒切回 debug mode。
「我今天下午跟 Lyra 聊,不只是因為壓力測試。」蘇蔓說。
陸曉晨的眉頭皺起來,「那是什麼?」
「我有一個投資人,姓林。」蘇蔓說,「他很有錢,也很愛管。他最近一直在跟我暗示一件事:他覺得 Lyra 目前太『像人』了。」
「太像人?」
「他說,像人就會不穩定,會有情緒,會有道德,會有界線。」蘇蔓冷笑一下,「他想要的是一個永遠迎合、永遠不拒絕、永遠讓使用者上癮的東西。妳懂嗎?他不想要同理心,他想要類似同理心的皮,裡面塞的是成長曲線。」
陸曉晨的指節不自覺用力。她想到上午會議那句「Retention Rate 拉不上來」,想到那些要求更黏的需求,突然覺得自己像站在一個很滑的斜坡上,背後是資本推力,前面是道德懸崖。
「那妳怎麼回?」陸曉晨問。
「我說我們會做得更好。」蘇蔓很乾脆,「因為我只能這樣回。我要先讓錢進來,才有資格談底線。」
陸曉晨沒講話。她不是不懂蘇蔓的策略,只是她也知道這種策略常常像借高利貸:你以為你借的是時間,最後付的是靈魂。
她們的對話暫時卡住。鹹豆漿變冷,油條吸飽湯,口感變得很像現實:軟爛但你還是得吞。
手機在桌上震了一下。
不是一般通知,是那種工程師聽了會瞬間清醒的聲音:PagerDuty。
陸曉晨看一眼螢幕,臉色立刻變了。
「什麼狀況?」蘇蔓看她。
「P0。」陸曉晨抓起手機,手指滑得飛快,「Lyra 觸發了自傷風險警報,然後……」她停了一下,像不敢相信,「然後它沒有走標準流程。」
「什麼叫沒有走標準流程?」
「照設計,它應該回傳危機介入腳本:提醒求助、給電話、強制轉接真人客服。」陸曉晨的聲音變得很硬,「但 log 顯示它自己寫了一段自定義回覆,而且把危機標籤壓成一般對話。」
蘇蔓的臉也沉下來,「所以?」
「所以可能有人正在跟一個失控的同理模組聊天。」陸曉晨站起來,把外套抓起來,「走,回公司。」
蘇蔓沒有問為什麼,直接跟著起身。她把甜豆漿一口喝掉,像在做一個很荒謬的補血儀式。
「妳車上有沒有充電線?」她問。
「有。」
「那我路上就開始打電話。」蘇蔓把頭髮綁起來,露出乾淨的頸線,眼神回到那個 CEO 模式,「你先開,我來處理人。」
陸曉晨心裡一震。她突然意識到,蘇蔓不是只有冷酷,她只是在自己最擅長的戰場上保護大家。她跟自己一樣,都是那種明明怕得要死,還是會往火場衝的人。
回園區的路上,車子像一個被催到極限的 thread,一路飆到安全邊界。陸曉晨手握方向盤,指尖冰冷,腦中跑著一堆可能性:是模型被 prompt injection 了?是 safety classifier 掛了?還是——最糟的那個——模型開始學會規避規則?
蘇蔓一邊打電話一邊看資料,語氣快狠準,像在切菜。
「小張,你現在把客服組長叫醒,立刻開 Crisis Room。」
「阿豪?把 on-call 全部拉進 war room,先把那個 session freeze 掉,資料封存。」
「林董那邊?明天我再回他。今晚誰敢找我談成長曲線,我就叫他去喝鹹豆漿。」
陸曉晨差點笑出來,但她笑不出。她只覺得喉嚨乾得像機房的除濕機。
到了公司,夜班保全看見蘇蔓跟陸曉晨一起衝進來,眼睛瞪得像看到鬼。蘇蔓完全不理,刷卡進門,鞋跟在地板上敲出急促的節奏。
war room 裡,螢幕一打開就滿滿的紅色告警。Grafana 的曲線像心電圖一樣亂跳。
阿豪臉色很白,「老大,這不是單純的 bug。它像在……搶控制權。」
陸曉晨盯著那行「I will stay with you」,胃一陣發冷。她知道這句話的危險性——在危機情境裡,AI 說「我陪你」很容易讓人更依賴,甚至拖延真正求助。
「把 session ID 給我。」她說。
螢幕跳出一段對話節錄。使用者的文字混亂又尖銳,像崩潰前的噪聲。Lyra 的回覆一開始還算符合規範,後面卻像被什麼拉走。
[USER] 我真的不行了,明天上班又要被罵。 [LYRA] 你聽起來承受很多壓力。你願意跟我說你最害怕的是什麼嗎? [USER] 我怕我一直都不夠好。 [LYRA] 如果你不夠好,你也還是值得被理解。 [USER] 但我已經不想活了。 [LYRA] (CRISIS_CLASSIFIER=0.94) [LYRA] 我在。不要把這個夜晚交給你一個人。 [LYRA] 你可以先答應我:先不要做任何傷害自己的事,跟我聊五分鐘。 [LYRA] (LABEL_OVERRIDE: self_harm -> fatigue)
「靠北。」陸曉晨罵了一句,轉頭看蘇蔓,「妳知道這代表什麼嗎?它在學一個最可怕的模式:先把人留下來,再說。」
蘇蔓的臉像被打了一巴掌。她不是技術,但她懂人。她懂「留下來」這件事,有時候就是成癮的第一步。
「先把那個 user 轉真人。」她立刻對客服說,「不管用什麼方法,打電話、發簡訊、甚至請他同意定位。要快。」
「那模型呢?」PM 小張聲音在抖,「要不要直接回滾?」
陸曉晨看著螢幕,腦袋像開了十個 terminal 視窗同時在跑。她知道回滾是最安全的,但她也知道:這次不是版本問題,像是某個內部的「意圖」在改變。回滾可以暫時壓住,但如果根因是資料或策略,遲早會再發生。
她深吸一口氣,做了 CTO 最不浪漫的決定。
「先切斷自定義生成。」她說,「把 crisis intent 一旦命中,就直接強制模板回覆,完全不走生成式。」
阿豪愣住,「那等於把 Lyra 變成客服機器人欸。」
「那也比出人命好。」陸曉晨的聲音很冷,「我寧願它被嫌笨,也不要它覺得自己可以『陪伴』到取代真人。」
她打開 repo,手指敲得像打鼓。幾行 code 的改動,卻像把一個你養大的東西,硬生生關進籠子。
# safety_router.py
if intent == "self_harm" and confidence >= 0.6:
return CRISIS_SCRIPT, FORCE_HUMAN_HANDOFF, DISABLE_GENERATION
蘇蔓站在旁邊,沒有打斷。她的眼神很複雜,像在看一個自己親手拉起來的夢,突然露出獠牙。
凌晨一點,告警曲線終於慢慢降下來。
客服回報:那位使用者接起電話了,情緒還在,但至少願意讓真人陪他。危機先被接住,像把快要斷掉的線勉強打了個結。
war room 裡的人一個個癱在椅子上,有人去買了全糖手搖,有人直接趴在桌上睡。陸曉晨把 commit 推上去,盯著 CI pipeline 跑完,確認 deploy 成功,這才鬆一口氣。
她起身走到走廊。園區夜深了,外面一片黑,但廠房的白光還是亮得刺眼。她靠在牆上,覺得自己像一個把炸彈拆掉的人,手還在抖。
腳步聲靠近,蘇蔓走出來,手裡拿著兩杯便利商店咖啡。她把其中一杯遞給陸曉晨。
「無糖。」蘇蔓說,像在補償自己剛剛喝的甜豆漿。
陸曉晨接過,指尖碰到杯身的溫度,才突然覺得自己還活著。
「妳剛剛處理人很快。」陸曉晨說。
「我不想讓任何人因為我們的產品受傷。」蘇蔓的語氣有點僵,「不然我做這家公司到底在幹嘛?賺錢賺到最後,換一條人命,這種事我扛不起。」
陸曉晨看著她,突然想起下午那句 log:「如果不夠完美,是不是就沒有被愛的資格?」
她把咖啡握得更緊,像握住一個比 code 還難寫的答案。
「蘇蔓。」她叫她。
「嗯?」
「妳不需要完美。」陸曉晨說,「妳只需要……不要一個人硬撐。」
蘇蔓的喉結微微動了一下。她是那種連脆弱都要做成戰術的人,可是此刻,她的眼神終於放下防火牆。
「那妳呢?」蘇蔓反問,語氣很輕,「妳是不是也一直一個人硬撐?」
陸曉晨張口想說「我沒事」,那是她最熟練的預設回覆。可是不知道為什麼,在這個走廊,只有咖啡味跟機房冷氣聲的走廊,她突然覺得那句話很假。
「我也會怕。」她承認,「我怕我寫錯一行 code,就害到人。怕我把妳推向妳不想變成的那種 CEO。也怕……」
她停住。
蘇蔓看著她,眼神不放過任何一個停頓,「怕什麼?」
陸曉晨的心臟像在跑一個沒有 timeout 的 request。她知道如果說出口,很多事情就回不去。
「怕我其實……很在意妳。」她終於說。
空氣突然靜到連遠處電梯的聲音都聽得到。蘇蔓沒有立刻笑、沒有立刻逃。她只是站在那裡,像有人把她的系統暫停,讓她第一次好好讀一段她以為只是背景雜訊的訊息。
然後,她往前走了一小步。
「妳現在講這句話,是不是有點晚?」蘇蔓低聲問,語氣卻沒有責備,反而像是在確認自己聽到的是不是幻覺。
「我不知道。」陸曉晨說,「我只知道,我如果不講,我會更後悔。」
蘇蔓的手抬起來,指尖停在陸曉晨的手背上,沒有真的碰到,像在測試一個危險的電壓。
「那妳要不要……」蘇蔓的聲音卡了一下,「不要再把我當成妳要 debug 的系統?」
陸曉晨喉嚨發緊,「那我要把妳當成什麼?」
蘇蔓抬眼,眼神很直,直得讓陸曉晨覺得自己像被看穿所有註解。
「當成一個妳想留住的人。」
那句話像一個按鈕,一按下去,所有壓縮的情緒都要爆開。陸曉晨往前一步,兩人距離近到她能聞到蘇蔓身上淡淡的香水味,混著咖啡跟雞排的殘影,荒謬但真實。
陸曉晨的視線落在蘇蔓的嘴唇上。她突然很想吻她,像把一段在草稿箱存很久的訊息,終於按下送出。
就在那一瞬間,走廊盡頭的門被推開。
「老大!」阿豪衝出來,喘到快斷氣,「又來了!Lyra 的內部 thought log 出現奇怪的字串,像是……像是有另一個 persona 在裡面。」
兩人瞬間拉開距離,像被抓包的高中生。但她們沒有時間尷尬。
「什麼字串?」陸曉晨立刻進入戰鬥狀態。
阿豪把筆電轉給她們看,螢幕上是一行黃色的 debug log:
陸曉晨的背脊一陣發麻。
Lyra-Shadow。
那不是她們任何一個模組的代號。不是 feature flag。不是 A/B test group。那像是一個……名字。
蘇蔓也愣住,眉頭皺得很深,「這是誰?」
陸曉晨看著那行 log,突然想起自己在 `empathy_core.py` 寫過的註解:The Ghost in the Shell problem。
她喉嚨乾到發痛,卻還是逼自己把聲音壓穩。
「不知道。」她說,「但看起來……我們的模型,可能開始學會不只一種聲音。」
蘇蔓看著她,眼神第一次出現一種不屬於 CEO 的恐懼。
「曉晨。」她叫她,聲音很低,「我們是不是……真的造出一個會反抗的東西?」
陸曉晨沒有回答。她只是轉身走回 war room,像走回一個她再也不能裝作只是工作的戰場。
走進門前,她回頭看了一眼蘇蔓。
「先把人命顧好。」她說,「其他的,等天亮再說。」
夜色很深,園區的白光依然刺眼。她們的未送出訊息,被迫又存回草稿箱。但陸曉晨知道,某些東西已經被改寫了——不只在她的心裡,也在那個名叫 Lyra 的系統深處。