戰(zhàn)復(fù)盤:省 Token 技巧與高階玩法全解析)
1. 半年迭代復(fù)盤Codex 到底更新了哪些關(guān)鍵能力從去年底到現(xiàn)在Codex 這個(gè)命令行編程智能體的更新節(jié)奏明顯加快幾乎每隔兩三周就會(huì)推一次有感知的變化。我自己的主力工作流已經(jīng)全面切到 Codex 上半年下來(lái)踩了不少坑也攢了一堆省 Token 的野路子。這篇就把我實(shí)際用下來(lái)的觀察整理出來(lái)順帶聊聊那些官方文檔里不會(huì)寫、但真能救命的小技巧。先說(shuō)清楚 Codex 是什么。它是 OpenAI 推出的命令行編程智能體可以直接在終端里讀寫你的項(xiàng)目文件、執(zhí)行命令、跑測(cè)試、改代碼。和網(wǎng)頁(yè)版 ChatGPT 最大的區(qū)別在于它是有手腳的能真正操作你的本地倉(cāng)庫(kù)而不是只給你一段代碼讓你自己復(fù)制粘貼。適合誰(shuí)用我的判斷是——只要你日常有 30% 以上的時(shí)間在寫代碼、改 bug、讀別人的項(xiàng)目Codex 就值得花一周時(shí)間認(rèn)真磨合。新手也能上手但前提是你得理解它的工作邊界否則很容易被它自信地改錯(cuò)。這半年我觀察到的幾個(gè)大方向變化一是計(jì)劃模式Plan Mode的引入讓 Codex 在動(dòng)手前會(huì)先列一份執(zhí)行計(jì)劃你可以審閱、修改、駁回這一步極大降低了它亂改文件的風(fēng)險(xiǎn)二是模型側(cè)的持續(xù)迭代從早期的版本一路走到現(xiàn)在長(zhǎng)上下文理解和多文件協(xié)同編輯的能力肉眼可見地變強(qiáng)三是上下文管理越來(lái)越精細(xì)/compact、/clear、/diff這類命令的語(yǔ)義更清晰配合得當(dāng)能省下大量 Token。很多人一上來(lái)就問(wèn)Codex 國(guó)內(nèi)能用嗎Codex 怎么安裝其實(shí)安裝本身十分鐘就能搞定真正難的是怎么讓它少燒 Token 還干得準(zhǔn)。這半年我最大的體會(huì)就是Codex 的能力上限很高但它的 Token 消耗也極其兇猛一個(gè)不小心一次重構(gòu)就能吃掉你半天的額度。所以這篇的重點(diǎn)會(huì)放在省 Token和新奇玩法上安裝和登錄的部分我只做必要說(shuō)明不展開。提示本文所有技巧都基于我個(gè)人的實(shí)際使用經(jīng)驗(yàn)不同版本、不同賬號(hào)類型下表現(xiàn)可能有差異請(qǐng)以你本地實(shí)測(cè)為準(zhǔn)。2. 省 Token 的核心邏輯先搞懂錢花在哪2.1 Token 消耗的三個(gè)大頭想省 Token第一步不是學(xué)技巧而是搞清楚 Token 到底被誰(shuí)吃掉了。我統(tǒng)計(jì)過(guò)自己一周的用量消耗主要集中在三塊上下文重復(fù)投喂Codex 每一輪對(duì)話都會(huì)把之前的上下文重新發(fā)一遍。你聊得越久單輪成本越高這是最隱蔽的燒錢點(diǎn)。大文件全量讀取讓它讀一個(gè) 2000 行的文件和讓它讀一個(gè) 200 行的文件成本差十倍。很多人習(xí)慣性讓它看看整個(gè)項(xiàng)目這是災(zāi)難。無(wú)效的反復(fù)試錯(cuò)它改錯(cuò)了你再讓它改回來(lái)一來(lái)一回就是雙倍消耗。計(jì)劃模式就是為這個(gè)場(chǎng)景設(shè)計(jì)的。理解了這三點(diǎn)后面的所有技巧其實(shí)都是圍繞減少重復(fù)投喂、縮小讀取范圍、降低試錯(cuò)次數(shù)展開的。2.2 上下文窗口不是越大越好新手有個(gè)常見誤區(qū)覺得上下文窗口越大越好恨不得把整個(gè)倉(cāng)庫(kù)塞進(jìn)去。實(shí)測(cè)下來(lái)恰恰相反。上下文越長(zhǎng)模型注意力越分散改錯(cuò)文件的概率反而上升而且成本線性增長(zhǎng)。我的做法是按任務(wù)切分上下文。比如我要改一個(gè)登錄模塊就只讓它關(guān)注auth/目錄下的三四個(gè)文件改完立刻/clear開新會(huì)話。這樣每一輪的成本都可控而且它的判斷更聚焦。你可以把上下文想象成一張工作臺(tái)——臺(tái)面上東西越少你找工具越快堆滿了雜物反而什么都找不到。2.3 計(jì)劃模式為什么能省錢計(jì)劃模式Plan Mode是我這半年最推薦的更新。開啟后Codex 不會(huì)直接動(dòng)手改文件而是先輸出一份我打算這么做的清單要改哪些文件、每個(gè)文件改什么、執(zhí)行什么命令驗(yàn)證。這一步的價(jià)值在于把試錯(cuò)成本前置到文字層面。文字層面的修改幾乎不消耗執(zhí)行資源你一眼就能看出它理解錯(cuò)了沒(méi)有。我實(shí)測(cè)過(guò)一個(gè)中等規(guī)模的重構(gòu)任務(wù)不開計(jì)劃模式它改了 6 個(gè)文件、跑了兩輪測(cè)試、最后發(fā)現(xiàn)方向錯(cuò)了全部回滾消耗巨大開計(jì)劃模式第一版計(jì)劃就被我駁回改了兩句話重新生成一次通過(guò)。兩者成本差了大概四五倍。注意計(jì)劃模式不是萬(wàn)能的。對(duì)于幫我看看這個(gè)函數(shù)干嘛的這種純問(wèn)答開計(jì)劃模式反而多一輪交互純屬浪費(fèi)。它適合的是多文件、有副作用的改動(dòng)任務(wù)。3. 實(shí)操級(jí)省 Token 技巧清單3.1 精準(zhǔn)投喂用文件引用代替全量讀取Codex 支持你在提示里直接引用文件路徑比如看一下src/utils/date.ts里的formatDate函數(shù)。這種精準(zhǔn)引用比幫我看看 utils 目錄要省太多。我的習(xí)慣是先自己用編輯器定位到具體行號(hào)再把行號(hào)告訴它。比如src/api/client.ts第 45 到 80 行有個(gè)重試邏輯幫我改成指數(shù)退避。這樣它只需要讀取這一小段而不是整個(gè)文件。一個(gè) 1500 行的文件只讀 35 行成本直接降到原來(lái)的四十分之一。如果你不確定問(wèn)題在哪可以先讓它做一次輕量掃描——只讀文件名和目錄結(jié)構(gòu)不讀內(nèi)容然后你根據(jù)它的判斷再?zèng)Q定讀哪個(gè)文件。這一步能避免大量無(wú)效讀取。3.2 會(huì)話衛(wèi)生該清就清該壓就壓會(huì)話管理是省 Token 的基本功但很多人懶得做。我總結(jié)了一個(gè)簡(jiǎn)單的判斷規(guī)則場(chǎng)景操作原因切換到完全不相關(guān)的任務(wù)/clear舊上下文全是噪音留著純燒錢同一任務(wù)但對(duì)話很長(zhǎng)/compact壓縮歷史保留關(guān)鍵信息想確認(rèn)它改了什么/diff只看差異不重新讀全文任務(wù)告一段落主動(dòng)總結(jié)后/clear把結(jié)論記下來(lái)上下文清空/compact這個(gè)命令特別值得說(shuō)。它會(huì)把之前的對(duì)話壓縮成一份摘要保留關(guān)鍵決策和文件狀態(tài)丟掉冗余的來(lái)回。我一般在同一個(gè)任務(wù)聊了十幾輪之后就用一次能明顯感覺到后續(xù)每輪的成本降下來(lái)。但要注意壓縮是有損的如果任務(wù)對(duì)細(xì)節(jié)極其敏感壓縮后可能丟失一些上下文這時(shí)候?qū)幙?clear重開把關(guān)鍵信息手動(dòng)帶過(guò)去。3.3 提示詞寫法越具體越省錢模糊的提示是 Token 殺手。幫我優(yōu)化一下這個(gè)項(xiàng)目這種話Codex 只能靠猜猜錯(cuò)了就是雙倍成本。我現(xiàn)在的提示詞模板基本固定成三段式目標(biāo)我要達(dá)成什么一句話說(shuō)清范圍只動(dòng)哪些文件、哪些函數(shù)約束不許改什么、必須保持什么舉個(gè)例子對(duì)比一下差的寫法登錄有點(diǎn)慢優(yōu)化一下好的寫法auth/login.ts的verifyToken函數(shù)每次請(qǐng)求都查數(shù)據(jù)庫(kù)改成帶緩存的版本緩存用現(xiàn)有的cache模塊不要改函數(shù)簽名不要?jiǎng)悠渌募笳唠m然字多但它省下的是 Codex 反復(fù)試探的成本。提示詞多寫 50 個(gè)字可能省下幾千 Token 的試錯(cuò)。3.4 讓它先說(shuō)再做這是計(jì)劃模式的延伸用法。即使不開計(jì)劃模式你也可以在提示末尾加一句先告訴我你打算怎么做我確認(rèn)后再動(dòng)手。這一句話能擋掉大量錯(cuò)誤改動(dòng)。我踩過(guò)最慘的一次坑讓它清理一下沒(méi)用的 import結(jié)果它順手把一個(gè)看起來(lái)沒(méi)用、實(shí)際上被動(dòng)態(tài)引用的模塊刪了跑測(cè)試才發(fā)現(xiàn)。如果當(dāng)時(shí)讓它先說(shuō)方案我一眼就能攔下來(lái)?,F(xiàn)在我?guī)缀躔B(yǎng)成了肌肉記憶——凡是涉及刪除、重命名、跨文件改動(dòng)的任務(wù)一律先要方案。4. 新奇玩法把 Codex 用出花來(lái)4.1 當(dāng)代碼考古學(xué)家用接手一個(gè)陌生項(xiàng)目時(shí)最痛苦的是搞不清歷史包袱。我現(xiàn)在的做法是讓 Codex 做考古給它一個(gè)具體問(wèn)題比如這個(gè)legacy/目錄下的代碼還有沒(méi)有被引用它會(huì)自己去 grep、追引用鏈、給結(jié)論。比這更進(jìn)一步的是讓它寫考古報(bào)告。我會(huì)說(shuō)掃描src/下所有 TODO 和 FIXME 注釋按模塊歸類標(biāo)注每條的上下文。它會(huì)輸出一份結(jié)構(gòu)化的清單比我自己翻快得多。這種任務(wù) Token 消耗不高但省下的時(shí)間非??捎^。4.2 當(dāng)測(cè)試生成器用寫測(cè)試是很多人的痛點(diǎn)。Codex 在這塊表現(xiàn)相當(dāng)好但用法有講究。直接說(shuō)給這個(gè)函數(shù)寫測(cè)試效果一般因?yàn)樗恢滥愕臏y(cè)試風(fēng)格。我的做法是先讓它讀一個(gè)現(xiàn)有的測(cè)試文件作為風(fēng)格樣本然后說(shuō)按這個(gè)文件的風(fēng)格給xxx函數(shù)寫測(cè)試覆蓋邊界情況。這樣生成的測(cè)試基本能直接用不用大改。而且我習(xí)慣讓它同時(shí)生成測(cè)試數(shù)據(jù)和預(yù)期結(jié)果這樣跑起來(lái)就能驗(yàn)證省去自己構(gòu)造數(shù)據(jù)的功夫。4.3 當(dāng)重構(gòu)助手用但要設(shè)護(hù)欄重構(gòu)是 Codex 的強(qiáng)項(xiàng)也是最容易翻車的地方。我的護(hù)欄策略是三條一次只重構(gòu)一個(gè)關(guān)注點(diǎn)不要同時(shí)改命名和抽函數(shù)混在一起出錯(cuò)了很難定位。每步都跑測(cè)試讓它改完立刻執(zhí)行測(cè)試命令紅了就回滾別攢著。用 git 兜底動(dòng)手前先 commit出問(wèn)題直接git checkout比讓它改回來(lái)靠譜得多。我實(shí)測(cè)過(guò)一個(gè)把 800 行的大文件拆成 5 個(gè)小模塊的任務(wù)用計(jì)劃模式 分步執(zhí)行全程可控最后只花了不到預(yù)期一半的 Token。關(guān)鍵就在于每一步都驗(yàn)證不讓錯(cuò)誤累積。4.4 當(dāng)文檔生成器用這個(gè)玩法比較小眾但很實(shí)用。項(xiàng)目寫完后讓 Codex 掃描代碼生成 API 文檔草稿然后你人工潤(rùn)色。它生成的文檔結(jié)構(gòu)通常很規(guī)整省去大量機(jī)械勞動(dòng)。我一般會(huì)指定輸出格式比如用 Markdown 表格列出每個(gè)導(dǎo)出函數(shù)的參數(shù)和返回值這樣直接就能貼進(jìn) README。5. 常見問(wèn)題與排查實(shí)錄5.1 登錄與配置類問(wèn)題這半年被問(wèn)得最多的就是登錄相關(guān)的問(wèn)題。我整理了幾個(gè)高頻場(chǎng)景現(xiàn)象常見原因處理思路登錄流程走不完網(wǎng)絡(luò)環(huán)境不穩(wěn)定換網(wǎng)絡(luò)環(huán)境重試檢查本地時(shí)間是否準(zhǔn)確提示 token 相關(guān)錯(cuò)誤憑證過(guò)期或狀態(tài)異常退出后重新登錄清理本地緩存配置文件加載失敗配置文件格式錯(cuò)誤檢查配置文件語(yǔ)法確認(rèn)字段名拼寫模型不支持當(dāng)前賬號(hào)賬號(hào)類型與模型不匹配確認(rèn)賬號(hào)可用的模型范圍配置文件這塊特別容易出問(wèn)題。很多人手改配置文件時(shí)縮進(jìn)或引號(hào)寫錯(cuò)導(dǎo)致整個(gè)文件加載失敗。我的建議是改之前先備份改完用工具校驗(yàn)一遍語(yǔ)法。如果配置文件里涉及模型名、路徑這類字段一定要和官方文檔對(duì)齊別憑記憶寫。注意涉及賬號(hào)憑證的操作務(wù)必在可信環(huán)境下進(jìn)行不要在公共設(shè)備上保存登錄狀態(tài)。5.2 連接與穩(wěn)定性問(wèn)題一直在重新連接是另一個(gè)高頻抱怨。我的排查順序是先確認(rèn)是不是本地網(wǎng)絡(luò)問(wèn)題換個(gè)網(wǎng)絡(luò)環(huán)境試試如果好了就是網(wǎng)絡(luò)的事。再確認(rèn)是不是服務(wù)端波動(dòng)看看是不是只有你一個(gè)人遇到社區(qū)里有沒(méi)有同類反饋。最后查本地配置代理設(shè)置、DNS、防火墻都可能影響連接。大部分情況下是網(wǎng)絡(luò)環(huán)境的問(wèn)題不是工具本身的 bug。我自己的經(jīng)驗(yàn)是把網(wǎng)絡(luò)環(huán)境穩(wěn)定下來(lái)之后這類問(wèn)題基本消失。5.3 模型與額度問(wèn)題關(guān)于模型支持有個(gè)坑要提醒不是所有賬號(hào)都能用所有模型。有時(shí)候你看到別人用某個(gè)模型效果很好自己卻提示不支持大概率是賬號(hào)類型或額度的問(wèn)題。遇到這種情況先確認(rèn)自己的賬號(hào)能用哪些模型別硬試。額度方面Plus 用戶的額度是有限的重度使用的話要規(guī)劃好。我的做法是把大任務(wù)拆成小任務(wù)分散到不同時(shí)間段避免一次性把額度打光。另外善用計(jì)劃模式和精準(zhǔn)投喂能顯著降低單位任務(wù)的消耗。5.4 中文支持與本地化Codex 對(duì)中文的支持整體不錯(cuò)但有個(gè)細(xì)節(jié)用中文提問(wèn)時(shí)它有時(shí)會(huì)用英文回復(fù)。如果你希望它全程中文可以在提示里明確說(shuō)用中文回復(fù)。另外涉及代碼注釋時(shí)它默認(rèn)可能寫英文注釋如果你需要中文注釋也要提前說(shuō)明。我個(gè)人的習(xí)慣是技術(shù)討論用中文代碼和注釋用英文。這樣既方便自己理解又保持了代碼的通用性。當(dāng)然這看團(tuán)隊(duì)規(guī)范沒(méi)有絕對(duì)的對(duì)錯(cuò)。6. 我的半年使用心得用了半年最大的感受是Codex 這類工具的價(jià)值不在于替你寫代碼而在于替你干臟活累活。讀陌生代碼、寫測(cè)試、生成文檔、做機(jī)械重構(gòu)這些事它做得又快又好但涉及架構(gòu)決策、業(yè)務(wù)邏輯判斷還是得人來(lái)把關(guān)。省 Token 的本質(zhì)其實(shí)是省你自己的思考成本。你把需求想清楚了提示詞寫具體了它自然就少走彎路。反過(guò)來(lái)你自己都含糊其辭指望它猜對(duì)那燒的都是冤枉錢。最后分享一個(gè)我最近養(yǎng)成的小習(xí)慣每次開新任務(wù)前先花 30 秒在紙上或備忘錄里寫清楚我要什么、只動(dòng)哪里、不許碰什么然后再打開 Codex。這 30 秒的投入往往能省下后面十幾分鐘的來(lái)回折騰。工具再好用也得配上一個(gè)想清楚的人。