代碼一樣優(yōu)化提示詞token效率)
在實(shí)際 LLM 應(yīng)用開(kāi)發(fā)中提示詞prompt往往是最容易被忽略的“性能瓶頸”。功能調(diào)試通過(guò)后很少有人會(huì)回頭審視一段提示詞消耗了多少 token而這些 token 在調(diào)用 GPT、Claude、Qwen、DeepSeek 等模型時(shí)都對(duì)應(yīng)真實(shí)的成本、延遲和上下文占用。Tokensift 正是一個(gè)面向這個(gè)場(chǎng)景的開(kāi)源提示詞 token 效率檢查工具。它不參與模型調(diào)用也不改變你寫(xiě) prompt 的方式而是像 ESLint 檢查代碼風(fēng)格一樣對(duì) prompt 做靜態(tài)分析找出冗余表達(dá)、重復(fù)內(nèi)容、過(guò)長(zhǎng)分隔線、無(wú)效占位符和可壓縮段落并給出可執(zhí)行的修改建議。這篇文章將以 Tokensift 為主題先說(shuō)明 token 效率為什么值得專(zhuān)門(mén)用一個(gè)工具來(lái)管再拆解它的工作流程和核心規(guī)則然后給出從安裝、配置到編寫(xiě)最小示例、運(yùn)行驗(yàn)證的完整過(guò)程最后補(bǔ)充常見(jiàn)誤報(bào)原因、排查思路和適合接入實(shí)際項(xiàng)目的幾種方式。即使你最終不選擇 Tokensift這套“把 prompt 當(dāng)代碼審計(jì)”的思路也可以直接用在日常開(kāi)發(fā)里。1. prompt 也需要 linttoken 效率為什么不能只靠肉眼很多人對(duì) prompt 的優(yōu)化停留在“能跑通就行”。但在真實(shí)項(xiàng)目中prompt 的 token 消耗會(huì)隨用戶(hù)量線性放大。一次調(diào)用多 200 token單個(gè)用戶(hù)一天十次請(qǐng)求一個(gè)月就是幾萬(wàn) token放大到上千用戶(hù)后成本差異非常明顯。更關(guān)鍵的是上下文窗口是有限的寫(xiě)入大量冗余內(nèi)容后模型能使用的有效上下文反而變少回答質(zhì)量也會(huì)下降。1.1 token 消耗由誰(shuí)決定模型詞表與文本切分大模型并不是按字符數(shù)計(jì)費(fèi)的而是按 token 計(jì)費(fèi)。token 是模型詞表中的一個(gè)最小單元可以是一個(gè)單詞、一個(gè)子詞、一個(gè)中文字符甚至一個(gè)標(biāo)點(diǎn)符號(hào)。不同模型使用不同分詞器同一段中文文本在不同模型下的 token 數(shù)并不一致。因此prompt 優(yōu)化不能只統(tǒng)計(jì)字符數(shù)不能只依賴(lài)“感覺(jué)”也不能直接拿一個(gè)模板套到所有模型上。更穩(wěn)妥的方式是用目標(biāo)模型自帶的分詞器或一個(gè)本地快速估算器先量化整段 prompt 的 token 消耗再?zèng)Q定從哪里壓縮。1.2 肉眼難以發(fā)現(xiàn)的隱藏浪費(fèi)人工審查 prompt 時(shí)最容易忽略幾類(lèi)問(wèn)題系統(tǒng)提示詞中大量重復(fù)的“你是一個(gè)智能助手你需要幫助用戶(hù)解決問(wèn)題”等套話。示例中包含了與當(dāng)前任務(wù)無(wú)關(guān)的長(zhǎng)段落。用超過(guò) 80 個(gè)字符的分隔線、重復(fù)的換行和裝飾性符號(hào)表面美觀但占用 token。定義了變量卻從未在模板中引用或引用后沒(méi)有做替換。一個(gè)語(yǔ)義重復(fù)的句子被寫(xiě)了三遍。列表、JSON 示例中對(duì)齊用的空格和縮進(jìn)過(guò)多。這些問(wèn)題逐條看都不嚴(yán)重但累計(jì)起來(lái)會(huì)讓 prompt 的有效信息密度下降。Tokensift 的思路就是把這些規(guī)則固化成可重復(fù)執(zhí)行的檢查項(xiàng)然后對(duì)文件或目錄統(tǒng)一掃描輸出一份類(lèi)似 linter 的報(bào)表。1.3 適合使用 token 效率 linter 的人群使用 Tokensift 的典型場(chǎng)景包括正在開(kāi)發(fā)基于 LLM 的應(yīng)用prompt 散落在代碼倉(cāng)庫(kù)的模板文件里。團(tuán)隊(duì)有多套業(yè)務(wù)提示詞需要統(tǒng)一規(guī)范避免每個(gè)人按自己的風(fēng)格拼 prompt。在成本優(yōu)化階段想找出所有模型調(diào)用中最耗 token 的模板。使用 Obsidian、GitHub 或知識(shí)庫(kù)管理大量 prompt 片段想批量檢查。如果只是臨時(shí)寫(xiě)一段 prompt 發(fā)給 ChatGPT 對(duì)話那不需要 linter??梢坏?prompt 進(jìn)入代碼庫(kù)、進(jìn)入 CI、進(jìn)入團(tuán)隊(duì)協(xié)作流程它就應(yīng)該被當(dāng)成工程資產(chǎn)來(lái)維護(hù)。2. Tokensift 的工作方式解析、切分、規(guī)則檢查、輸出報(bào)告Tokensift 的定位是“token-efficiency linter”它不直接調(diào)用大模型也不是 prompt 優(yōu)化器。它的核心工作流是整個(gè)文章中需要先理解清楚的部分。2.1 整體處理鏈路一條 prompt 文本通過(guò) Tokensift 檢查時(shí)大致經(jīng)過(guò)四個(gè)階段讀取加載指定文件或目錄下的 prompt 模板。解析識(shí)別文本的段落結(jié)構(gòu)按位置切分系統(tǒng)指令、用戶(hù)指令、示例、占位符、分隔線等區(qū)域。切分使用 tokenizer 或內(nèi)置估算器計(jì)算每個(gè)區(qū)域的 token 數(shù)。規(guī)則評(píng)估逐條執(zhí)行內(nèi)置效率規(guī)則記錄沖突位置、當(dāng)前寫(xiě)法、問(wèn)題原因和修改建議。輸出終端以表格形式輸出或?qū)懭?JSON、Markdown 報(bào)告。這里有一個(gè)關(guān)鍵點(diǎn)解析階段不需要理解 prompt 語(yǔ)義它只做結(jié)構(gòu)層面的靜態(tài)分析。因此 Tokensift 運(yùn)行速度很快不需要啟動(dòng)模型服務(wù)也不會(huì)有網(wǎng)絡(luò)請(qǐng)求。2.2 Token 估算策略不同語(yǔ)言、不同模型的 token 計(jì)算差異很大。Tokensift 在做靜態(tài)檢查時(shí)通常采用以下策略之一使用目標(biāo)模型的 tokenizer 精確切分例如通過(guò)transformers或模型官方 SDK 加載分詞器。使用內(nèi)置啟發(fā)式估算器按英文詞、中文字符、數(shù)字、標(biāo)點(diǎn)分類(lèi)加權(quán)。支持一個(gè)固定估算模型例如tiktoken中的cl100k_base用于統(tǒng)一起見(jiàn)。實(shí)際項(xiàng)目中更推薦把“精確 token 數(shù)”和“效率規(guī)則檢查”分開(kāi)看待。效率規(guī)則關(guān)注的是結(jié)構(gòu)問(wèn)題比如重復(fù)段落、過(guò)長(zhǎng)分隔線、無(wú)效占位符這些不依賴(lài)精確 token 數(shù)也能判斷而報(bào)告中的 token 估算值更適合用目標(biāo)模型分詞器得出。2.3 報(bào)告輸出格式一個(gè)理想的 Tokensift 輸出包含以下字段文件路徑行號(hào)或區(qū)域名稱(chēng)規(guī)則 ID嚴(yán)重級(jí)別當(dāng)前 token 估算值問(wèn)題描述修改建議這與傳統(tǒng) linter 的體驗(yàn)一致開(kāi)發(fā)者在看到問(wèn)題后能直接回到 prompt 模板修改。3. 環(huán)境準(zhǔn)備與安裝先從本地命令行跑起來(lái)由于 Tokensift 是開(kāi)源項(xiàng)目實(shí)際安裝方式可能隨倉(cāng)庫(kù)更新而變化。下面以常見(jiàn) Node.js 工具鏈為例說(shuō)明安裝思路如果項(xiàng)目使用 Python 實(shí)現(xiàn)則安裝方式會(huì)對(duì)應(yīng)變化。落地時(shí)以倉(cāng)庫(kù) README 為準(zhǔn)。3.1 環(huán)境要求依賴(lài)項(xiàng)說(shuō)明Node.js 18如果 Tokensift 以 npm 包發(fā)布需要現(xiàn)代 Node 運(yùn)行時(shí)npm 或 pnpm用于安裝 CLI 工具目標(biāo)模型分詞器可選用于輸出精確 token 數(shù)默認(rèn)可使用內(nèi)置估算器prompt 文件需要被檢查的文本文件支持.txt、.md、.yaml、.json等格式如果你的項(xiàng)目使用了 Python 版本只需要確認(rèn) Python 3.10 以上以及tiktoken、transformers等可選依賴(lài)。3.2 安裝命令在終端執(zhí)行npm install -g tokensift或者作為項(xiàng)目?jī)?nèi)部依賴(lài)安裝npm install --save-dev tokensift安裝后先確認(rèn)版本tokensift --version如果命令行輸出版本號(hào)說(shuō)明安裝成功。如果沒(méi)有找到tokensift命令檢查 npm 全局 bin 目錄是否在 PATH 中或使用npx tokensift。3.3 準(zhǔn)備一個(gè)待檢查的 prompt 文件創(chuàng)建一個(gè)名為prompts/customer-support.md的文件內(nèi)容如下你是客服助手。 你是一個(gè)幫助用戶(hù)解決問(wèn)題的智能客服機(jī)器人。 你的職責(zé)是回答用戶(hù)的問(wèn)題并且提供幫助。 為了提高回答質(zhì)量請(qǐng)你認(rèn)真閱讀用戶(hù)的問(wèn)題。 請(qǐng)你不要回答與問(wèn)題無(wú)關(guān)的內(nèi)容。 請(qǐng)你不要輸出任何與問(wèn)題無(wú)關(guān)的內(nèi)容。 請(qǐng)使用中文回答。 用戶(hù)會(huì)輸入他的問(wèn)題你要根據(jù)問(wèn)題回答。 示例 問(wèn)題怎么退款 回答您好請(qǐng)?jiān)谟唵雾?yè)面點(diǎn)擊退款按鈕。這段 prompt 在功能上能運(yùn)行但存在大量重復(fù)表達(dá)。接下來(lái)用 Tokensift 檢查它。3.4 運(yùn)行檢查在項(xiàng)目根目錄運(yùn)行tokensift check prompts/customer-support.md如果 Tokensift 支持目錄掃描可以運(yùn)行tokensift check prompts --format table檢查完成后終端會(huì)出現(xiàn)問(wèn)題列表和統(tǒng)計(jì)信息類(lèi)似區(qū)域規(guī)則級(jí)別說(shuō)明systemno-repetitionwarning檢測(cè)到重復(fù)指令 4 處systemconcise-instructioninfo系統(tǒng)指令建議壓縮systemseparator-lengthsuggestion分隔線過(guò)長(zhǎng)不同版本的規(guī)則 ID 可能不同這里只需要理解輸出結(jié)構(gòu)。4. 核心規(guī)則與參數(shù)linter 到底在檢查什么Tokensift 的價(jià)值主要體現(xiàn)在規(guī)則庫(kù)。下面以一組通用規(guī)則為例說(shuō)明規(guī)則含義、匹配目標(biāo)、參數(shù)和常見(jiàn)誤報(bào)。4.1 規(guī)則表和默認(rèn)參數(shù)規(guī)則 ID檢查內(nèi)容默認(rèn)閾值級(jí)別no-repetition檢測(cè)語(yǔ)義重復(fù)句子相似度閾值 0.85warningmax-total-tokens整段 prompt 的最大 token 數(shù)2000warningmax-system-tokens系統(tǒng)指令區(qū)域最大 token 數(shù)800warningno-separator-abuse分隔線長(zhǎng)度和數(shù)量超過(guò) 50 字符suggestionplaceholder-check檢查模板中未替換的占位符檢測(cè){{...}}errorjson-compact壓縮 JSON 示例中的無(wú)效空白每行縮進(jìn)不超過(guò) 2 空格suggestionexample-relevance示例與任務(wù)主題匹配度關(guān)鍵詞重合度閾值 0.3info4.2 no-repetition 的實(shí)現(xiàn)思路重復(fù)檢測(cè)不能只比較字符串是否相同。一個(gè)句子可能被改寫(xiě)了幾個(gè)字表達(dá)仍有重復(fù)。常見(jiàn)做法是先做標(biāo)準(zhǔn)化去掉標(biāo)點(diǎn)、統(tǒng)一大小寫(xiě)、把中文和英文空格歸一化然后計(jì)算文本相似度??梢杂镁庉嬀嚯x、n-gram 重疊率或文本嵌入向量相似度。嵌入向量更智能但需要額外依賴(lài)模型n-gram 更適合本地靜態(tài)檢查。例如以下兩句“請(qǐng)你不要回答與問(wèn)題無(wú)關(guān)的內(nèi)容。”“請(qǐng)你不要輸出任何與問(wèn)題無(wú)關(guān)的內(nèi)容?!睒?biāo)準(zhǔn)化后做 n-gram 比較會(huì)發(fā)現(xiàn)高度重疊于是觸發(fā)no-repetition。4.3 max-total-tokens 的配置方式在 Tokensift 配置文件中可以指定不同 prompt 文件或目錄的額度{ rules: { max-total-tokens: { enabled: true, max: 1200 }, max-system-tokens: { enabled: true, max: 400 }, no-repetition: { similarity: 0.85 }, placeholder-check: { pattern: \\{\\{\\s*[a-zA-Z_]\\s*\\}\\} } }, ignore: [**/examples/**] }注意ignore字段用于排除非提示詞文件避免把知識(shí)庫(kù)文檔也當(dāng) prompt 檢查。placeholder-check的pattern需要根據(jù)你的模板語(yǔ)法調(diào)整如果你使用${var}就把正則改為對(duì)應(yīng)的形式。4.4 為什么規(guī)則閾值不能照搬不同業(yè)務(wù)場(chǎng)景對(duì) prompt 風(fēng)格要求完全不同。一個(gè)用于復(fù)雜文檔生成的系統(tǒng)提示詞800 token 可能是合理值一個(gè)用于簡(jiǎn)單分類(lèi)的 prompt300 token 已經(jīng)過(guò)長(zhǎng)。因此任何 linter 都不能只靠一套默認(rèn)閾值。正確做法是先收集現(xiàn)有 prompt計(jì)算出當(dāng)前 token 分布再逐步收緊閾值。比如第一周設(shè)置max-total-tokens: 1500清理告警后再降到 1200保持團(tuán)隊(duì)可接受的節(jié)奏。5. 關(guān)鍵配置與代碼示例把 Tokensift 接入工程Tokensift 不能只停留在手動(dòng)執(zhí)行命令。實(shí)際項(xiàng)目中建議把它接入 pre-commit、CI 或編輯器保存鉤子。下面給出幾種可落地的接入方式。5.1 在 package.json 中集成 npm script在項(xiàng)目package.json中添加{ scripts: { lint:prompt: tokensift check prompts --format table, lint:prompt:json: tokensift check prompts --format json --output reports/token-report.json } }之后開(kāi)發(fā)時(shí)運(yùn)行npm run lint:promptCI 里用同一命令。5.2 接入 Git pre-commit創(chuàng)建.husky/pre-commit或.git/hooks/pre-commit內(nèi)容是#!/bin/sh npx tokensift check prompts --format table --fail-on error加--fail-on error后只要存在錯(cuò)誤級(jí)別問(wèn)題提交就會(huì)被中斷。這適合團(tuán)隊(duì)強(qiáng)制校驗(yàn)。5.3 在 Node.js 中調(diào)用 API如果 Tokensift 提供編程接口可以在自定義腳本中按需檢查import { lintPrompt, loadConfig } from tokensift/core; const config await loadConfig(tokensift.config.json); const result lintPrompt(你是客服助手。你是一個(gè)幫助用戶(hù)的客服。, config); console.log(result.violations); console.log(result.totalTokens);這個(gè) API 適合接入到自定義的提示詞管理平臺(tái)在保存模板時(shí)自動(dòng)給出 token 預(yù)估和問(wèn)題列表。5.4 結(jié)合編輯器提示編輯器集成一般通過(guò) LSP 或文件保存命令實(shí)現(xiàn)。若不支持官方插件可以先用一個(gè)簡(jiǎn)單腳本監(jiān)聽(tīng).md文件變化保存后執(zhí)行 Tokensift 并輸出報(bào)告。這種方式不是最優(yōu)雅但能在不支持原生插件的編輯器中獲得類(lèi)似體驗(yàn)。5.5 使用配置覆蓋業(yè)務(wù)模板差異一個(gè)倉(cāng)庫(kù)里往往同時(shí)存在多個(gè)業(yè)務(wù)線的 prompt。可以通過(guò) glob 給不同目錄設(shè)置不同規(guī)則{ overrides: [ { files: prompts/customer-service/**, rules: { max-total-tokens: { max: 800 } } }, { files: prompts/legal-analysis/**, rules: { max-total-tokens: { max: 3000 } } } ] }法律長(zhǎng)文檔分析場(chǎng)景的 prompt 本身需要更長(zhǎng)的系統(tǒng)指令和示例不能與客服場(chǎng)景共用同一閾值。6. 運(yùn)行驗(yàn)證從輸出結(jié)果反推修改優(yōu)先級(jí)使用 Tokensift 并不是運(yùn)行一次然后清掉所有告警。合理的流程是先看統(tǒng)計(jì)再分批處理。6.1 查看統(tǒng)計(jì)并確定優(yōu)先級(jí)運(yùn)行tokensift check prompts --format summary輸出會(huì)包含總文件數(shù)、總 token 數(shù)、問(wèn)題總數(shù)、各級(jí)別數(shù)量。此時(shí)優(yōu)先處理error級(jí)別問(wèn)題然后是warning。info和suggestion可以作為后續(xù)優(yōu)化項(xiàng)。錯(cuò)誤頁(yè)級(jí)問(wèn)題多與未替換占位符、模板格式錯(cuò)誤有關(guān)直接影響生成質(zhì)量必須優(yōu)先修復(fù)。6.2 修復(fù)示例前后對(duì)比以第三節(jié)的客服 prompt 為例修復(fù)前約 180 token修復(fù)后可以壓縮到 90 token 左右。下面是修復(fù)后版本你是客服助手用簡(jiǎn)潔中文回答用戶(hù)問(wèn)題。 如果用戶(hù)問(wèn)題與售后流程無(wú)關(guān)請(qǐng)告知無(wú)法回答。 示例 問(wèn)題怎么退款 回答請(qǐng)?jiān)谟唵雾?yè)面點(diǎn)擊退款按鈕。這里壓縮的核心不是刪除必要功能而是去掉重復(fù)指令和空話??梢钥吹秸Z(yǔ)義覆蓋沒(méi)有丟失但 token 數(shù)明顯下降。修復(fù)后再次運(yùn)行tokensift check prompts/customer-support.md --format table此時(shí)重復(fù)指令告警消失總 token 數(shù)下降。驗(yàn)證時(shí)不要只看告警數(shù)量還要看totalTokens是否真的降低。6.3 驗(yàn)證 token 估算與實(shí)際模型消耗如果項(xiàng)目會(huì)真實(shí)調(diào)用模型建議選幾條 prompt 手動(dòng)對(duì)比 Tokensift 的估算值和模型返回的實(shí)際用量。多數(shù)模型 API 響應(yīng)里會(huì)包含usage.prompt_tokens字段。用一條真實(shí)請(qǐng)求驗(yàn)證后再?zèng)Q定是否相信內(nèi)置估算器。如果偏差超過(guò) 10%就需要在配置中指定更準(zhǔn)確的分詞器或在報(bào)告中標(biāo)記“估算值”。7. 常見(jiàn)問(wèn)題與排查路徑Tokensift 本身不復(fù)雜但在實(shí)際接入時(shí)仍會(huì)遇到一些與預(yù)期不一致的情況。下面按現(xiàn)象、原因、檢查方式、解決方案的順序整理。7.1 同一個(gè)句子被重復(fù)標(biāo)記但人工判斷并不重復(fù)可能原因閾值設(shè)置太寬松導(dǎo)致相似度偏高的句子被判為重復(fù)。檢查方式查看該規(guī)則命中的具體文本比較標(biāo)準(zhǔn)化后的內(nèi)容。解決方案調(diào)高相似度閾值例如從 0.85 調(diào)到 0.92或?qū)潭ǘ陶Z(yǔ)使用 ignore 列表。問(wèn)題現(xiàn)象常見(jiàn)原因檢查方式處理建議重復(fù)告警過(guò)多相似度閾值過(guò)低查看命中的句子對(duì)調(diào)高閾值或加入 ignore 短語(yǔ)部分模板未檢查glob 匹配范圍不對(duì)檢查配置文件中的 files 字段調(diào)整路徑匹配表達(dá)式token 估算與模型不一致使用了不同分詞器對(duì)比 API usage 字段切換到目標(biāo)模型分詞器占位符誤報(bào)文本里包含{{但不是模板變量查看上下文配置精確的正則模式shell 報(bào)命令不存在未安裝或 PATH 未配置運(yùn)行npx tokensift重新全局安裝或使用 npx7.2 占位符誤報(bào)語(yǔ)言無(wú)關(guān)提示詞模板經(jīng)常使用{{variable}}但 markdown 表格、代碼示例里也可能出現(xiàn)類(lèi)似符號(hào)。解決方案是讓placeholder-check的 pattern 更嚴(yán)格比如要求變量名只能由字母、數(shù)字、下劃線組成并且前后不能跟英文引號(hào)降低誤報(bào)概率。7.3 忽略文件不生效如果 Tokensift 支持ignore配置但某個(gè)目錄仍被檢查檢查 glob 是否使用了絕對(duì)路徑或錯(cuò)誤的分隔符。在 Windows 環(huán)境下路徑分隔符容易出問(wèn)題建議統(tǒng)一使用正斜杠例如prompts/generated/**。7.4 與已有 prompt 生成鏈路沖突有些團(tuán)隊(duì)使用提示詞模板引擎例如 Jinja2、Handlebars、f-string。此時(shí) Tokensift 檢查的應(yīng)該是渲染前的模板而不是渲染后的最終字符串。渲染前的模板中會(huì)有大量語(yǔ)法標(biāo)記可能觸發(fā)占位符或縮進(jìn)規(guī)則。建議在配置中增加一個(gè)rendered參數(shù)標(biāo)記當(dāng)前文件是模板還是最終的 prompt 文本對(duì)不同類(lèi)型采用不同規(guī)則。另一種做法是把渲染后的結(jié)果輸出到一個(gè)臨時(shí)目錄再對(duì)臨時(shí)目錄執(zhí)行檢查缺點(diǎn)是增加了流水線復(fù)雜度。7.5 在 CI 中誤殺正常提交CI 加入 linter 后最怕的問(wèn)題是“上次沒(méi)改這個(gè)文件卻因?yàn)槠渌募婢瘜?dǎo)致構(gòu)建失敗”。做法是只檢查本次變更的 prompt 文件而不檢查全量目錄??梢杂萌缦履_本思路git diff --name-only origin/main...HEAD | grep prompts/ | xargs tokensift check如果本次提交沒(méi)有修改任何 prompt 文件就不執(zhí)行檢查避免無(wú)關(guān)歷史問(wèn)題阻塞提交。8. 最佳實(shí)踐與擴(kuò)展方向從實(shí)際項(xiàng)目經(jīng)驗(yàn)看把 token 效率 linter 引入團(tuán)隊(duì)最關(guān)鍵的不是工具本身而是流程設(shè)計(jì)。8.1 從后端開(kāi)發(fā)中借鑒的接入節(jié)奏第一階段先做“只讀檢查”。把 Tokensift 接入本地腳本只輸出報(bào)告不阻斷任何流程。讓團(tuán)隊(duì)先熟悉問(wèn)題類(lèi)型和修改建議積累一套適合自己業(yè)務(wù)規(guī)則的配置。第二階段再把warning級(jí)別的重點(diǎn)問(wèn)題納入代碼評(píng)審清單。第三階段才在 CI 中開(kāi)啟--fail-on error。這樣避免一開(kāi)始就大量告警引發(fā)的抵觸情緒。8.2 建立 prompt 基準(zhǔn)報(bào)告在倉(cāng)庫(kù)中維護(hù)一個(gè)prompt-baseline.json記錄核心 prompt 當(dāng)前的 token 數(shù)、問(wèn)題數(shù)、調(diào)用模型、創(chuàng)建時(shí)間。每次優(yōu)化后更新這個(gè)文件。長(zhǎng)期積累后可以清楚看到哪些區(qū)域一直在增長(zhǎng)哪些區(qū)域的優(yōu)化最有效。8.3 與回歸測(cè)試結(jié)合token 優(yōu)化最怕壓縮后改變語(yǔ)義。建議在修改 prompt 后準(zhǔn)備一套固定輸入-預(yù)期輸出基準(zhǔn)。先用優(yōu)化前的 prompt 跑一遍基準(zhǔn)記錄輸出再用優(yōu)化后的 prompt 跑一遍對(duì)比關(guān)鍵結(jié)果。這一步很重要因?yàn)?linter 只能判斷文本結(jié)構(gòu)不能判斷語(yǔ)義是否完整。如果人力有限至少保留 5 到 10 條覆蓋主要場(chǎng)景的測(cè)試樣例。8.4 擴(kuò)展方向Tokensift 的規(guī)則庫(kù)可以不斷擴(kuò)展以下是幾個(gè)有價(jià)值的后續(xù)方向模型專(zhuān)屬提示詞規(guī)則針對(duì) Claude 的 XML 標(biāo)簽格式、針對(duì) OpenAI 的 role 字段使用規(guī)范。上下文安全規(guī)則檢查 prompt 中是否包含不必要的機(jī)密信息、郵箱、手機(jī)號(hào)。token 預(yù)算樹(shù)當(dāng) prompt 由多個(gè)子模塊拼接而成時(shí)報(bào)告每個(gè)模塊的 token 占比。版本對(duì)比對(duì)比 Git 中兩次提交的 prompt token 數(shù)和問(wèn)題數(shù)變化。自動(dòng)修復(fù)建議對(duì)明顯的重復(fù)句、過(guò)長(zhǎng)分隔線給出替代文本。8.5 新手最應(yīng)該先掌握的核心判斷如果只記住一件事token 效率優(yōu)化不是把 prompt 越寫(xiě)越短而是把單位 token 里的指令價(jià)值提高。一個(gè) 300 token 但表達(dá)準(zhǔn)確的 prompt比一個(gè) 80 token 但缺關(guān)鍵約束的 prompt 更值得使用。Tokensift 負(fù)責(zé)找出“低價(jià)值 token”而保留哪些有效信息仍然需要開(kāi)發(fā)者來(lái)判斷。建議的練習(xí)順序是先準(zhǔn)備 5 個(gè)真實(shí)業(yè)務(wù) prompt運(yùn)行 Tokensift 獲得報(bào)告然后只修復(fù)error和warning修復(fù)后再跑一輪對(duì)比 token 數(shù)和問(wèn)題數(shù)最后把配置文件和報(bào)告模板納入倉(cāng)庫(kù)讓后續(xù)每次修改都有據(jù)可查。當(dāng) prompt 被當(dāng)作代碼一樣審計(jì)、提交和回歸LLM 應(yīng)用的工程質(zhì)量才能真正穩(wěn)定下來(lái)。