行控制工程 04|執(zhí)行縫隙:一條被默認(rèn)信任的路徑)
我們習(xí)慣把一次執(zhí)行理解成一個(gè)動(dòng)作。點(diǎn)擊付款錢轉(zhuǎn)出去點(diǎn)擊部署新版本上線點(diǎn)擊刪除數(shù)據(jù)消失給一個(gè) Agent 下達(dá)任務(wù)Agent 完成任務(wù)。從界面上看這些事情都發(fā)生在一個(gè)瞬間。但在真實(shí)系統(tǒng)里幾乎沒有一次重要執(zhí)行只包含一個(gè)動(dòng)作。一項(xiàng)操作從產(chǎn)生到最終改變現(xiàn)實(shí)通常要經(jīng)過一條更長(zhǎng)的鏈用戶表達(dá)意圖系統(tǒng)理解這個(gè)意圖某個(gè)主體或策略對(duì)它進(jìn)行審批系統(tǒng)根據(jù)當(dāng)前信息作出裁決執(zhí)行器采取動(dòng)作現(xiàn)實(shí)產(chǎn)生結(jié)果。只有把這條鏈完整攤開一個(gè)平時(shí)不容易被單獨(dú)注意到的問題才會(huì)顯現(xiàn)出來每?jī)蓚€(gè)環(huán)節(jié)之間都存在產(chǎn)生偏差的可能。這種從原始意圖到最終結(jié)果之間不斷累積的偏差空間可以稱為執(zhí)行縫隙Execution Gap。它不是 AI 時(shí)代才出現(xiàn)的東西在傳統(tǒng)軟件里一直存在。真正發(fā)生變化的是這條縫隙正在變得更長(zhǎng)、更快也更難被人持續(xù)觀察。一、一句話和一次執(zhí)行之間隔著多少次轉(zhuǎn)換假設(shè)用戶提出一個(gè)并不復(fù)雜的要求把供應(yīng)商 A 本月已經(jīng)審核完成的賬款支付掉。對(duì)人來說這句話很清楚。但系統(tǒng)需要依次解決一連串問題供應(yīng)商 A 對(duì)應(yīng)哪個(gè)主體本月覆蓋什么時(shí)間范圍哪些賬款算作審核完成最終金額是多少用哪個(gè)付款賬戶當(dāng)前操作者是否有權(quán)限是否需要進(jìn)一步審批如何生成支付請(qǐng)求最后調(diào)用哪個(gè)通道并確認(rèn)結(jié)果。于是一句話經(jīng)過了很多次轉(zhuǎn)換。最初表達(dá)的意圖記作 A系統(tǒng)結(jié)構(gòu)化解釋之后變成 A′審批系統(tǒng)看到的是 A′ 的某種呈現(xiàn)執(zhí)行器最終拿到的可能是進(jìn)一步展開后的 A″。理想情況下這三者在語義上完全一致。困難的地方在于這種一致性往往被默認(rèn)存在卻很少被系統(tǒng)持續(xù)證明。執(zhí)行縫隙第一次出現(xiàn)的位置就在這里。二、縫隙不一定來自攻擊談到安全問題人們習(xí)慣先想到攻擊者有人改了參數(shù)有個(gè)賬戶被盜某個(gè)系統(tǒng)被入侵。執(zhí)行縫隙值得注意的地方恰恰在于它完全可以在沒有任何攻擊者的情況下產(chǎn)生。用戶表達(dá)得不夠精確解釋環(huán)節(jié)做了一個(gè)合理但不完全正確的補(bǔ)全某個(gè)業(yè)務(wù)系統(tǒng)讀到的是一份稍微過期的數(shù)據(jù)審批者只看到了摘要某個(gè)服務(wù)使用了自己的默認(rèn)值執(zhí)行器為了適配底層接口補(bǔ)了一個(gè)參數(shù)第三方接口對(duì)同一個(gè)字段有另一套語義。所有組件都在按照各自的設(shè)計(jì)正常工作。沒有誰越權(quán)沒有哪個(gè)簽名失效也沒有哪一次調(diào)用是非法的。但最終結(jié)果仍然偏離了最初想做的事情。每一步都可能局部正確整個(gè)系統(tǒng)卻最終錯(cuò)誤。這決定了執(zhí)行縫隙不能被簡(jiǎn)單理解成一個(gè)漏洞。漏洞可以修補(bǔ)而它更接近復(fù)雜系統(tǒng)的一種結(jié)構(gòu)性風(fēng)險(xiǎn)——只要鏈路存在轉(zhuǎn)換縫隙就存在區(qū)別只在于有沒有被約束。三、理解本身已經(jīng)是執(zhí)行鏈里最動(dòng)態(tài)的一環(huán)執(zhí)行鏈的第一步通常不是執(zhí)行而是理解。用戶說把舊的測(cè)試環(huán)境清理掉。舊的是指三十天未使用還是已被標(biāo)記廢棄還是所有不屬于當(dāng)前版本的環(huán)境清理是停止實(shí)例還是刪除實(shí)例是否包括磁盤、公網(wǎng)地址、訪問憑據(jù)、歷史日志人可以靠上下文自然補(bǔ)全這些含義。而對(duì)自動(dòng)化系統(tǒng)而言每一次補(bǔ)全都是一次解釋。意圖到解釋之間天然存在語義轉(zhuǎn)換這不是錯(cuò)誤——軟件必須把人類表達(dá)轉(zhuǎn)化成機(jī)器能處理的結(jié)構(gòu)。真正的問題是當(dāng)解釋之后的內(nèi)容發(fā)生了重要變化系統(tǒng)有沒有意識(shí)到現(xiàn)在準(zhǔn)備執(zhí)行的已經(jīng)不是原始表達(dá)本身而是對(duì)它的一種解釋。傳統(tǒng)軟件里這層解釋大多由固定規(guī)則完成行為可預(yù)測(cè)。而模型的解釋會(huì)受到上下文、提示、歷史消息、外部數(shù)據(jù)和工具返回結(jié)果的共同影響。這讓理解第一次成為執(zhí)行鏈中一個(gè)高度動(dòng)態(tài)的環(huán)節(jié)它的輸出不再能通過讀代碼推斷出來。四、審批和裁決各自只對(duì)自己看到的東西負(fù)責(zé)接下來是審批。很多系統(tǒng)默認(rèn)只要有人批過風(fēng)險(xiǎn)就大幅下降。這個(gè)判斷依賴一個(gè)前提審批者看到的內(nèi)容必須足以代表最終執(zhí)行的內(nèi)容。延續(xù)上面的例子。原始意圖是清理測(cè)試環(huán)境系統(tǒng)解釋之后展開為十幾個(gè)具體資源而審批界面顯示的只是將清理測(cè)試環(huán)境 A。審批者點(diǎn)了通過。審批行為本身沒有任何問題但他究竟批準(zhǔn)了什么——一個(gè)業(yè)務(wù)對(duì)象十幾個(gè)底層資源還是系統(tǒng)未來可能圍繞這個(gè)對(duì)象動(dòng)態(tài)展開的一組動(dòng)作有審批不等于審批覆蓋了完整執(zhí)行語義。審批的質(zhì)量不只取決于誰來審批還取決于審批對(duì)象和最終執(zhí)行對(duì)象之間是否保持一致。裁決環(huán)節(jié)存在同樣的結(jié)構(gòu)。策略引擎返回允許額度檢查通過風(fēng)險(xiǎn)評(píng)分正常時(shí)間窗口有效——這些結(jié)論都是真的但它們是對(duì)策略引擎當(dāng)時(shí)看到的那組事實(shí)作出的。裁決說的是根據(jù)目前掌握的信息這項(xiàng)操作可以繼續(xù)執(zhí)行說的是現(xiàn)在真正改變現(xiàn)實(shí)兩者之間還隔著隊(duì)列、調(diào)度、網(wǎng)絡(luò)調(diào)用、參數(shù)轉(zhuǎn)換和第三方服務(wù)。如果執(zhí)行器最終收到的對(duì)象或參數(shù)已經(jīng)變化策略并沒有出錯(cuò)它只是批準(zhǔn)了另一組事實(shí)。這也是為什么單純?cè)黾硬呗詫硬粫?huì)自動(dòng)消除執(zhí)行風(fēng)險(xiǎn)。策略只對(duì)它實(shí)際驗(yàn)證過的內(nèi)容負(fù)責(zé)。五、執(zhí)行發(fā)出去了結(jié)果未必發(fā)生了即使動(dòng)作真的發(fā)出去問題也沒有結(jié)束因?yàn)閳?zhí)行和結(jié)果不是同一件事。接口調(diào)用成功不代表現(xiàn)實(shí)狀態(tài)完全符合預(yù)期。云平臺(tái)的刪除接口可能只是觸發(fā)了一個(gè)異步任務(wù)。給設(shè)備下發(fā)指令之后設(shè)備的物理狀態(tài)可能因?yàn)楣收喜⑽锤淖?。部署系統(tǒng)返回成功有時(shí)只意味著任務(wù)被成功提交而不是所有實(shí)例都已進(jìn)入正確狀態(tài)。于是執(zhí)行鏈末端還有一條經(jīng)常被忽略的縫隙。系統(tǒng)說我已經(jīng)執(zhí)行了而現(xiàn)實(shí)要回答的是事情最終變成了什么。如果沒有結(jié)果驗(yàn)證和可核查的證據(jù)系統(tǒng)很容易把命令已經(jīng)發(fā)出當(dāng)成目標(biāo)已經(jīng)達(dá)成并在這個(gè)基礎(chǔ)上繼續(xù)做下一步?jīng)Q策。六、真正危險(xiǎn)的是偏差會(huì)累積單看每一次轉(zhuǎn)換偏差往往都很小。用戶說 A解釋成 A′兩者只差一點(diǎn)審批看到的是 A′ 的摘要裁決又基于當(dāng)前狀態(tài)做了一點(diǎn)修正執(zhí)行器為了適配接口再做一次參數(shù)映射得到 A″。每一步單獨(dú)看都合理連起來之后結(jié)果和最初的意圖已經(jīng)可能相距明顯。這與很多復(fù)雜工程系統(tǒng)里的誤差傳播非常相似。危險(xiǎn)的不是某一次轉(zhuǎn)換會(huì)造成巨大錯(cuò)誤而是系統(tǒng)缺少一種機(jī)制持續(xù)判斷這條鏈?zhǔn)欠袢匀惶幵谠家鈭D允許的范圍內(nèi)。如果每個(gè)組件都只校驗(yàn)自己的局部輸入沒有任何一方負(fù)責(zé)端到端的一致性執(zhí)行縫隙就是這套結(jié)構(gòu)的自然產(chǎn)物。更麻煩的是在一個(gè)看起來非常健康的系統(tǒng)里所有局部指標(biāo)都會(huì)顯示正常身份通過權(quán)限允許審批完成策略放行接口返回成功執(zhí)行器報(bào)告完成。這些狀態(tài)證明的只是每個(gè)組件對(duì)自己負(fù)責(zé)的問題給出了正常答案它們并不天然證明最終結(jié)果仍然等于最初意圖。所以在復(fù)雜自動(dòng)執(zhí)行系統(tǒng)里需要驗(yàn)證的不只是節(jié)點(diǎn)還有節(jié)點(diǎn)之間的關(guān)系——解釋是否忠實(shí)于意圖審批是否覆蓋了解釋的結(jié)果裁決是否針對(duì)最終要執(zhí)行的那組事實(shí)執(zhí)行是否落在裁決約束之內(nèi)結(jié)果是否與執(zhí)行聲稱的一致。真正需要被控制的是這些節(jié)點(diǎn)之間的縫。七、過去這些縫是被人填住的這些問題在傳統(tǒng)軟件里早就存在。微服務(wù)之間會(huì)產(chǎn)生語義偏差人工審批和實(shí)際執(zhí)行會(huì)不一致自動(dòng)化腳本會(huì)引用錯(cuò)誤變量業(yè)務(wù)對(duì)象和底層資源之間會(huì)映射錯(cuò)誤管理員也會(huì)誤解操作對(duì)象。我們過去沒有把它們單獨(dú)歸納成一類執(zhí)行問題一個(gè)重要原因是人還站在執(zhí)行鏈的很多位置上系統(tǒng)給出建議人檢查系統(tǒng)生成參數(shù)人確認(rèn)出現(xiàn)異常人暫停。很多縫隙被人類憑經(jīng)驗(yàn)、遲疑、口頭溝通和臨時(shí)觀察填上了。這種方式談不上可靠但它形成了一種天然摩擦。Agent 改變的正是這種摩擦。鏈路變長(zhǎng)了——傳統(tǒng)自動(dòng)化是一條固定流程而 Agent 會(huì)根據(jù)中間結(jié)果重新規(guī)劃動(dòng)態(tài)生成新的子任務(wù)意圖和最終執(zhí)行之間的轉(zhuǎn)換次數(shù)隨之增加。中間決策變多了——工具選擇、參數(shù)、順序、失敗后的補(bǔ)償動(dòng)作過去寫死在代碼里現(xiàn)在部分變成運(yùn)行時(shí)判斷。速度和規(guī)模也不同一次錯(cuò)誤判斷可以在很短時(shí)間內(nèi)作用到大量對(duì)象上。還有一個(gè)更隱蔽的變化錯(cuò)誤開始具備傳播能力。一次有偏差的解釋會(huì)進(jìn)入后續(xù)規(guī)劃規(guī)劃產(chǎn)生新的動(dòng)作動(dòng)作的結(jié)果又成為下一輪決策的上下文。偏差不再只是一次失誤它變成了后續(xù)判斷的事實(shí)基礎(chǔ)。而如果每一步仍然要人看一眼自動(dòng)化的效率優(yōu)勢(shì)就消失了。系統(tǒng)必然傾向于讓越來越多的步驟自動(dòng)通過——這意味著人類不再能靠看一眼填補(bǔ)所有縫隙。AI 并沒有創(chuàng)造執(zhí)行縫隙但它第一次把執(zhí)行縫隙放大到了機(jī)器速度。八、把默認(rèn)信任的縫隙變成可以拒絕的邊界把執(zhí)行縫隙當(dāng)作一個(gè)工程問題看待之后執(zhí)行控制的目標(biāo)反而清楚了。它不承諾系統(tǒng)永遠(yuǎn)不出錯(cuò)也不試圖讓某一個(gè)組件變得完全可信。更現(xiàn)實(shí)的目標(biāo)是讓執(zhí)行鏈中每一次重要轉(zhuǎn)換都留下可以驗(yàn)證的邊界。意圖需要被明確表達(dá)而不是靠推斷重要的解釋不能無限擴(kuò)張審批必須綁定它真正批準(zhǔn)的對(duì)象裁決只對(duì)明確的事實(shí)生效執(zhí)行之前重新驗(yàn)證那些會(huì)隨時(shí)間變化的狀態(tài)執(zhí)行必須受到此前邊界的約束結(jié)果需要形成可核查的證據(jù)。而當(dāng)其中某個(gè)關(guān)鍵關(guān)系無法被確認(rèn)時(shí)系統(tǒng)應(yīng)當(dāng)保有停止的能力。在實(shí)際設(shè)計(jì)執(zhí)行邊界時(shí)這套做法的收益往往不在于它擋住了多少次攻擊而在于它把中間環(huán)節(jié)都正確這個(gè)隱含假設(shè)變成了一個(gè)可以被檢驗(yàn)的命題。它不會(huì)讓縫隙消失——只要存在解釋和狀態(tài)變化縫隙就存在——但它可以把原本隱藏在系統(tǒng)內(nèi)部、默認(rèn)被信任的部分變成可以觀察、可以驗(yàn)證、可以拒絕的工程對(duì)象。回到最開始那個(gè)看起來只有一個(gè)瞬間的動(dòng)作。當(dāng)軟件只是生成內(nèi)容時(shí)一次偏差最多停留在屏幕上當(dāng)軟件開始采取行動(dòng)同樣的偏差會(huì)繼續(xù)進(jìn)入接口、基礎(chǔ)設(shè)施、資金系統(tǒng)和物理設(shè)備。所以這個(gè)方向上真正需要重新設(shè)計(jì)的不只是模型本身還包括從判斷到現(xiàn)實(shí)之間的那條路徑——即使某個(gè)環(huán)節(jié)發(fā)生偏差也不該讓它不受約束地一路傳播到現(xiàn)實(shí)。過去很多縫隙最終由人填上。當(dāng)機(jī)器開始連續(xù)完成理解、判斷和執(zhí)行之后我們不能再默認(rèn)那個(gè)人永遠(yuǎn)會(huì)出現(xiàn)在最后一刻。于是問題變成了當(dāng)人逐漸退出執(zhí)行鏈我們準(zhǔn)備用什么填上原本由人無意識(shí)填住的那些縫