環(huán)境踩坑實(shí)錄:Harness如何讓大模型不再“發(fā)瘋”)
文章目錄1. 先搞清楚Harness 是個(gè)啥1.1 什么時(shí)候根本不用上1.2 那 Harness 到底管啥2. 我們?yōu)樯缎枰@東西2.1 數(shù) T 的日志不能全喂給模型2.2 模型沒(méi)有眼睛MCP 就是它的眼鏡2.3 團(tuán)隊(duì)的記憶不能靠腦補(bǔ)3. 具體怎么干3.1 外部工具skill 和 MCP3.2 管理上下文3.2.1 數(shù)據(jù)預(yù)計(jì)算3.2.2 成本控制3.3 規(guī)劃與決策3.3.1 指令系統(tǒng)3.3.2 任務(wù)調(diào)度3.4 知識(shí)管理3.4.1 記憶管理3.4.2 版本控制3.5 前后指標(biāo)對(duì)比眼見(jiàn)為實(shí)4. 還沒(méi)解決的老大難5. 下一步想干嘛P.S. 無(wú)意間發(fā)現(xiàn)了一個(gè)巨牛的人工智能教程非常通俗易懂對(duì)AI感興趣的朋友強(qiáng)烈推薦去看看 傳送門(mén)https://blog.csdn.net/qq_34419312先聲明一下這篇不是教科書(shū)是我被大模型折騰了三個(gè)月之后的血淚匯報(bào)。全程大白話(huà)能聽(tīng)懂模型會(huì)一本正經(jīng)地胡說(shuō)八道這句話(huà)的人都能看下去。1. 先搞清楚Harness 是個(gè)啥OpenAI 今年 2 月把Harness 工程這個(gè)詞炒火了。Harness 直譯過(guò)來(lái)是馬具——韁繩、馬鞍、護(hù)具全算。馬具是干嘛的你見(jiàn)過(guò)不戴籠頭的馬嗎它想往哪跑往哪跑最后跑進(jìn)玉米地你還得扛著胡蘿卜去追。大模型同理。你說(shuō)你要聰明它能聰明地把同一個(gè)需求理解出十八個(gè)版本你說(shuō)你自由發(fā)揮它能在你的生產(chǎn)庫(kù)里自由發(fā)揮出事故。套上馬具它才知道今天該往哪跑、跑到什么程度算完。但先說(shuō)句公道話(huà)不是所有場(chǎng)景都配得上 Harness這玩意兒也有試用門(mén)檻。1.1 什么時(shí)候根本不用上**第一種你就臨時(shí)問(wèn)幾個(gè)問(wèn)題、檢索點(diǎn)資料、單輪對(duì)話(huà)用完就走。**普通模型加 System Prompt 加 RAG 完全夠用這時(shí)候選個(gè)聰明的模型比啥都強(qiáng)。非要上 Harness屬于下樓倒垃圾還要開(kāi)個(gè)作戰(zhàn)會(huì)議。**第二種預(yù)算充足閉眼上最貴最強(qiáng)的模型。**那 Harness 可能反而拖后腿——這就好比給博爾特套一身鉛塊人家本來(lái)能跑你非讓人家先適應(yīng)裝備。**第三種公司從架構(gòu)上就是 AI 原生的核心價(jià)值全建立在模型的推理和決策上。**那你們已經(jīng)是騎在馬背上的騎手了還研究什么馬具研究方向應(yīng)該是怎么讓馬長(zhǎng)翅膀。1.2 那 Harness 到底管啥一句話(huà)總結(jié)Agent 模型 Harness模型負(fù)責(zé)聰明Harness 負(fù)責(zé)穩(wěn)。就像創(chuàng)業(yè)公司的黃金搭檔一個(gè)負(fù)責(zé)天馬行空畫(huà)餅一個(gè)負(fù)責(zé)按住他別把公司作沒(méi)了。模型就是那個(gè)畫(huà)餅的Harness 就是那個(gè)按人的。順便說(shuō)個(gè)真實(shí)感受跑一個(gè) Demo 太容易了難的是讓模型連續(xù)三周穩(wěn)定輸出。我們前段時(shí)間參加公司內(nèi)部的 Agent 大賽將近三個(gè)星期前三天就把 Demo 跑起來(lái)了剩下的時(shí)間全在收拾模型的各種幺蛾子——輸出跑偏、任務(wù)超時(shí)、幻覺(jué)上頭、權(quán)限亂飛。跑 Demo 是開(kāi)屏孔雀生產(chǎn)環(huán)境是拉磨的驢而我們的日常是既當(dāng)飼養(yǎng)員又當(dāng)獸醫(yī)。2. 我們?yōu)樯缎枰@東西起因很簡(jiǎn)單我們希望大模型幫安全團(tuán)隊(duì)干三件臟活累活結(jié)果每件都踩坑。2.1 數(shù) T 的日志不能全喂給模型第一件事是檢測(cè)惡意攻擊。網(wǎng)關(guān)日志光一天就是好幾個(gè) T洗完數(shù)據(jù)也還有接近 T 級(jí)。把這玩意兒直接扔給大模型那不叫分析那叫給模型做壓力測(cè)試順便測(cè)試財(cái)務(wù)部的忍耐底線(xiàn)——錢(qián)和時(shí)間先不說(shuō)上下文直接原地爆炸。2.2 模型沒(méi)有眼睛MCP 就是它的眼鏡第二件事是評(píng)估風(fēng)險(xiǎn)請(qǐng)求。沒(méi)有 MCP 工具的時(shí)候大模型就是個(gè)睜眼瞎你說(shuō)啥它都好的呢我理解您的意思好不容易給它配了工具它又開(kāi)始有小脾氣這個(gè)接口我沒(méi)用過(guò)那個(gè)工具我不太熟下一步該干嘛你還得逐句哄著來(lái)。2.3 團(tuán)隊(duì)的記憶不能靠腦補(bǔ)第三件事是管理團(tuán)隊(duì)記憶。哪些信息值得寫(xiě)進(jìn)長(zhǎng)期記憶Agent 平臺(tái)要擴(kuò)展記憶怎么遷移這些問(wèn)題不解決模型每次都是閃婚式合作今天教會(huì)它這類(lèi)請(qǐng)求必須人工復(fù)核明天它就忘了比金魚(yú)還金魚(yú)——金魚(yú)好歹有七秒它是按輪次清零的。3. 具體怎么干踩完坑方法論就出來(lái)了??偟脑瓌t是四件事約束動(dòng)作空間、管好上下文、把調(diào)度交給確定性系統(tǒng)、把狀態(tài)和記憶存下來(lái)。下面按我們踩坑的順序展開(kāi)。3.1 外部工具skill 和 MCP出于數(shù)據(jù)安全考慮Agent 一般蹲在沙箱里想讓它分析真實(shí)數(shù)據(jù)第一步是讓它看得見(jiàn)、夠得著。數(shù)據(jù)量小的時(shí)候你可以手動(dòng)復(fù)制粘貼、傳附件粗糙但能用但這是重復(fù)性任務(wù)必須沉淀成穩(wěn)定可靠的 skill 和 MCP 工具。工具固化下來(lái)還有個(gè)隱藏福利能提升大模型的緩存命中率也就是省錢(qián)。這年頭能讓財(cái)務(wù)少皺一次眉就是技術(shù)人的最高勛章。但注意技能不是越多越好。社區(qū)有開(kāi)發(fā)者反饋給 Agent 裝了上萬(wàn)個(gè) skill效果反而變得很差。你想想給一個(gè)人發(fā)一萬(wàn)把工具他忙活一天大概率只用其中一把來(lái)開(kāi)瓶蓋。我們自己的做法是以解決問(wèn)題為導(dǎo)向idp-mcp 查 Hive 數(shù)據(jù)、ES 查詢(xún)技能分析實(shí)時(shí)流量、威脅情報(bào)技能查 IP把能力做成原子化的模塊隨取隨用還能直接復(fù)制到別的 Agent 里。3.2 管理上下文前面說(shuō)了把 T 級(jí)數(shù)據(jù)直接懟給模型任務(wù)要么跑不起來(lái)要么跑起來(lái)比蝸牛還慢。而且長(zhǎng)期看平臺(tái)限制執(zhí)行時(shí)間和思考輪次是必然的——上下文管理不是可選項(xiàng)是保命項(xiàng)。3.2.1 數(shù)據(jù)預(yù)計(jì)算核心思路一句話(huà)低信息密度的數(shù)據(jù)別直接給模型讓它干高價(jià)值的推理和歸因。我們的數(shù)倉(cāng)分三層ods 是原始日志T 級(jí)dwd 做清洗和特征提取還是 T 級(jí)dws 是統(tǒng)計(jì)加工好的維度指標(biāo)和事實(shí)指標(biāo)百 M 級(jí)。前兩層必須在 Agent 之外先做清洗降維別拿去煩模型。到了 dws 層再按小時(shí)分區(qū)規(guī)模就小到模型可以愉快玩耍了。至于 dwd 的明細(xì)數(shù)據(jù)也不是沒(méi)用——dws 粒度不夠細(xì)的時(shí)候還得回去結(jié)合 dwd 查。簡(jiǎn)而言之把白菜洗好切好端上桌別讓大廚自己去地里刨。3.2.2 成本控制有了工具、數(shù)據(jù)也降維了你當(dāng)然希望模型干得越多越好、干得越久越好。但現(xiàn)實(shí)是token 不是無(wú)限的模型的注意力也是稀缺品——比我的發(fā)際線(xiàn)還珍貴得省著用。我們的做法分兩類(lèi)**被動(dòng)限制外部兜底**工具層面限制 MCP 返回的行數(shù)和會(huì)話(huà)時(shí)長(zhǎng)模型層面限制思考輪次和思考時(shí)長(zhǎng)成本層面搞 token plan。**主動(dòng)介入內(nèi)部取舍**在技能文檔和提示詞里規(guī)定時(shí)間范圍、查詢(xún)范圍、查詢(xún)深度分析任務(wù)按優(yōu)先級(jí)分層高優(yōu)先級(jí)全量分析中優(yōu)先級(jí)只看 TopN低優(yōu)先級(jí)抽樣檢查。舉個(gè)例子我們的分析任務(wù)覆蓋 1k API我總不能指望模型把所有接口流量都過(guò)一遍。所以先用廉價(jià)資源把 dwd 層的流量預(yù)算出風(fēng)險(xiǎn)等級(jí)高風(fēng)險(xiǎn)用 ES 全量查中低風(fēng)險(xiǎn)做分層抽樣。讓模型有指向性地干活別像個(gè)剛拿到超市購(gòu)物車(chē)的孩子看見(jiàn)什么都想往里裝。3.3 規(guī)劃與決策3.3.1 指令系統(tǒng)最簡(jiǎn)單的做法就是在系統(tǒng)層面把規(guī)矩寫(xiě)清楚比如CLAUDE.md和./prompts。這類(lèi)提示詞一次定義好就別天天改你天天調(diào)它反而輸出不穩(wěn)定——好比領(lǐng)導(dǎo)天天改 KPI員工只會(huì)越來(lái)越迷茫。duties.md管該干嘛duties.md - 工作模式接收問(wèn)題后先思考是否需要調(diào)用工具 → 制定分析計(jì)劃 → 執(zhí)行工具調(diào)用 → 基于結(jié)果給出結(jié)構(gòu)化回答 - 內(nèi)容呈現(xiàn)要求結(jié)構(gòu)化的、約定好的格式 - 工作原則使用什么工具、方案對(duì)比、信息來(lái)源 - 其他禁止事項(xiàng)rules.md管不該干嘛## 運(yùn)行時(shí)產(chǎn)物隔離 12. 中間文件、下載產(chǎn)物、截圖、圖片、SQL、Excel、臨時(shí)報(bào)表、JSON 卡片、HTML 原型和調(diào)試日志 必須默認(rèn)寫(xiě)入 /tmp/runtime/不得寫(xiě)到 Git 工作區(qū)根目錄 13. 只有明確需要版本化的團(tuán)隊(duì)知識(shí)才寫(xiě)入 team-knowledge/ 14. 不自作聰明在沒(méi)有被 的情況下保持沉默尤其最后這條沒(méi)被 就閉嘴強(qiáng)烈建議所有群聊的人類(lèi)成員也抄一份。模型不寫(xiě)這條能把工作目錄整成災(zāi)難現(xiàn)場(chǎng)截圖、SQL、臨時(shí)報(bào)表滿(mǎn)地開(kāi)花比大學(xué)男生宿舍查寢前的桌面還壯觀(guān)。它還會(huì)在你開(kāi)會(huì)的時(shí)候突然好心地冒出來(lái)發(fā)表意見(jiàn)——你不攔著它能幫你把會(huì)開(kāi)了。3.3.2 任務(wù)調(diào)度重要原則**Agent 不負(fù)責(zé)判斷什么時(shí)候該干活這個(gè)交給外部確定性系統(tǒng)。**分析、推理、歸因給模型但何時(shí)開(kāi)工得有人拍板。常規(guī)做法是 cron 定時(shí)任務(wù)到點(diǎn)觸發(fā)。但實(shí)際跑起來(lái)你會(huì)發(fā)現(xiàn)上游任務(wù)的完成時(shí)間根本不確定定時(shí)觸發(fā)經(jīng)常造成重復(fù)執(zhí)行、漏執(zhí)行、超時(shí)成功率低得感人。而且你讓模型自己決定什么時(shí)候干活它可能凌晨三點(diǎn)突然興奮“我覺(jué)得現(xiàn)在適合跑一次全量分析”——比我家貓半夜跑酷還準(zhǔn)點(diǎn)。我們后來(lái)改成了事件觸發(fā)上游任務(wù)完成通過(guò)事件消息把模型叫起來(lái)干活。模型不用再猜上游什么時(shí)候就緒也不用自己管理調(diào)度狀態(tài)省了一大堆工具調(diào)用。效果后面有數(shù)據(jù)先賣(mài)個(gè)關(guān)子。3.4 知識(shí)管理重建一個(gè) Agent 很容易難的是讓模型的行為保持一致。光復(fù)制模型、工具、提示詞、知識(shí)庫(kù)是不夠的——就像你換了個(gè)新同事簡(jiǎn)歷一模一樣干起活來(lái)完全是兩個(gè)人。3.4.1 記憶管理跟大模型打交道多了你會(huì)發(fā)現(xiàn)人更多是在當(dāng) reviewer這個(gè)請(qǐng)求要人工復(fù)核、那個(gè)規(guī)則要寫(xiě)進(jìn)長(zhǎng)期記憶、這類(lèi)信息下次優(yōu)先展示。這些帶著個(gè)人色彩的業(yè)務(wù)判斷和處理偏好全是私域信息。不沉淀下來(lái)人和模型的磨合期會(huì)無(wú)限拉長(zhǎng)——每次合作都像第一次相親自我介紹重來(lái)一遍還未必有下文。所以建議從第一天就重視記憶管理把它當(dāng)長(zhǎng)期資產(chǎn)來(lái)存。我們現(xiàn)在的做法是團(tuán)隊(duì)里明確寫(xiě)入長(zhǎng)期記憶這個(gè)動(dòng)作讓模型把經(jīng)驗(yàn)沉淀下來(lái)防止復(fù)發(fā)。3.4.2 版本控制用 git 管 Agent 的基礎(chǔ)文件系統(tǒng)提示詞、記憶文件、啟動(dòng)腳本全管起來(lái)。好處是迭代可回溯、團(tuán)隊(duì)可共享、沙箱重建不丟。以后模型出了幺蛾子還能git log看看是哪次提交把它帶溝里的——比看監(jiān)控回放找責(zé)任人有儀式感多了。3.5 前后指標(biāo)對(duì)比眼見(jiàn)為實(shí)口說(shuō)無(wú)憑貼一組我們同模型、同時(shí)段任務(wù)的前后對(duì)比。模型是 qwen3.7-plus主要調(diào)整了調(diào)度方式、加了重試熔斷、改了查詢(xún)方式、把重復(fù)邏輯固化成腳本指標(biāo)調(diào)整前調(diào)整后變化Agent Loop 輪數(shù)52 輪21 輪↓ 59.6%執(zhí)行耗時(shí)2630.5s約 43.8 分鐘479.4s約 8 分鐘↓ 81.8%基礎(chǔ)輸入 Token22321278↓ 42.7%生成輸出 Token2424615421↓ 36.4%Token 總消耗2,920,4044,176,966↑ 43%增量主要是緩存工具調(diào)用次數(shù)也大幅縮水Bash 從 25 次降到 11 次Hive SQL 從 13 次降到 2 次Read 從 8 次直接清零。之前 Hive SQL 一次 2~14 分鐘13 次獨(dú)立查詢(xún)掃表占了總時(shí)長(zhǎng)的七成以上——現(xiàn)在改成一次導(dǎo)出數(shù)據(jù)快照后續(xù)全部本地聚合重復(fù)的 Hive 讀寫(xiě)和錯(cuò)誤重試全沒(méi)了。說(shuō)到重試必須單獨(dú)表?yè)P(yáng)一下熔斷規(guī)則每個(gè)操作最多重試 2 次不要反復(fù)嘗試不同參數(shù)格式。之前模型失敗了自己重試失敗了再重試比客服電話(huà)轉(zhuǎn)接還執(zhí)著你掛都掛不掉Token 就這么被它燒光了。現(xiàn)在規(guī)則寫(xiě)死效果立竿見(jiàn)影??赡苡型瑢W(xué)要問(wèn)Token 總量不是漲了嗎別急增量幾乎全來(lái)自緩存讀取和緩存創(chuàng)建而緩存命中的價(jià)格只有普通輸入的十分之一。用少量成本換執(zhí)行效率翻倍這筆賬怎么算都劃算——就像你多花了五塊錢(qián)升級(jí)加速包但省下了一下午的等待時(shí)間。4. 還沒(méi)解決的老大難坦白講Harness 不是萬(wàn)能藥我們還有幾道題沒(méi)解完**幻覺(jué)這東西壓不滅。**系統(tǒng)提示詞、記憶層面都做了強(qiáng)化幻覺(jué)還是偶發(fā)。而且不同模型對(duì)指令的遵循程度不一樣一旦切換模型輸出就可能不一致——換模型跟換對(duì)象似的前任養(yǎng)成的習(xí)慣現(xiàn)任全不認(rèn)。**任務(wù)要穩(wěn)定跑完還得繼續(xù)較勁。**Agent SDK 底座一直在迭代模型能力參差不齊上下文長(zhǎng)度、提示詞長(zhǎng)度都不一樣。保證持續(xù)輸出的穩(wěn)定性和行為一致性是場(chǎng)持久戰(zhàn)。**團(tuán)隊(duì) Agent 還是個(gè)人數(shù)字分身**我們傾向團(tuán)隊(duì)優(yōu)先成員隨時(shí)能用、能共同管理經(jīng)驗(yàn)復(fù)用、口徑統(tǒng)一、共享記憶飛書(shū)生態(tài)還方便接入。個(gè)人分身當(dāng)然也有價(jià)值但一個(gè)人養(yǎng)一個(gè) AI 管家和一群人養(yǎng)一個(gè) AI 同事投入產(chǎn)出比完全不是一回事。**一定需要 SOTA 模型嗎**真不一定。不是所有任務(wù)都需要最前沿的模型我們這套框架用的就是國(guó)產(chǎn)大模型工程上優(yōu)化好之后實(shí)際用下來(lái)完全能滿(mǎn)足需求。SOTA 是錦上添花Harness 才是雪中送炭。5. 下一步想干嘛現(xiàn)在模型是能穩(wěn)定跑了但新的問(wèn)題冒出來(lái)了Agent 如果只顧埋頭輸出、收不到人類(lèi)的反饋它會(huì)不斷自我強(qiáng)化最后鉆進(jìn)死胡同出不來(lái)——像極了把導(dǎo)航開(kāi)到斷頭路還堅(jiān)信前方可達(dá)的司機(jī)。所以下一步的聚焦點(diǎn)是怎么高效收集人類(lèi)真實(shí)的反饋和糾正讓 Agent 自己總結(jié)經(jīng)驗(yàn)、避免再次踩坑。說(shuō)白了就是給它裝一個(gè)人類(lèi)吐槽接收器把我們的嫌棄變成它的成長(zhǎng)。最后說(shuō)句掏心窩子的模型是馬Harness 是馬具但馬具不會(huì)自己調(diào)整松緊這件事終歸得人來(lái)干。所以各位別擔(dān)心被取代——你還能當(dāng)個(gè)馬倌而且是個(gè)越來(lái)越省心的馬倌。P.S. 無(wú)意間發(fā)現(xiàn)了一個(gè)巨牛的人工智能教程非常通俗易懂對(duì)AI感興趣的朋友強(qiáng)烈推薦去看看傳送門(mén)https://blog.csdn.net/qq_34419312