”運行時)
“Agent 即操作系統(tǒng)”這個說法第一次看到時我覺得又是一輪熱詞營銷。但后來真把一個帶工具調(diào)用、多智能體協(xié)作、長任務(wù)拆解的系統(tǒng)放到生產(chǎn)環(huán)境里跑我發(fā)現(xiàn)自己每天都在用的概念全是操作系統(tǒng)的老概念調(diào)度、上下文管理、權(quán)限、觀測、故障隔離。這讓我重新開始思考我們可能在經(jīng)歷一個真正意義上的平臺遷移而這個遷移的核心隱藏術(shù)語不是“大模型”而是“Agent Harness Engineering”。這篇文章我準(zhǔn)備從工程視角把這層窗戶紙捅開為什么說 Agent 會像操作系統(tǒng)一樣成為計算平臺的中樞Harness 到底在解決什么問題一個能落地的 Harness 架構(gòu)大概長什么樣以及過程中會遇到哪些我實際踩過的坑。適合正在做 Agent 應(yīng)用、做 AI 基礎(chǔ)設(shè)施、或者只是好奇“未來計算平臺到底會怎樣演化”的讀者。我的判斷是未來兩年能否把 Agent 穩(wěn)定、安全、可控地跑起來取決于你有沒有把這層“殼”當(dāng)回事。1. “Agent 即操作系統(tǒng)”到底在說什么1.1 它不是營銷話術(shù)一套運行時該解決的事我們先別急著討論“會不會”先討論“像不像”。操作系統(tǒng)解決的核心問題是如何把硬件資源抽象成一個個可管理的進程再把這些進程和外部設(shè)備、存儲、網(wǎng)絡(luò)安全地組織起來。現(xiàn)代 Agent 系統(tǒng)面對的問題幾乎是同構(gòu)的。一個大模型 Agent 有上下文窗口類似內(nèi)存、工具調(diào)用能力類似系統(tǒng)調(diào)用、任務(wù)規(guī)劃循環(huán)類似進程調(diào)度、外部工具網(wǎng)絡(luò)類似設(shè)備驅(qū)動、環(huán)境權(quán)限策略類似用戶權(quán)限控制。任何一個環(huán)節(jié)失控整個系統(tǒng)就會崩掉上下文被塞滿Agent“失憶”工具權(quán)限沒限制結(jié)果它把整個數(shù)據(jù)目錄刪了任務(wù)規(guī)劃循環(huán)沒有退出條件兩個子任務(wù)互相依賴永遠等不到終止信號。你會發(fā)現(xiàn)這已經(jīng)完全不是“把 Prompt 寫好”就能解決的問題了。它要求一個工程上非常成熟的控制層。這個控制層在業(yè)界被越來越多人叫做 Agent Harness也就是所謂的“約束框架”“運行骨架”里面的工程實踐就是 Agent Harness Engineering。我舉個例子傳統(tǒng)操作系統(tǒng)用進程管理來做資源隔離和恢復(fù)。某個進程掛掉了內(nèi)核會回收它的內(nèi)存釋放它的文件句柄把崩潰信息寫到日志里然后調(diào)度器繼續(xù)跑別的進程。Agent 場景里你同樣需要這個機制Agent A 在調(diào)一個外部 API 時掛了你總不希望整個任務(wù)鏈都跟著死掉吧你希望超時觸發(fā)、退避重試、把失敗任務(wù)標(biāo)記出來、把該回收的 token 預(yù)算拿回來然后讓主流程往別的分支走。這個機制不會自己長出來全部要靠 Harness 做進去。1.2 一份懷舊的映射表從操作系統(tǒng)到 Agent 運行時為了更好溝通我把它整理成一份對照關(guān)系和團隊討論時也經(jīng)常直接用它當(dāng)目錄操作系統(tǒng)概念A(yù)gent 運行時對應(yīng)物不做的后果進程一次任務(wù)執(zhí)行流程也就是 Agent Run任務(wù)無法追溯中斷后救不回來內(nèi)存上下文窗口 / 工作上下文字段上下文塞滿后關(guān)鍵信息被裁掉調(diào)度器任務(wù)規(guī)劃循環(huán)、子任務(wù)拆分與合并多任務(wù)互相阻塞效率無法保證設(shè)備驅(qū)動工具適配層函數(shù)調(diào)用 schema 與執(zhí)行工具沖突、接口參數(shù)錯亂用戶權(quán)限工具權(quán)限策略 / 環(huán)境隔離權(quán)限過大Agent 篡改關(guān)鍵數(shù)據(jù)日志系統(tǒng)Trace / 過程記錄出錯時無法定位是哪一步哪個工具出的問題睡眠喚醒機制長期記憶 / 外部持久化狀態(tài)任務(wù)中斷后無法恢復(fù)進度我見過不少團隊來來回回討論“服務(wù)端 Agent 怎么設(shè)計”大家爭執(zhí)的內(nèi)容幾乎全是操作系統(tǒng)的設(shè)計思想。沒有這套 Harness你只能得到一個“單次對話式”的智能應(yīng)用你問一句它答一句不能自己安排多個步驟去解決問題。而有了這套 Harness模型才能成為執(zhí)行復(fù)雜任務(wù)的引擎工具才能成為可以被安全調(diào)用的外設(shè)數(shù)據(jù)才能被最小化暴露。操作系統(tǒng)目前是計算設(shè)備的底座。如果 Agent 真的是新的應(yīng)用形態(tài)那 Agent Harness 就會成為新的計算底座的一部分。2. Agent Harness Engineering 在解決什么2.1 六個繞不開的子系統(tǒng)拿我實際做過的生產(chǎn)級 Agent 項目拆開看一個 Harness 至少要承擔(dān)六件事上下文管理給上下文定預(yù)算、做壓縮、做摘要、控制“哪些信息必須常駐、哪些信息可以被歸檔”。工具接入與管理把外部 API、數(shù)據(jù)庫、代碼執(zhí)行環(huán)境封裝成“可以安全調(diào)用的函數(shù)”定義函數(shù) schema、鑒權(quán)、超時、重試。記憶 / 狀態(tài)管理臨時狀態(tài)和永久記憶要分開。臨時狀態(tài)類似于“進程里的變量”任務(wù)結(jié)束就釋放長期記憶要落到外部存儲里。權(quán)限與安全沙箱決定一個 Agent 到底能調(diào)用哪些工具、讀取哪些內(nèi)容、寫入哪些系統(tǒng)、訪問哪些數(shù)據(jù)范圍。權(quán)限邊界不能寬到讓 Agent 為所欲為。可觀測性與追蹤記錄一個任務(wù)里的每一步思考、每一個工具返回、每一處狀態(tài)變更方便事后回溯。評測與閉環(huán)光能跑起來不算完成你得能量化跑得好不好針對典型任務(wù)做回歸測試和分?jǐn)?shù)對比。這六個子系統(tǒng)缺哪個都能跑 Demo但只要到了生產(chǎn)少了任何一個都會以最難看的方式暴雷。2.2 它和提示工程、模型訓(xùn)練根本不是一回事行業(yè)里經(jīng)常有人把 Agent 做得不好歸咎于“提示詞不行”或“模型不夠聰明”。在我看來這是一個認知錯誤。提示工程解決的是“怎么讓模型在本輪對話里給出更合適的回應(yīng)”模型訓(xùn)練解決的是“在語料里學(xué)到一個能力”。而 Harness 解決的是“如何讓模型在一個受控的運行時里安全、可靠、可觀測地完成一個可能超出單輪對話的任務(wù)。”這兩者的邊界我是在一個具體事故里徹底分清的。曾經(jīng)做一個多步驟研究 Agent用戶給了一個很寬泛的問題Agent 自己拆出來 12 個子問題一個接一個去搜索。結(jié)果到第 9 個子問題時前面的搜索上下文已經(jīng)快撐爆窗口它開始拿第 4 個子問題的答案去回答第 9 個問題。我當(dāng)時補了多少句話術(shù)都不管用因為問題根子不在提示詞而在上下文管理層根本沒有做“預(yù)算控制”和“階段性壓縮”。我最后在 Harness 里加了一個上下文管理模塊每完成 3 個子問題就把前 3 個的結(jié)論摘要成一個緊湊的“研究工作筆記”丟進長期記憶再把原始細節(jié)清出上下文系統(tǒng)才恢復(fù)正常。如果你能把“提示詞解決不了的問題”識別為“運行時問題”你就走到正確的工程思路上來了。2.3 “會調(diào) API”不等于“能讓 Agent 干活”還有一個常見的坑以為給 Agent 接上幾個 API就等于擁有了一個“能幫你干活的智能體”?,F(xiàn)實是沒有 Harness 的 API 調(diào)用本質(zhì)上就是一段單輪問答加強版它連一個跨 20 分鐘的長任務(wù)都沒法穩(wěn)定完成因為它沒有狀態(tài)管理沒有恢復(fù)機制沒有上下文清理能力。我們做個最簡單的推演。任務(wù)幫用戶收集三家供應(yīng)商的報價并輸出對比表格。理論上Agent 需要搜索供應(yīng)商 A 的網(wǎng)頁 → 讀取報價單 → 記錄 → 搜索供應(yīng)商 B → 記錄 → 搜索供應(yīng)商 C → 記錄 → 對比。這還沒算網(wǎng)頁下載失敗、數(shù)據(jù)格式不一致、廠商頁面有反爬驗證這些中段才出現(xiàn)的意外情況。沒有 Harness模型一旦走到第 3 步發(fā)現(xiàn)連不上網(wǎng)頁往往就直接“自由發(fā)揮”要么編一個假價格要么把已經(jīng)采集到的 A 數(shù)據(jù)丟掉重新開始。而有了 Harness你可以在代碼里規(guī)定“抓取失敗就換一個可替代的信息源”“已采集到的結(jié)構(gòu)化數(shù)據(jù)要持久化到任務(wù)內(nèi)存里不能因為一次失敗就丟”“如果某個數(shù)據(jù)源反復(fù)失敗則標(biāo)記為缺失并在最終報告里如實說明”。你發(fā)現(xiàn)沒有這些規(guī)則本質(zhì)上跟模型是否聰明已經(jīng)完全脫鉤了它是一套工程規(guī)范。**Agent 的“能力上限”靠模型決定但它的“能力下限”靠 Harness 保證。**生產(chǎn)環(huán)境里我們更關(guān)心下限。3. 一個可落地的 Harness 架構(gòu)設(shè)計3.1 設(shè)計原則不超過一百行的思考清單我復(fù)盤了實際上手過的幾個版本有一個原則非常關(guān)鍵Harness 永遠要在朝著“系統(tǒng)化”演進而不是朝“裝飾性殼子”演進。具體拆下來有五條工具先于模型先把 Agent 能干什么固化下來定義好工具 schema 和調(diào)用邊界再設(shè)計 Prompt。上下文是有限資源它就像操作系統(tǒng)里的內(nèi)存要有預(yù)算表要有主動壓縮策略不能放任自然增長。默認最小權(quán)限Agent 的權(quán)限永遠只給當(dāng)前任務(wù)真正需要的最小集合。一切行為皆可追溯每一步都要有 trace ID每個工具調(diào)用都要記錄入?yún)?、出參、耗時。失敗是預(yù)期內(nèi)的事件把超時、重試、降級、退出寫到設(shè)計里而不是等到事故爆發(fā)再救火。這五條可能看起來像正確的廢話實際上每一條在實際落地時都對應(yīng)一套具體代碼結(jié)構(gòu)。下面展開講。3.2 運行時核心模塊與流程我通常會把運行時組織成這幾個模塊描述式地把它們當(dāng)成“內(nèi)部操作系統(tǒng)”的幾個子系統(tǒng)任務(wù)調(diào)度循環(huán)主循環(huán)負責(zé)完成任務(wù)拆解和步驟執(zhí)行。每次從“待辦隊列”提取一個目標(biāo)在上下文允許的范圍內(nèi)讓模型產(chǎn)出“下一步動作Action”再把這個動作路由給工具執(zhí)行器。循環(huán)的退出條件必須明確要么所有目標(biāo)完成要么達到最大步數(shù)上限要么發(fā)生無法恢復(fù)的錯誤且沒有 fallback。工具注冊表一個工具注冊中心。每個工具需要提供函數(shù)名和自然語言描述入?yún)⒑统鰠⒌?JSON Schema一個校驗器用 Schema 對模型的輸出做校驗錯了就要求重新生成一個執(zhí)行器對應(yīng)到真正的 API 調(diào)用或代碼執(zhí)行超時設(shè)置和最大重試次數(shù)權(quán)限標(biāo)簽例如“只讀”“寫內(nèi)部臨時文件”“可執(zhí)行外部命令”。上下文管理器維護一個上下文內(nèi)存池動態(tài)決定哪些內(nèi)容放進模型、哪些內(nèi)容放進摘要、哪些內(nèi)容落盤為長期記憶。有一個預(yù)算系統(tǒng)提示占多少、工具定義占多少、當(dāng)前任務(wù)內(nèi)容占多少、歷史摘要占多少、最近中間結(jié)果占多少都在預(yù)算表里。狀態(tài)存儲把任務(wù)的中間狀態(tài)序列化到 Redis 或 PostgreSQL 之類的外部存儲里。這樣就算服務(wù)重啟Agent 也可以從斷點恢復(fù)。沙箱執(zhí)行環(huán)境工具調(diào)用不等于直接裸奔到生產(chǎn)環(huán)境。代碼執(zhí)行類工具放進容器里運行數(shù)據(jù)庫操作默認走只讀事務(wù)外部網(wǎng)絡(luò)請求走可控出口。權(quán)限底座由 Harness 統(tǒng)一管理。跟蹤器Tracer)每個任務(wù)一個 Trace ID每個工具調(diào)用一個 Span ID。每個 Span 記錄調(diào)用了什么、入?yún)⑹鞘裁?、返回了什么、耗時多少、有沒有報錯、有哪些相關(guān)子步驟。3.3 上下文管理那筆必須精打細算的“內(nèi)存賬”給上下文做預(yù)算本質(zhì)上是在說“你只有有限的錢但你需要完成一個復(fù)雜旅程”。我用一個約定俗成的預(yù)算配比來說明系統(tǒng)指令與全局規(guī)則約占 5%-10%常駐不動的部分告訴模型“你是誰你該如何表現(xiàn)”。工具定義與使用說明約占 15%-25%。工具數(shù)量太大會擠占預(yù)算這時要做工具分層加載只加載當(dāng)前任務(wù)步驟可能用到的工具。當(dāng)前任務(wù)的原始輸入和目標(biāo)約占 10%-15%。必須常駐這是“任務(wù)說明”。中間過程摘要約占 20%-30%來自之前完成步驟的結(jié)論摘要。當(dāng)前步驟相關(guān)內(nèi)容約占 25%-40%就是最近兩三輪 Action / Observation 的原始內(nèi)容。這個配比不是死的但它逼著你思考一個重要問題你的上下文里必須存在什么哪些可以刪除哪些可以壓縮哪些必須原樣保留分類完之后還要有一個“壓縮與恢復(fù)機制”當(dāng)所需內(nèi)容超出預(yù)算時Harness 先把當(dāng)前步驟最近的原始交互保留再壓縮最遠的舊步驟同時把壓縮前的原始信息寫入長期記憶存儲保證后續(xù)任務(wù)還有恢復(fù)的可能。我自己最喜歡用的策略是“結(jié)論筆記 原始分片”每完成一個子任務(wù)就自動把子任務(wù)的結(jié)論整理成筆記同時把對應(yīng)原始工具返回內(nèi)容分片存儲到外部數(shù)據(jù)庫上下文長文只保留筆記。用戶追問細節(jié)時再按筆記里的索引去外部存儲里檢索原始分片。這讓長任務(wù) Agent 能夠在有限上下文里“走得更遠”。3.4 工具接口把“外部能力”變成安全的可調(diào)用函數(shù)工具層是大量事故的高發(fā)區(qū)。工具定義得好Agent 會像裝了瑞士軍刀定義得亂它就像一個把所有按鈕都做在正面而且沒有防誤觸的爆炸裝置。我會要求每種工具都滿足這個模式一個自然語言描述盡量說清楚“何時該用這個工具”。這決定模型調(diào)用的準(zhǔn)確率。一個嚴(yán)格 JSON Schema 入?yún)⒍x。模型一旦輸出不合法參數(shù)校驗器直接拒絕并給出錯誤信息要求重新生成。一個返回值格式化器把原始響應(yīng)整理成對后續(xù)步驟友好的結(jié)構(gòu)化文本盡量抹掉無關(guān)噪聲。一個安全控制層負責(zé)鑒權(quán)、限速、白名單、數(shù)據(jù)脫敏。舉個例子一個“查詢訂單物流”的工具入?yún)⒍x為order_id字符串必須匹配訂單號前綴和query_type枚舉只允許 “l(fā)atest_status” 和 “full_trace”。校驗器拿到模型輸出后先校驗參數(shù)不合法直接拒絕。返回格式化器再把物流記錄整理成“時間 環(huán)節(jié) 狀態(tài)描述”。這樣模型后續(xù)就不需要看大量 JSON 原始響應(yīng)既能省 token又不容易從中“腦補”出錯誤信息。如果你有幾十個工具還面臨一個被稱為“工具爆炸”的問題模型面對 40 個工具時的選擇準(zhǔn)確率明顯低于面對 8 個工具。解決方案就是做工具分層一個頂層工具是“導(dǎo)航工具”告訴模型“你現(xiàn)在這個需求應(yīng)該跳轉(zhuǎn)到哪個能力組”每個能力組內(nèi)部再由“跳轉(zhuǎn)后的子模型”去調(diào)用具體工具。這在多階段任務(wù)場景下尤其明顯。4. 運行中的“操作系統(tǒng)”調(diào)度、可靠性與可觀測性4.1 調(diào)度與資源控制多 Agent 并行時的“進程管理”真實生產(chǎn)系統(tǒng)很少只有一個 Agent。我實際跑過的系統(tǒng)往往是一個主控 Agent 負責(zé)最終目標(biāo)拆解多個執(zhí)行 Agent 并行去完成各自的子任務(wù)比如一個是搜索信息一個是查內(nèi)部數(shù)據(jù)庫一個是寫代碼。然后主控 Agent 收集執(zhí)行 Agent 的結(jié)果做綜合決策。這帶來了一個典型的“操作系統(tǒng)”問題如何調(diào)度多個執(zhí)行 Agent 的資源使用和運行生命周期才能不餓死主控我最終采用的策略像一個協(xié)作式多任務(wù)模型每個執(zhí)行 Agent 是獨立的 worker跑在獨立的“執(zhí)行槽位”上有獨立的最大步數(shù)和超時時間。主控 Agent 只負責(zé)分配任務(wù)、收結(jié)果不阻塞等待執(zhí)行期間的空轉(zhuǎn)。執(zhí)行 Agent 返回結(jié)果后主控再去匯總。如果某個執(zhí)行 Agent 超時或連續(xù)失敗主控必須能繼續(xù)處理“部分成功”的結(jié)果而不是整體崩潰做不到這一步就加一個中轉(zhuǎn)兜底把未完成項標(biāo)記為“待人工確認”讓系統(tǒng)流向下游。這里面最考驗工程能力的一點是整體失敗不等于局部失敗。局部失敗可以如實記錄后續(xù)步驟照走。這個原則也會反過來影響你的 Prompt 設(shè)計你要在系統(tǒng)指令里告訴模型“某個子任務(wù)失敗后請繼續(xù)執(zhí)行其他子任務(wù)并在最終報告里明確列出失敗項”。4.2 可觀測性看一個 Agent 的“進程狀態(tài)”而不只是網(wǎng)絡(luò)請求傳統(tǒng)后端觀測是“得到 response 就完事”。Agent 系統(tǒng)完全不是一個邏輯它不止一次外部請求而是一連串的思考 工具調(diào)用循環(huán)。一個用戶提問背后可能對應(yīng) 20 次模型調(diào)用、14 次工具調(diào)用其中 2 次失敗重試。這類系統(tǒng)出問題時光是看日志根本沒戲。你要看的是完整的 Trace任務(wù)是怎么從“用戶問題”一步步流轉(zhuǎn)到“工具調(diào)用”中間模型做了哪些決策工具返回了什么模型如何基于返回修正計劃什么時候產(chǎn)生了分流和匯總。我用四個維度來組織可觀測性數(shù)據(jù)任務(wù)維度一條 Trace 記錄一個用戶任務(wù)的全過程。步驟維度任務(wù)里每一步模型思考、動作選擇、工具調(diào)用、返回結(jié)果拆成獨立 Span。狀態(tài)維度記錄上下文預(yù)算的消耗、當(dāng)前步驟棧、待辦隊列長短、已經(jīng)完成子任務(wù)數(shù)量。結(jié)果維度最終產(chǎn)出是什么哪些子任務(wù)成功、哪些失敗、耗時多少、成本多少。“看到 Agent 的思考過程”的價值在于當(dāng)模型做出一個錯誤判斷時你能看到它當(dāng)時看到的上下文是什么。之前有個典型 caseAgent 把用戶指令理解偏了我們糾了很久但查完 Trace 才發(fā)現(xiàn)是工具返回中夾雜了一段無關(guān)的推廣信息模型被這段噪聲帶跑了。工具返回值不加清理污染后續(xù)決策這就是 Harness 層面的問題如果不靠 Trace你永遠以為是 Prompt 寫得不好。4.3 從 Trace 到評測閉環(huán)的“質(zhì)檢體系”有觀測只是第一步真正的閉環(huán)還需要一整套評測機制。我的做法是準(zhǔn)備一個“評測任務(wù)集”覆蓋典型任務(wù)和邊界案例例如信息檢索任務(wù)、數(shù)據(jù)處理任務(wù)、工具調(diào)用失敗任務(wù)、上下文極端長任務(wù)。每次 Harness 或 Prompt 改動都把這個任務(wù)集跑一遍。用“過程指標(biāo)” “結(jié)果指標(biāo)”雙通道評估過程指標(biāo)工具調(diào)用成功率、上下文超預(yù)算率、平均步數(shù)、總耗時、失敗重試率。結(jié)果指標(biāo)最終回答是否滿足用戶目標(biāo)。這個可以人工評分也可以用一個大模型裁判按規(guī)則打分。對比同一批任務(wù)在“新版本 vs 舊版本”的得分變化得分回退就回滾。這個機制解決的核心問題是你改了一行 Harness 代碼到底全局變好還是變壞不能被個案感覺左右要有一組數(shù)據(jù)證明。實際過程中評測的“一致性”比“速度”重要得多。我會固定一套評測用例、一套評分標(biāo)準(zhǔn)、同樣的隨機種子。分?jǐn)?shù)偶爾高一點或低一點都可以接受但趨勢要足夠穩(wěn)定。5. 常見問題與避坑實錄5.1 工具爆炸模型在大量工具面前開始“選擇困難”這是接入第三方工具時幾乎必然發(fā)生的事。工具一多模型選擇準(zhǔn)確率就下降經(jīng)常拿錯工具參數(shù)也填錯。踩過坑之后我把工具分成了三層第一層只有 5 個左右“入口工具”比如“搜索網(wǎng)絡(luò)”“查詢內(nèi)部知識庫”“執(zhí)行代碼”“調(diào)用數(shù)據(jù)庫查詢”“讀取郵件”。第二層是每個入口工具內(nèi)部的具體動作。比如“數(shù)據(jù)庫查詢”下面才分“執(zhí)行只讀 SQL”“獲取表結(jié)構(gòu)”“查看 schema”。第三層是更細的輔助操作。模型首先決定“現(xiàn)在這個任務(wù)該走哪個入口”然后由 Harness 把對應(yīng)子工具的詳細 schema 注入到上下文讓模型在那一層里做選擇。一次上下文里永遠只有當(dāng)前階段會用到的工具不把全部 90 個工具一股腦塞給模型。這個過程就像在一個大型 IDE 里手寫代碼你不會把倉庫里所有函數(shù)引用一次性全部導(dǎo)入而是按需引入避免命名空間互相干擾。5.2 上下文碎片化與 API 成本失控長任務(wù)跑著跑著上下文越來越滿模型開始反復(fù)遺忘用戶最初指令。最離譜的一次一個任務(wù)跑 40 分鐘光 token 消耗就是預(yù)期的 6 倍而且答案質(zhì)量越來越差。問題的根因是我們在上下文里保留了太多中間過程的原始輸出沒有做“結(jié)論重構(gòu)”。后來我做了三件事給每個子任務(wù)生成“工作筆記”用一個標(biāo)準(zhǔn)的“目標(biāo) / 步驟 / 結(jié)論 / 下一步”模板寫入上下文。對超過預(yù)算的內(nèi)容Harness 定期執(zhí)行“上下文壓縮”把舊內(nèi)容摘要化原文轉(zhuǎn)移到外部存儲。對用戶核心目標(biāo)始終做一個“priority directive”強行固定在上下文的頭部壓縮時不允許裁掉。成本失控的另一個重要源頭是“過度重試”。工具調(diào)用失敗后如果設(shè)置了無限重試Agent 會像死循環(huán)一樣反復(fù)烤同一個 API。我的規(guī)則是**最多重試 2 次然后標(biāo)記失敗、更換策略或者請求人工確認。**對單次工具調(diào)用的最大 token 消耗也要設(shè)置上限以防模型在一次調(diào)用里生成過量內(nèi)容。5.3 安全邊界與權(quán)限模型混亂Agent 權(quán)限方案是整個體系里最不能含糊的部分。我把它們的策略歸結(jié)為“最小權(quán)限 顯式授權(quán) 動態(tài)環(huán)境”。最小權(quán)限Agent 默認只擁有完成任務(wù)所需的最小權(quán)限集合不做任何“順手”操作。比如查庫存的工具開的是只讀數(shù)據(jù)庫連接對接訂單系統(tǒng)時分環(huán)境讀數(shù)據(jù)歸讀數(shù)據(jù)寫狀態(tài)走獨立受限接口。顯式授權(quán)涉及寫操作、刪除、發(fā)消息給外部用戶等敏感動作時Harness 在流程中顯式插入一個“人工確認步驟”不讓模型直接執(zhí)行。動態(tài)環(huán)境代碼執(zhí)行類工具一律放到一次性容器里跑跑完銷毀。容器內(nèi)沒有生產(chǎn)環(huán)境密鑰外部網(wǎng)絡(luò)默認不通需要出口才開專項白名單。曾經(jīng)有個項目差點出事Agent 被授權(quán)了一個“查詢內(nèi)部 API”的通用憑據(jù)結(jié)果它在某個工具調(diào)用里順手調(diào)用了內(nèi)部“刪除臨時任務(wù)”的接口好在我們把寫操作都擋在沙箱外了不然那一次事故就要演變成一場真實生產(chǎn)事故。權(quán)限永遠不要開“所有”這兩個字。5.4 過程不可復(fù)現(xiàn)問題無法定位很多 Agent 系統(tǒng)做到后來最讓人頭疼的是同一個用戶問題兩次跑出來的行為可能完全不同你根本沒法判斷某個改動到底產(chǎn)生了什么效果。我最后把所有隨機性控制在一個可管理的范圍里給每次任務(wù)分配全局 Run ID并把它傳到模型調(diào)用、工具調(diào)用的所有日志里。對模型采樣參數(shù)設(shè)固定值或低溫度。雖然模型仍然有一定的隨機性但降低到可接受的復(fù)現(xiàn)程度。每個任務(wù)開頭記錄模型版本、Harness 版本、上下文預(yù)算法則、工具列表快照。這樣你才能把“任務(wù)在 A 版本下成功、在 B 版本下失敗”這樣的回歸事實確認下來再定位是因為改了 Prompt、工具定義還是上下文策略。沒有這套可復(fù)現(xiàn)機制評測和調(diào)優(yōu)就是一場猜謎游戲。6. 邊界與大問題什么場景不適合做 Agent6.1 確定性流程不該強行“智能體化”這個判斷十分重要。你在生產(chǎn)環(huán)境里大部分真實任務(wù)其實不需要 Agent比如固定流程的對賬、固定規(guī)則的參數(shù)校驗、固定模板的數(shù)據(jù)轉(zhuǎn)換這些用傳統(tǒng)代碼做又快又穩(wěn)又便宜。Agent 的價值在于面對“非結(jié)構(gòu)化目標(biāo)、不確定路徑、需要動態(tài)決策”的任務(wù)。如果你發(fā)現(xiàn)一個任務(wù)實際上是“輸入一個參數(shù) → 查一次表 → 輸出一個結(jié)果”那就把它固化成普通函數(shù)不要為了讓簡歷好看而強行套一層“智能體”。真實環(huán)境里這是節(jié)約成本也是保證穩(wěn)定最有效的方式之一。我在很多地方都強調(diào)過同一個比喻**Agent 系統(tǒng)不是用來替換所有流程的高射炮而是專門負責(zé)處理那些“沒有固定說明”的難題的特種兵。**特種兵不應(yīng)該被派去站普通崗哨。6.2 成本、延遲與可靠性的三角平衡沒有任何一個方案可以三個目標(biāo)同時拉滿。Agent 系統(tǒng)的天然代價就是慢、貴、不確定性高。所以在設(shè)計 Harness 時我會明確給每個流程設(shè)定“允許智能范圍”能走規(guī)則的一定走規(guī)則只有規(guī)則處理不了的路口才交給 Agent。實踐中我會做一個“路由層”請求先進一個輕量分類器判斷這個任務(wù)是否需要真正的多步推理。不需要就直接走預(yù)設(shè) API 或消息處理流程需要才走帶 Harness 的 Agent 運行時。這相當(dāng)于操作系統(tǒng)里“中斷處理”簡單的命令直接在用戶態(tài)處理不輕易切換到復(fù)雜的內(nèi)核流程。6.3 “成為未來計算平臺的主流范式”到底會不會成真我的判斷是會但不會像現(xiàn)在很多熱詞帖子里說的那么輕巧。Agent 不會取代操作系統(tǒng)但 Agent Harness 會扮演類似操作系統(tǒng)的角色為模型、工具、記憶、權(quán)限、協(xié)作提供一套統(tǒng)一的運行控制和抽象層。未來的計算平臺里模型是所有應(yīng)用的智能內(nèi)核而 Harness 是這個內(nèi)核得以安全暴露給外部環(huán)境的殼?,F(xiàn)在說這樣的話為時尚早但方向足夠清晰。我們能看到一個明顯的趨勢各類底層模型越來越便宜、越來越快、能力越來越強但同時上層應(yīng)用對“可控性、可觀測性、安全性”的要求倒逼出了全新的領(lǐng)域。Agent Harness Engineering 正是把“模型能力”變成“商業(yè)價值”的最后一個關(guān)鍵步驟。這套工程體系當(dāng)然遠沒有成熟它還面臨評測標(biāo)準(zhǔn)不統(tǒng)一、跨平臺互操作難、安全性尚未形成行業(yè)共識等問題。但越早進入這個領(lǐng)域、越早把“將 Agent 置于可控運行規(guī)則之中”作為核心競爭力來建設(shè)未來在計算平臺遷移中能帶走的東西就越多。我自己的體會是三個回退到工程原則的大白話**第一先約束再開放第二讓一切失敗都變得可知、可控、可恢復(fù)第三永遠把用戶目標(biāo)和邊界權(quán)限放在同一個優(yōu)先級上。**只要這三點不變無論未來的平臺叫不叫 Agent 操作系統(tǒng)你手里的這套 Harness 工程積累都不會過時。