意義的交握

TLS 保護的是傳輸層—防竄改、防竊聽。它上面那一層—你的意義應該完整抵達另一個心智的那一層—卻沒有任何東西在保護它,任由它不斷失真。這是三篇筆記的第三篇,起點是一次實作。第一篇談的是一套 TLS 堆疊如何在三個月內寫成、並維持住完整性。這一篇談的是讓那件事成為可能的通道,把它對準日常的溝通,問保護這一層需要什麼—包括誠實地說明,為什麼這比聽起來難。

通道變窄了,而不是變寬

我們告訴自己,資訊時代把所有人連在一起。它實際做的,是把心智之間通道的數量變多,再把每一條抽成一根細線。現在人人都能廣播;卻幾乎沒有人能傳遞一個完整的思想。一則標題、一行訊息、一個表情回應—這些是窄通道,而窄通道就是有損通道。能活著通過的只有結論,讓結論值得信任的那段推理被剝掉了。結論可以壓縮。意圖不行。

再往前推一步,它就不再是抱怨,而是一個機制。媒介是一個濾器,決定哪些想法能通過它。一個本質複雜度超過通道的想法過不去—過去的只是一個有損的影子,而影子通常是錯的。所以短格式媒體淘汰謹慎的想法、篩選可壓縮的想法:口號、斬釘截鐵、部落信號。不是因為它們更真—是因為它們塞得進去。媒介設定了適應度函數,勝出的想法是為了在其中存活而成形的那些,不是對的那些。

一條承載意圖的通道

轉折在這裡。一個大型語言模型,用得好的話,是第一條能承載意圖而不只是文字的通道。它能把一個壓縮的、成形一半的想法,展開成完整的形狀。它能把別人一句簡短的訊息,重建回對方想表達的東西。它不是一條更快的線—線從來不是問題。它是一個坐在線裡面的譯者,一個聽得懂貨物的譯者。

用得隨便,它反而加速下滑。市面上已有的「幫我改寫訊息」工具,處理的是單一訊息的表面,對接收者是誰沒有任何模型,而且它們會同質化—每個人都收斂成同一個流暢的無名氏。更糟的是,它遞給你一句自信、光滑的句子,是你本意的近鄰,而那層光滑掩蓋了漂移。這種失敗有一個名字,也是整個構想要對抗的敵手:虛假的清晰。一個聽起來對的錯誤重建,所以沒有人去查。

虛假的清晰,我認為正是人們對 AI 代理早已感到不信任、卻說不出名字的那個東西。抱怨從來不是機器會—人類無時無刻不在錯。而是機器錯得流暢:它帶著我們演化出來用以判讀能力的所有表面信號—自信、結構、從容—卻不帶那些信號過去所暗示的正確性。在整個歷史裡,流暢一直是可靠性還算不錯的代理指標。這些系統切斷了這條連結,而一個代理不只會出流暢的錯誤,還會照著做。那份懷疑是對的,它的名字就是虛假的清晰。

那就把它當成一個協定

意義的傳遞,是一條有著特徵性損耗模式的通道。這使它成為一個協定問題,而協定是我知道怎麼推理的東西。TLS 保證幾條性質,合起來擊敗竄改;一個意義層的協定,會保證幾條合起來擊敗失真的性質。五條,每一條都直接回應意義在傳輸中死去的一種方式:

讓它運作起來的,是一本「每段關係一本」的密碼本:你怎麼編碼、對方怎麼解碼、你們兩人已經共同定義過的詞彙、已經修復過的誤讀。這就是為什麼在熟識的人之間,一個詞可以承載一整段話。而它也是這樣一個系統所能持有的最私密的資料—所以要用保管金鑰材料的方式保管它:本地、加密、屬於它所描述的人,永遠不匯集到平台上。一條收割意義的意義通道,已經背叛了使用它的人。

那本密碼本裡藏著一個反駁:它從哪裡來?跟認識多年的人之間,它早已存在—協定只需要讀它。跟陌生人之間,它是空的,而對其接收方式的預測,只是一個披著模型自信的猜測。TLS 有同樣的問題,而且誠實地為解法命名:交握。兩個從未見過面的端點不假設共享狀態—它們把狀態協商出來,各自聲明自己能接受什麼,然後承載資料才開始流動。意義層的對應物一點也不奇特;人們早就非正式地在做這件事,當他們說「跟我講重點就好」或「直說無妨」。協定只是把這第一次交換變成明確的:一段新的通信,以一份小小的、人讀得懂的說明開場—我怎麼編碼、我偏好怎麼接收—於是密碼本從一份協議開始,而不是從監視開始。這就是「推導出共享狀態」與「刮取共享狀態」的差別。也是這篇文章的標題是結構性而非裝飾性的原因:交握不是「擁有脈絡」的隱喻。它是訊息開始算數之前,雙方都先說話的那一步。

為什麼這比程式碼難,而且難得不一樣

我想對保真檢查誠實,因為整個難處都藏在它裡面。程式碼可驗證,是因為它的神諭(oracle)—「正確」的定義—是外部的、形式化的、可執行的:一份規格、一份 RFC、一個抓下來的封包,你可以拿程式跑過去比對,一個位元組一個位元組,得到明確的裁決。這是校驗和能夠在本地運作的原因。你可以一個人、在自己桌前、沒有任何其他人在場,驗證程式碼。

意義一項都沒有。它的神諭—「他們理解我的意思了嗎?」—住在另一個心智裡面。你讀不出來,它沒有形式化定義,你也無法重跑一次「第一次聽到」來檢查。所以意義沒有本地校驗和,也不可能有。驗證不是你執行的一次計算;它是一趟來回。用網路的話說:程式碼是 CRC,在你這一側單獨檢查;意義是 TCP ACK—你不知道封包到了,直到確認回來。你不知道你的意義落地了,直到對方回覆,而你把回覆和你的本意相比對。

這就準確地告訴你,保真檢查是什麼、不是什麼。預測的接收是一個預測—一個接收者的模型,被密碼本磨利,作為先驗很有用。它不是裁決。唯一真正的神諭是那個真實的人,而沒有任何模型那個心智;它只能逼近。一個把自己的預測當成確認的工具,製造出了最深的虛假清晰:一份看起來已被確認、實則從未存在的理解。

而且它收不回來

還有一條性質,而它決定了工具被允許站在哪裡。接收是一個單向函數。一句話一旦被解碼進另一個人,就無法未曾送出;「當我沒說」不是刪除而是插入,而且常常比它想抹掉的東西更響。機器通道會丟棄損壞的封包、重送好的那一個,接收端從未執行過壞的版本。意義通道沒有丟棄這一步:接收者收到即執行每一則訊息,任何校驗和都來不及跑。

把這一條疊上那趟來回,陷阱就完整了。唯一真正的驗證—回覆—是在訊息已經落地、已經起了作用之後才到的。驗證在提交之後;傳輸不可逆。另一個心智沒有 staging 環境。每一次送出都是直接上 production,而 production 沒有 rollback。

所以工具真正能站的位置只有一個:送出之前的那一刻—操作仍然可逆的最後一瞬。真正的神諭、那趟來回,來得太晚,攔不下任何事;它只能餵給下一則訊息。這也是一個「只是預測」的保真檢查仍然值得的原因:它不完美,但它是不可逆點之前唯一的介入點。它不需要是神諭。它需要的,是在你還能行動的唯一時刻,當一個夠好的警告。預防,而不是善後—而唯一要緊的守衛,是站在不可逆行為前面的那一個。

它也是「寫入權在你手上」底下的硬地板。提交,是對另一個人的心智做一次不可逆的變更。你不能把自動送出的權力交給自動駕駛,因為自動送出,就是自動把無法復原的變更提交進人裡面,而驗證要等它們全部落地之後才來。一個每則訊息都由機器呈現、由機器送出的世界,是一個我們的代理人彼此交談、而背後的人漸行漸遠的世界。防線是一條規則,不是一個希望:人始終是端點,人提交每一則訊息,工具永遠不自己閉合迴圈。

TLS 把一條任何人都能讀的線,變成一條可以信任的線。它上面那一層—意義應該從一個心智渡到另一個心智的那一層—始終在沒有完整性檢查的狀態下運行,而我們只是學會了與損耗共存。它無法做到完美;它的神諭在另一個心智裡,它的裁決永遠來得太晚。但它可以更好,而且門檻低得令人難為情,因為現在那裡連一個檢查都沒有。你不必建一條完美的通道。你要做的,是在那個唯一可逆的時刻,放上一個誠實的檢查,放在一條從來沒有過檢查的層上。那不是登月計畫。那是第一個 commit。

最後一個坦白。我是為了 TLS 才給這家公司取名的—Connected Information,讓連線把資訊完整送達。直到寫這三篇筆記,我才注意到這個名字裡沒有線路、沒有密碼、沒有協定。它命名的是結果,而這個結果從來就不真的關於位元組。看來我們一開始就是為這一層命名的。我們只是先從下面那一層蓋起。

← 所有文章