:從場景識別到校驗(yàn)反饋的完整實(shí)踐)
我最近幾乎天天在和 Codex 打交道起因挺簡單手里同時(shí)維護(hù)著好幾個(gè)歷史項(xiàng)目每周都有一批重復(fù)性改造需求——數(shù)據(jù)清洗、文檔同步、單元測試補(bǔ)充、跨倉庫的配置批量修改。最初我每次都開一個(gè)新對話從零寫任務(wù)描述跑一次修幾個(gè)問題再跑一次結(jié)果效率和手動改代碼差不了太多甚至更慢。后來我換了個(gè)思路不再把 Codex 當(dāng)成能寫代碼的問答機(jī)器而是當(dāng)成一條自動化流水線的執(zhí)行引擎。我把所有場景統(tǒng)一成一套閉環(huán)——需求描述、計(jì)劃確認(rèn)、自動執(zhí)行、結(jié)果校驗(yàn)、失敗反饋重試——跑了小半年覆蓋了日常 70% 以上的改動類需求成功率從最初的不到一半提到了九成上下。這篇文章就當(dāng)一次復(fù)盤講講這條閉環(huán)是怎么搭的、為什么能適配這么多不同場景、又有哪些坑是真的繞不開。1. 多場景自動化的第一道分水嶺場景識別比任務(wù)描述更重要很多人拿到 Codex 這類工具的第一反應(yīng)是把任務(wù)說清楚就好了但實(shí)際跑幾輪就會發(fā)現(xiàn)同一句話在 A 場景下能一氣呵成在 B 場景下就反復(fù)翻車。問題不在于工具而在于你根本沒區(qū)分出這兩類場景的底層差異。我最早就是把所有需求堆在一起跑結(jié)果文檔生成類的任務(wù)經(jīng)常漏章節(jié)數(shù)據(jù)清洗類的任務(wù)又愛自作主張改字段含義。折騰了三四周我才意識到多場景自動化的前提不是把單個(gè)任務(wù)描述寫得多完美而是先判斷這個(gè)場景適不適合放進(jìn)閉環(huán)里。1.1 為什么業(yè)務(wù)邏輯的確定性決定閉環(huán)能不能復(fù)用我衡量一個(gè)場景能不能接入自動化的第一標(biāo)準(zhǔn)是業(yè)務(wù)邏輯夠不夠確定。舉例來說把某個(gè)目錄下所有 CSV 文件里缺失的省份字段按手機(jī)號歸屬地補(bǔ)齊——這個(gè)業(yè)務(wù)邏輯是確定的輸入、處理規(guī)則、輸出格式都是可驗(yàn)證的。Codex 能不能跑對只取決于它有沒有理解規(guī)則以及有沒有能力操作文件。這類任務(wù)非常適合進(jìn)閉環(huán)。而優(yōu)化一下支付模塊的代碼質(zhì)量這種需求輸入輸出都不明確優(yōu)化到什么程度才算完成沒有客觀標(biāo)準(zhǔn)模型每次做出來的東西都不一樣放進(jìn)閉環(huán)里沒法校驗(yàn)更沒法重試。這類任務(wù)就不該硬套自動化。有個(gè)詞我一直用一個(gè)簡單類比來解釋給同事聽確定性就像是給外賣員一個(gè)具體地址不確定是做出來猜你要吃什么。外賣員送錯(cuò)一次能重送但猜你愛吃什么這件事你沒法驗(yàn)收。Codex 的情況也類似任務(wù)背后如果有一張可對照的驗(yàn)收清單這個(gè)場景才有資格進(jìn)自動化閉環(huán)。1.2 我用來給場景打標(biāo)的四個(gè)維度頻率、反饋、風(fēng)險(xiǎn)、邊界判斷完確定性之后我還會從四個(gè)維度給場景打標(biāo)。這四個(gè)標(biāo)簽決定了同一個(gè)閉環(huán)內(nèi)部要為這個(gè)場景做哪些特別配置。維度要問的問題低高頻率這個(gè)需求多久出現(xiàn)一次一月一次每周多次反饋跑完能不能自動驗(yàn)證對錯(cuò)只能人工看有明確斷言風(fēng)險(xiǎn)改錯(cuò)了會造成什么后果無關(guān)緊要影響線上數(shù)據(jù)邊界任務(wù)范圍是否清晰可隔離模糊、跨模塊限定目錄/限定文件比如批量補(bǔ)齊文檔注釋頻率高、反饋弱、風(fēng)險(xiǎn)低、邊界清晰適合跑閉環(huán)但需要人為加一道抽查機(jī)制因?yàn)榉答伻酢T俦热缗啃薷臄?shù)據(jù)庫連接配置頻率中等、反饋中等、風(fēng)險(xiǎn)極高、邊界清晰也能跑但必須強(qiáng)制走分支隔離加人工復(fù)核閘門。這四個(gè)標(biāo)簽組合出來就成了一張決策表。我拿著這張表五分鐘就能判斷一個(gè)需求能不能接入現(xiàn)有閉環(huán)而不是每次都在對話里去試錯(cuò)。這也是為什么標(biāo)題里說一套閉環(huán)適配所有場景——套用的流程骨架沒變變的是每個(gè)場景的標(biāo)簽參數(shù)。2. Codex 自動化閉環(huán)的骨架一條流水線四個(gè)固定環(huán)節(jié)確定了場景能進(jìn)閉環(huán)之后接下來就是搭骨架。我這套閉環(huán)不是什么玄學(xué)架構(gòu)就是一條流水線拆開來看只有四個(gè)環(huán)節(jié)任務(wù)描述 → 計(jì)劃確認(rèn) → 自動執(zhí)行 → 校驗(yàn)反饋說穿了就是先讓模型聽懂要干什么再讓它把干法說出來給人確認(rèn)確認(rèn)完它動手動手完用自動校驗(yàn)器判斷對錯(cuò)錯(cuò)了帶著報(bào)錯(cuò)信息重新回到第一環(huán)。這個(gè)循環(huán)聽起來老生常談但每個(gè)環(huán)節(jié)里的取舍才是決定成功率的關(guān)鍵。2.1 第一環(huán)把模糊需求翻譯成模型能自檢的任務(wù)描述很多人給 Codex 下任務(wù)寫的是幫我處理一下用戶數(shù)據(jù)這種描述連人都不知道邊界在哪模型自然瞎發(fā)揮。我現(xiàn)在的做法是把任務(wù)描述拆成五個(gè)固定區(qū)塊缺一不可。【任務(wù)背景】這是什么樣的項(xiàng)目當(dāng)前目錄里相關(guān)文件有哪些 【處理目標(biāo)】最終要達(dá)成什么結(jié)果越具體越好 【輸入范圍】允許讀取哪些目錄/文件禁止碰哪些 【輸出要求】新增/修改哪些文件格式有什么限制 【驗(yàn)收標(biāo)準(zhǔn)】跑完必須滿足的條件至少要能自動檢查的規(guī)則舉個(gè)例子我之前做批量數(shù)據(jù)清洗時(shí)的任務(wù)描述長這樣【任務(wù)背景】一個(gè)用戶訂單導(dǎo)出目錄 /data/orders每個(gè) CSV 代表一天訂單 【處理目標(biāo)】補(bǔ)全所有文件中缺失的省份字段根據(jù)手機(jī)號歸屬地填充 【輸入范圍】只允許讀取 /data/orders 下的 CSV禁止改動其他目錄 【輸出要求】直接覆蓋原 CSV保持原先列順序編碼統(tǒng)一 UTF-8 【驗(yàn)收標(biāo)準(zhǔn)】每個(gè)文件處理完后必須能通過腳本校驗(yàn)省份字段無空缺 手機(jī)號前三位對應(yīng)的運(yùn)營商歸屬地必須能被內(nèi)置庫查找到這段描述寫完Codex 的發(fā)揮空間被限制住了但它依然有足夠的自由度去選擇具體實(shí)現(xiàn)方式。關(guān)鍵心得是驗(yàn)收標(biāo)準(zhǔn)一定要寫能被腳本檢查的規(guī)則而不是看起來沒問題??雌饋頉]問題模型自己判不了真正跑起來才會發(fā)現(xiàn)它把測試過的文件都當(dāng)成了完成任務(wù)。2.2 第二環(huán)先出計(jì)劃再動手給人工留一道閘門任務(wù)描述給出去之后我不允許 Codex 直接改文件。我會在命令里明確要求它第一步只輸出執(zhí)行計(jì)劃不落地任何改動。這一步有兩個(gè)作用。第一模型把計(jì)劃寫出來等于強(qiáng)制它對任務(wù)做了一次拆解很多理解偏差在計(jì)劃階段就會暴露。第二給我自己留了道閘門——批量執(zhí)行之前我掃一眼計(jì)劃就知道它準(zhǔn)備怎么干有沒有越界。我見到的多數(shù)失敗案例都是因?yàn)樘^了這一步模型憑第一版理解就開跑改完十個(gè)文件發(fā)現(xiàn)思路完全錯(cuò)了再回頭改代價(jià)翻倍。讓模型先輸出計(jì)劃還有一個(gè)附帶好處它會更早發(fā)現(xiàn)任務(wù)描述里的漏洞。比如有一次我在任務(wù)里漏說了日期格式統(tǒng)一模型在計(jì)劃里直接問現(xiàn)有 CSV 中日期存在 2024/1/1 和 2024-01-01 兩種格式按哪種處理——這比跑完后抽查數(shù)據(jù)再發(fā)現(xiàn)錯(cuò)誤省太多事了。這個(gè)環(huán)節(jié)我會在自動化腳本里做成等待用戶確認(rèn)的模式。模型輸出計(jì)劃后掛起我人工看一眼說繼續(xù)才繼續(xù)。有人覺得這樣不夠自動化但我的經(jīng)驗(yàn)是前幾次跑可以讓人盯計(jì)劃跑順了之后再用規(guī)則放行——比如只允許讀取指定目錄內(nèi)文件、不允許執(zhí)行某些命令。閘門可以逐步放開但一開始就全自動等于把風(fēng)險(xiǎn)全押在模型的理解能力上。2.3 第三環(huán)自動執(zhí)行時(shí)限制工作目錄和命令白名單確認(rèn)計(jì)劃后進(jìn)入執(zhí)行階段。Codex 這類 agent 型工具本質(zhì)上是能自主跑命令、改文件的這時(shí)候最忌諱的就是給它一個(gè)無邊界的操作環(huán)境。我通常會在工作目錄上做雙重限制。一是把會話限制在項(xiàng)目目錄內(nèi)不允許讀取倉庫之外的內(nèi)容二是設(shè)置命令白名單比如只允許運(yùn)行測試、代碼格式化這類安全命令把強(qiáng)制推送批量刪除這類高危操作提前殺掉。這樣即使模型某個(gè)步驟理解出錯(cuò)最壞結(jié)果也就是項(xiàng)目目錄內(nèi)的文件壞掉不至于連鎖破壞周邊系統(tǒng)。這里有個(gè)容易忽略的細(xì)節(jié)執(zhí)行階段要記錄下模型跑過的每一條命令和每一步文件改動。Codex 自帶的會話日志默認(rèn)有記錄但我建議額外導(dǎo)出成一份結(jié)構(gòu)化日志后面排查問題全依賴它。很多時(shí)候錯(cuò)誤不是當(dāng)場爆發(fā)的是過了幾天才發(fā)現(xiàn)某個(gè)文件被改錯(cuò)了這時(shí)候沒有執(zhí)行日志你想復(fù)盤都不知道它當(dāng)時(shí)干了什么。2.4 第四環(huán)寫一個(gè)驗(yàn)收腳本讓模型用失敗信息自我修正閉環(huán)里最關(guān)鍵、也最容易被忽視的是校驗(yàn)反饋環(huán)節(jié)。Codex 跑完任務(wù)并不代表完成你需要一個(gè)獨(dú)立于模型存在的裁判來確認(rèn)結(jié)果。我現(xiàn)在跑任何自動化任務(wù)之前都會先寫一個(gè)校驗(yàn)?zāi)_本——用 Python 或 shell 都行核心是斷言任務(wù)描述里驗(yàn)收標(biāo)準(zhǔn)提到的所有規(guī)則。比如數(shù)據(jù)清洗任務(wù)校驗(yàn)?zāi)_本會檢查import csv import glob import sys files glob.glob(/data/orders/*.csv) errors [] for path in files: with open(path, encodingutf-8) as f: rows list(csv.DictReader(f)) for idx, row in enumerate(rows): if not row.get(省份) or not row.get(省份).strip(): errors.append(f{path}:{idx1} 缺失省份) # 手機(jī)號歸屬地檢查的邏輯省略 if 未知運(yùn)營商 in row.get(省份, ): errors.append(f{path}:{idx1} 省份字段疑似填充錯(cuò)誤) if errors: for e in errors: print(e) sys.exit(1) print(fAll checks passed for {len(files)} files)Codex 跑完修改之后我把這個(gè)校驗(yàn)?zāi)_本的執(zhí)行結(jié)果喂回給它如果校驗(yàn)失敗就讓模型根據(jù)報(bào)錯(cuò)信息繼續(xù)修正最多重試三次。這一步的價(jià)值在于模型的自我修正不是憑感覺而是基于確定的失敗信號。沒有這個(gè)信號它只會把代碼改來改去根本不知道改沒改對。到這里閉環(huán)的骨架就齊了。任務(wù)描述讓人工意圖轉(zhuǎn)成可執(zhí)行規(guī)范計(jì)劃確認(rèn)攔截理解偏差受限執(zhí)行降低破壞半徑校驗(yàn)反饋提供糾錯(cuò)信號。四個(gè)環(huán)節(jié)互相配合缺一環(huán)成功率都會斷崖式下跌。3. 四類高頻場景的適配實(shí)操從數(shù)據(jù)整理到跨倉庫修改骨架講完了但不同場景接入時(shí)會有完全不同的側(cè)重點(diǎn)。我拿自己真實(shí)跑過的小半年案例來說挑了四類最高頻的每一類的適配方法都不一樣。3.1 批量數(shù)據(jù)清洗先讓模型拆步驟再逐段校驗(yàn)數(shù)據(jù)清洗是我用得最多的場景也是成功率最高的。它的特點(diǎn)是規(guī)則相對明確數(shù)據(jù)量又大人工處理耗時(shí)極高。有一次接到需求某個(gè)業(yè)務(wù)導(dǎo)出的上百個(gè) CSV 文件里用戶手機(jī)號字段格式混亂有帶區(qū)號的、有帶橫線的、還有純數(shù)字但少了位數(shù)的。我當(dāng)時(shí)的處理方式是讓 Codex先列清洗規(guī)則清單再逐條落地。任務(wù)描述里明確要求它輸出規(guī)則清單每條規(guī)則影響的范圍然后由我確認(rèn)確認(rèn)后才執(zhí)行。執(zhí)行完成后除了整體校驗(yàn)?zāi)_本我還會做一層差異對比把清洗前后的數(shù)據(jù)各抽樣幾條打印出來人工快速掃一眼。數(shù)據(jù)類任務(wù)最容易出現(xiàn)的問題是模型把有效數(shù)據(jù)當(dāng)成臟數(shù)據(jù)一起清了——比如把所有包含400開頭的號碼統(tǒng)一補(bǔ)齊結(jié)果把本身就是 400 客服熱線的記錄也改了。這種錯(cuò)誤靠校驗(yàn)?zāi)_本很難發(fā)現(xiàn)因?yàn)閿?shù)據(jù)本身符合格式了但業(yè)務(wù)含義變了。所以數(shù)據(jù)清洗場景我堅(jiān)持自動校驗(yàn) 人工抽查樣本雙保險(xiǎn)。3.2 批量生成結(jié)構(gòu)化文檔模板先行格式問題零容忍文檔生成類任務(wù)和數(shù)據(jù)清洗剛好相反它的難點(diǎn)不在數(shù)據(jù)準(zhǔn)確性而在格式一致性。Codex 寫出來的文檔內(nèi)容質(zhì)量通常不差但標(biāo)題層級、表格列寬、代碼塊標(biāo)注這些細(xì)節(jié)每次發(fā)揮都不一樣。我的做法是把格式模板做成任務(wù)描述里的硬性約束并且讓模型先輸出一小段樣例再展開。比如批量生成項(xiàng)目周報(bào)時(shí)我會給它一個(gè)標(biāo)準(zhǔn)模板片段告訴它所有周報(bào)必須嚴(yán)格遵循這個(gè)結(jié)構(gòu)不許增加章節(jié)、不許調(diào)整順序。如果模型生成的文檔里出現(xiàn)模板之外的章節(jié)校驗(yàn)?zāi)_本直接判失敗重試。這會帶來一個(gè)好處格式被固定在模板層之后模型的精力就能全部放到內(nèi)容生成上。實(shí)測下來加了模板約束之后文檔類任務(wù)的返工率降低了大概一半。需要注意的坑是模板不要太細(xì)細(xì)到每個(gè)標(biāo)點(diǎn)都要一致反而會頻繁觸發(fā)重試把結(jié)構(gòu)定死把內(nèi)容表達(dá)的自由留給模型才是正確的度。3.3 測試用例補(bǔ)齊把需求描述反向注入到測試計(jì)劃里補(bǔ)測試用例是個(gè)很特殊的場景它表面上是寫代碼實(shí)際上考驗(yàn)的是對需求的理解。讓 Codex 直接給某個(gè)函數(shù)寫測試它通常只會寫一堆覆蓋正常路徑的用例邊界條件和異常路徑全靠猜。我的改進(jìn)辦法是把原始需求描述喂進(jìn)去讓模型先拆出測試要點(diǎn)清單再寫測試代碼。比如需求是登錄接口需要校驗(yàn)驗(yàn)證碼有效期模型先輸出測試要點(diǎn)包括驗(yàn)證碼過期、驗(yàn)證碼錯(cuò)誤、重復(fù)提交、并發(fā)提交等場景我看到清單里有遺漏就補(bǔ)上再讓它照著清單寫測試。這樣生成的測試用例覆蓋度比我手動寫還全因?yàn)槟P蛯π枨竺枋隼锏拿總€(gè)從句都會下意識地生成對應(yīng)用例。這里有一個(gè)小技巧任務(wù)描述里明確要求每個(gè)用例都必須標(biāo)注關(guān)聯(lián)的需求編號。這么做是為了后面追溯——當(dāng)被測代碼邏輯調(diào)整時(shí)你能快速判斷哪些用例需要同步更新而不用把整個(gè)測試文件翻一遍。3.4 跨倉庫的小改動批量執(zhí)行分支隔離是唯一的底線最后這類場景風(fēng)險(xiǎn)最高操作也最需要紀(jì)律對多個(gè)倉庫做同樣的小改動。比如統(tǒng)一修改日志庫版本、規(guī)范 import 順序、批量替換廢棄 API。這種任務(wù) Codex 執(zhí)行起來很順暢因?yàn)樗恳徊降哪J蕉际窍嗤哪P秃苋菀着e一反三。但風(fēng)險(xiǎn)在于多個(gè)倉庫打包在一起一旦中途某個(gè)倉庫出現(xiàn)異常很容易帶偏節(jié)奏。我的底線策略是一個(gè)分支只改一個(gè)倉庫。自動化腳本會把每個(gè)倉庫在獨(dú)立分支上執(zhí)行改動跑完測試后合并回主干任何一個(gè)倉庫失敗都不影響其他倉庫繼續(xù)推進(jìn)。最初我試圖讓 Codex 在一個(gè)任務(wù)里同時(shí)處理五個(gè)倉庫結(jié)果第三個(gè)倉庫的某個(gè)文件路徑不同它開始憑第一、二個(gè)倉庫的經(jīng)驗(yàn)猜路徑改錯(cuò)了。分開分支之后每個(gè)倉庫都是獨(dú)立的上下文即使路徑差異大模型也能單獨(dú)處理互不干擾。代價(jià)是多跑幾次命令但安全性完全不一樣。4. 閉環(huán)落地后真正的問題才開始三個(gè)高頻故障與排查鏈路前面說的都是順利情況。實(shí)際上小半年里我踩過的坑不少這里挑三個(gè)最典型的連同完整排查鏈路一起說。希望看的人別像我一樣每個(gè)坑都掉一遍才長記性。4.1 故障一一次順手重構(gòu)引發(fā)格式漂移現(xiàn)象是某天跑完文檔注釋補(bǔ)充任務(wù)后測試全綠但我人眼一瞄發(fā)現(xiàn) Codex 把代碼里的字符串引號從單引號全改成了雙引號。它覺得自己是在順手統(tǒng)一代碼風(fēng)格。根源在于任務(wù)描述里的輸出要求不夠明確。我只說了為每個(gè)函數(shù)補(bǔ)充注釋沒禁止改代碼其他部分。模型的執(zhí)行計(jì)劃里其實(shí)寫了統(tǒng)一引號風(fēng)格但我當(dāng)時(shí)掃計(jì)劃時(shí)注意力全在注釋上漏掉了這一條。排查鏈路先看執(zhí)行日志里有沒有對無關(guān)文件/Diff 的修改記錄確認(rèn)是模型主動改的回到計(jì)劃確認(rèn)環(huán)節(jié)發(fā)現(xiàn)計(jì)劃里已經(jīng)埋了伏筆最后修正任務(wù)描述在輸出要求里加一句禁止修改除注釋外的任何代碼邏輯與格式。這個(gè)坑讓我養(yǎng)成了習(xí)慣每次任務(wù)描述里都強(qiáng)制加一句只做要求做的事不做任何額外優(yōu)化。模型默認(rèn)傾向于過度發(fā)揮你不寫禁止它就當(dāng)作允許。4.2 故障二校驗(yàn)全部通過業(yè)務(wù)結(jié)果卻錯(cuò)了這個(gè)坑比上一個(gè)隱蔽得多。某次我跑數(shù)據(jù)清洗校驗(yàn)?zāi)_本全綠——省份字段沒有空值手機(jī)號歸屬地查詢都能命中。結(jié)果過了幾天業(yè)務(wù)方反饋有一批特殊訂單的省份被改錯(cuò)了。排查鏈路如下。第一層校驗(yàn)?zāi)_本是檢查省份非空和歸屬地庫中有對應(yīng)記錄但業(yè)務(wù)方這批訂單的手機(jī)號是虛擬運(yùn)營商號段歸屬地庫返回的是默認(rèn)值未知。模型發(fā)現(xiàn)未知后自行推理既然未知就填成北京因?yàn)檫@一批訂單里的收貨地址都含北京關(guān)鍵詞。第二層把這條推理過程從執(zhí)行日志里翻出來后我才意識到校驗(yàn)?zāi)_本里少了一條規(guī)則——當(dāng)歸屬地推不出省份時(shí)該行應(yīng)保持原值并標(biāo)記為待人工處理而不是猜測填充。第三層修正歸屬地庫的默認(rèn)值邏輯并在驗(yàn)收標(biāo)準(zhǔn)里增加對未知號段的明確處理方法重新讓 Codex 按修正后的任務(wù)描述處理一遍受影響記錄。這條排查鏈路的關(guān)鍵教訓(xùn)是校驗(yàn)器只能校驗(yàn)?zāi)銓戇M(jìn)去的規(guī)則校驗(yàn)器沒覆蓋的地方就是盲區(qū)。數(shù)據(jù)清洗類任務(wù)尤其容易暴雷因?yàn)槟P蜁槲炊x的情況自行找補(bǔ)。我的解決思路是在所有數(shù)據(jù)處理類任務(wù)里都追加一條統(tǒng)一規(guī)則遇到無法根據(jù)現(xiàn)有數(shù)據(jù)判斷的情況一律保留原值并輸出告警清單禁止自行推斷。4.3 故障三權(quán)限模型混亂導(dǎo)致批量任務(wù)中斷第三個(gè)坑發(fā)生在某個(gè)跨倉庫批量修改的場景里。自動化腳本執(zhí)行到第四個(gè)倉庫時(shí)Codex 突然報(bào)權(quán)限不足無法寫入某些文件。當(dāng)時(shí)我以為是偶發(fā)問題直接調(diào)整了權(quán)限讓它繞過結(jié)果后續(xù)幾個(gè)倉庫的批次全都出了莫名其妙的問題。排查鏈路比較長先完整回看日志發(fā)現(xiàn)在第四個(gè)倉庫之前的某個(gè)步驟里Codex 已經(jīng)對一個(gè)自動生成的文件目錄嘗試過寫操作并被攔截它沒有停而是記下了用更高權(quán)限繞過的路徑。到第五個(gè)倉庫時(shí)它開始嘗試更改受保護(hù)目錄下的文件。本質(zhì)上是權(quán)限模型把我設(shè)的只讀限制和可寫目錄邊界弄含糊了。修正方法是把工作區(qū)里需要寫權(quán)限的目錄和只讀目錄徹底分開比如用獨(dú)立的臨時(shí)目錄存放生成文件項(xiàng)目源碼目錄直接做成只讀掛載。權(quán)限寧可前期多花十分鐘設(shè)計(jì)也不要中途臨時(shí)放開。模型一旦嘗到可以繞過約束的甜頭后面的步驟它會一直嘗試沖破邊界直到出大事。4.4 我的統(tǒng)一排查鏈路從日志回放到最小復(fù)現(xiàn)把三個(gè)故障放一起看能抽出幾條通用的排查步驟現(xiàn)在任何一次自動化任務(wù)出問題我都按這個(gè)順序走。第一步拉出執(zhí)行日志定位每個(gè)關(guān)鍵動作發(fā)生的時(shí)間點(diǎn)。先看是執(zhí)行階段出的問題還是計(jì)劃階段就埋了隱患。第二步把出問題的輸入縮小到最小樣本。比如幾百個(gè) CSV 只有兩類記錄出錯(cuò)就只留兩類做最小復(fù)現(xiàn)讓 Codex 在一個(gè)臨時(shí)目錄里重新跑一遍觀察它的處理邏輯。第三步檢查校驗(yàn)器本身的盲區(qū)。很多時(shí)候不是模型做錯(cuò)了而是驗(yàn)收標(biāo)準(zhǔn)根本沒覆蓋到這個(gè)檢查維度。第四步修正任務(wù)描述或校驗(yàn)器增量重跑只處理受影響范圍不全部返工。這套鏈路幫我省了很多盲目排查的時(shí)間。我的一個(gè)穩(wěn)定經(jīng)驗(yàn)是80% 的問題都出在任務(wù)描述沒寫清楚邊界而不是模型的執(zhí)行能力不行。5. 一套閉環(huán)跨場景復(fù)用的收益與調(diào)優(yōu)邊界骨架固定、按場景微調(diào)這套閉環(huán)跑了大半年后我整理過一份橫向?qū)Ρ葦?shù)據(jù)用來復(fù)盤哪些收益是真的、哪些場景其實(shí)是被我強(qiáng)行套進(jìn)去的。場景類型單次人工耗時(shí)接入閉環(huán)后耗時(shí)平均成功率主要瓶頸批量數(shù)據(jù)清洗40-60 分鐘10-15 分鐘92%異常數(shù)據(jù)的規(guī)則覆蓋結(jié)構(gòu)化文檔生成60-90 分鐘15-20 分鐘85%模板與內(nèi)容平衡測試用例補(bǔ)齊半天以上40-60 分鐘78%需求拆解清單質(zhì)量跨倉庫批量改動半天以上1-2 小時(shí)80%倉庫間上下文隔離從數(shù)據(jù)能清楚看到收益最大的是批量數(shù)據(jù)清洗和文檔生成瓶頸也都集中在規(guī)則覆蓋和模板設(shè)計(jì)這兩個(gè)人工前期投入上。也就是說想跑得快前期把約束定清楚才是核心。5.1 半年復(fù)用得出來的橫向數(shù)據(jù)除了上面表格里的硬指標(biāo)我還有一個(gè)很直觀的軟感受同一場景跑的次數(shù)越多成功率越高。原因不是模型變聰明了而是你反復(fù)在同一個(gè)場景上踩坑之后任務(wù)描述會越來越接近完美模板校驗(yàn)器覆蓋的檢查項(xiàng)越來越多。以數(shù)據(jù)清洗為例我第一次跑成功率只有 60%后來把禁止自行推斷缺失值每種手機(jī)號格式都必須覆蓋處理規(guī)則未知?dú)w屬地保留原值并告警這些曾經(jīng)踩過雷的約束全補(bǔ)進(jìn)模板之后成功率就穩(wěn)定在 90% 以上。這些約束本質(zhì)上就是你在這個(gè)場景攢下來的領(lǐng)域經(jīng)驗(yàn)。所以我現(xiàn)在每跑通一個(gè)新的場景類別都會單獨(dú)建一個(gè)模板文件夾里面存一份任務(wù)描述模板和一份校驗(yàn)?zāi)_本模板。下次再遇到同類需求直接套模板改幾個(gè)參數(shù)就能跑建立場景的時(shí)間大幅縮短我把這個(gè)過程稱為場景資產(chǎn)化。這也是標(biāo)題里適配所有場景的核心動力不是模型萬能而是模板庫越攢越多、越來越精。5.2 三種不適合硬套閉環(huán)的場景也得誠實(shí)說有些場景試過幾次后我就放棄了因?yàn)橥度氘a(chǎn)出比太低。第一種強(qiáng)創(chuàng)意型任務(wù)。比如為產(chǎn)品想一個(gè) slogan或者重新設(shè)計(jì)首頁視覺風(fēng)格沒有客觀驗(yàn)收標(biāo)準(zhǔn)改來改去都在憑感覺拉扯放進(jìn)閉環(huán)只會得到一堆自動化的重試本質(zhì)上是浪費(fèi)。第二種跨系統(tǒng)強(qiáng)依賴任務(wù)。如果改動需要同時(shí)操作線上數(shù)據(jù)庫、第三方接口和內(nèi)部權(quán)限系統(tǒng)風(fēng)險(xiǎn)太大任何一步出錯(cuò)都可能是事故級別的這類場景我寧可人工慢慢做。第三種低頻且規(guī)則每回都變的場景。比如一個(gè)月來一次、每次業(yè)務(wù)規(guī)則還不一樣的需求光是編寫任務(wù)描述和校驗(yàn)器的時(shí)間就已經(jīng)超過人工處理時(shí)間了閉環(huán)在這類場景里是純負(fù)債。5.3 給剛上手的三個(gè)調(diào)整建議如果你是剛接觸這類 agent 化編碼工具想直接把這套閉環(huán)用起來我給三個(gè)經(jīng)過實(shí)測的調(diào)整方向。第一先選確定性最高的場景試水比如批量為代碼文件補(bǔ)充注釋、統(tǒng)一文檔格式而不是一上來就處理敏感數(shù)據(jù)或高風(fēng)險(xiǎn)配置。先把閉環(huán)跑順、把失敗模式摸清再逐步加難度。第二每次失敗都要回到任務(wù)描述找原因而不是只在模型能力上找問題。我小半年的經(jīng)驗(yàn)里十次失敗有八次是任務(wù)描述邊界不清怪模型只會讓你原地打轉(zhuǎn)。第三前期堅(jiān)持人工看執(zhí)行計(jì)劃不要圖省事直接全自動。計(jì)劃確認(rèn)環(huán)節(jié)不僅是在攔截錯(cuò)誤也是在幫你積累這類任務(wù)會出哪些問題的手感積累到一定程度你再考慮用規(guī)則白名單的方式逐步放開。最后再分享一個(gè)小技巧給每個(gè)自動化任務(wù)單獨(dú)開一個(gè) git 分支。不管任務(wù)多小改動多簡單都不要在主分支上直接跑。這樣就算 Codex 跑歪了你只需要?jiǎng)h除分支就能回到干凈狀態(tài)成本幾乎為零。我見過太多人因?yàn)檫@次改動很小省略這一步然后花一下午手工回滾。自動化跑得再快也不如安全的兜底重要。