用開發(fā)面試題深挖:token消耗背后的成本控制與系統(tǒng)思維)
我前幾天參加了一場(chǎng)面試崗位是AI應(yīng)用開發(fā)。前面聊得還算順暢到了技術(shù)環(huán)節(jié)面試官突然瞥了一眼我簡(jiǎn)歷上寫的個(gè)人項(xiàng)目冷不丁來了一句“你一天燒幾十個(gè)token也好意思面AI應(yīng)用開發(fā)”說實(shí)話那一瞬間我腦子是有點(diǎn)空的。不是因?yàn)楸粏栕×硕沁@個(gè)問題本身太有“殺傷力”了——它既像在質(zhì)疑項(xiàng)目含金量又像在試探我對(duì)成本和效率的態(tài)度。我定了定神回了一句“我燒的不是token是我的熱情?!泵嬖嚬巽读艘幌氯缓笮α恕懊魈於妗!边@句回答當(dāng)然有抖機(jī)靈的成分但回過頭細(xì)想這場(chǎng)對(duì)話其實(shí)戳中了AI應(yīng)用開發(fā)這個(gè)崗位最核心的命題在模型能力嚴(yán)重同質(zhì)化的今天一個(gè)合格的AI應(yīng)用開發(fā)者到底靠什么拉開差距我的答案是對(duì)token成本的掌控力以及對(duì)模型行為的理解深度。這篇文章就把我這段時(shí)間做AI應(yīng)用開發(fā)攢下的經(jīng)驗(yàn)結(jié)合這次面試的復(fù)盤一次性聊透。1. 面試官問“token消耗”到底在問什么先把面試題本身拆開看。面試官?zèng)]有問“你會(huì)不會(huì)調(diào)API”沒有問“你用過哪些模型”而是精準(zhǔn)地拿“token消耗”來試我。這個(gè)問題表面上在聊成本實(shí)際上背后藏著三層考察意圖。第一層考察你是否真的做過端到端的AI應(yīng)用。只跑過幾個(gè)Demo的人對(duì)token通常是沒有概念的因?yàn)镈emo跑幾次就扔了根本不會(huì)去看賬單。真正上線過應(yīng)用的人一定被token賬單教育過會(huì)在意每一次請(qǐng)求的輸入輸出長(zhǎng)度會(huì)在意上下文窗口被撐爆的瞬間。第二層考察你對(duì)模型邊界和成本結(jié)構(gòu)的理解。AI應(yīng)用開發(fā)和傳統(tǒng)軟件開發(fā)最大的差別在于你的每一行代碼都在消費(fèi)外部資源而這個(gè)資源的單價(jià)并不透明。不同模型的定價(jià)可以相差幾十倍同一模型在不同上下文長(zhǎng)度下的耗時(shí)也不一樣你是否能基于成本模型做技術(shù)選型這決定了你做的應(yīng)用能不能活過測(cè)試期。第三層考察你的人格特質(zhì)。面試官說“一天燒幾十個(gè)token”其實(shí)是在用一個(gè)略帶挑釁的方式來觀察你的反應(yīng)。技術(shù)不過硬的人在受到質(zhì)疑時(shí)容易慌亂要么急著辯解要么開始自我懷疑而有底氣的人會(huì)把問題接住把它變成一個(gè)展示自己技術(shù)判斷力的機(jī)會(huì)。我那句“燒的是熱情”之所以有效是因?yàn)樗瘸姓J(rèn)了成本問題同時(shí)暗戳戳表明“我愿意為正確的事情投入資源”。關(guān)于這一點(diǎn)多說一句。后來二面的時(shí)候面試官跟我坦白他說前后面了十幾個(gè)候選人有一半人連token成本怎么估算都答不上來還有幾個(gè)一聽這個(gè)問題就開始紅臉辯解搞得場(chǎng)面很僵。他說他要的不是一個(gè)能把API文檔背得滾瓜爛熟的人而是一個(gè)真正在開發(fā)過程中圍繞成本、效果、穩(wěn)定性做過取舍的人。所以如果你正準(zhǔn)備面AI應(yīng)用開發(fā)崗記住這句話token消耗是表象成本意識(shí)和系統(tǒng)思維才是考察的實(shí)質(zhì)。2. token是什么以及為什么必須對(duì)它精打細(xì)算想真正回答好這種問題得先把token這個(gè)底層概念吃透。token是模型處理文本的最小單元它可以是一個(gè)單詞的一部分、一個(gè)漢字、一個(gè)標(biāo)點(diǎn)或者一段代碼片段。不同模型的分詞器不一樣同樣一段文字在不同模型里的token數(shù)也各不相同。有個(gè)粗略但好用的估算方法英文文本平均1個(gè)token約等于4個(gè)字符中文文本平均1個(gè)漢字約等于1.5到2個(gè)token。這句話聽起來簡(jiǎn)單實(shí)際算賬的時(shí)候會(huì)發(fā)現(xiàn)水深得很。我用一個(gè)真實(shí)例子來說明。給某公司做的那個(gè)客服問答系統(tǒng)系統(tǒng)每天處理大約5000次會(huì)話每次會(huì)話平均包含三輪問答。不做任何優(yōu)化的時(shí)候每次會(huì)話要消耗的token構(gòu)成大致是系統(tǒng)提示詞System Prompt1200 token固定消耗我在里面寫了詳細(xì)的角色設(shè)定、回答規(guī)范、格式要求歷史對(duì)話記錄三輪問答每輪約400 token總計(jì)1200 token用戶當(dāng)前輸入平均350 token模型回復(fù)平均450 token這樣粗算下來單次會(huì)話大約消耗3200 token。如果按模型的輸入輸出分開計(jì)價(jià)假設(shè)輸入單價(jià)是每百萬token約14元輸出單價(jià)約28元那么單次會(huì)話成本大概是輸入部分(1200 1200 350) / 1000000 × 14 ≈ 0.0385元 輸出部分450 / 1000000 × 28 ≈ 0.0126元 單次會(huì)話總成本約0.051元一天5000次會(huì)話就是大約255元一個(gè)月光這一項(xiàng)就要燒掉七千多塊。這還沒有算增量部署、模型微調(diào)、失敗的請(qǐng)求重試。很多人在開發(fā)階段感受不到這種壓力是因?yàn)闇y(cè)試期間的用戶量小一個(gè)月也就幾千次請(qǐng)求咋看都便宜。但一旦應(yīng)用真實(shí)上線用戶量是百萬級(jí)的token成本瞬間就從小數(shù)目變成了能決定項(xiàng)目生死的大問題。我自己在項(xiàng)目上線初期就踩過這個(gè)坑。當(dāng)時(shí)沒有預(yù)估成本結(jié)果上線第二周模型賬單直接干到整個(gè)項(xiàng)目預(yù)算的40%我這才意識(shí)到?jīng)]有成本意識(shí)的技術(shù)方案就是在給公司燒錢。所以現(xiàn)在每接一個(gè)項(xiàng)目我都會(huì)先算一筆賬目標(biāo)用戶量是多少交互輪次大概多少單輪會(huì)不會(huì)生成長(zhǎng)文本這決定了我在方案里怎么設(shè)計(jì)緩存、怎么壓縮上下文、要不要做路由分流。這些細(xì)節(jié)直接決定一個(gè)AI應(yīng)用是賺錢還是賠錢。3. 從“亂燒”到“克制”我的token優(yōu)化實(shí)戰(zhàn)方法論從被成本教育過之后我整理了一套自己的token優(yōu)化方法幾乎每個(gè)AI應(yīng)用項(xiàng)目都用得上。這套方法的核心不是單純的“少用token”而是把每一分token都用在能讓模型表現(xiàn)更好的地方。3.1 能做預(yù)壓縮的不要帶著全量歷史跑上下文窗口是AI應(yīng)用最寶貴的資源也是最容易被浪費(fèi)的資源。很多初涉AI開發(fā)的人習(xí)慣把全部歷史記錄一股腦塞給模型看起來“上下文豐富”實(shí)際上模型在超長(zhǎng)上下文里不僅推理速度變慢還特別容易“迷失”。我現(xiàn)在的做法是三級(jí)歷史策略。第一級(jí)最近三輪對(duì)話完整保留這是模型回答當(dāng)前問題的核心依據(jù)。第二級(jí)更早的對(duì)話做摘要用一個(gè)輕量模型或者規(guī)則腳本把每輪對(duì)話壓縮成一句話主題。第三級(jí)超出窗口承載能力的內(nèi)容直接丟棄或者歸檔到外部存儲(chǔ)里需要時(shí)再按關(guān)鍵詞檢索出來。這個(gè)做法最直接的收益是上下文長(zhǎng)度從平均3000 token降到了1200左右模型響應(yīng)時(shí)間減少了將近一半賬單費(fèi)用直接降了六成。更關(guān)鍵的是回答質(zhì)量反而提高了因?yàn)槟P筒辉俦蝗哂嘈畔⒏蓴_能更精準(zhǔn)地聚焦在與當(dāng)前問題最相關(guān)的信息上。3.2 緩存那些“永遠(yuǎn)不變”的內(nèi)容系統(tǒng)提示詞System Prompt和靜態(tài)知識(shí)庫內(nèi)容是token消耗里面最“冤大頭”的部分。每次請(qǐng)求都重復(fù)帶相同的系統(tǒng)提示詞就像每次寫信都把自我介紹抄一遍浪費(fèi)卻不產(chǎn)生任何新價(jià)值。目前幾個(gè)主流模型廠商都提供上下文緩存能力。簡(jiǎn)單說就是如果你連續(xù)傳相同的前綴內(nèi)容這部分token會(huì)以極低的價(jià)格計(jì)費(fèi)有的甚至直接打一折。我實(shí)際驗(yàn)證過同樣的系統(tǒng)提示詞加上一份說明文檔一旦啟用緩存這部分費(fèi)用從每小時(shí)若干元的水平直接降了一個(gè)量級(jí)。關(guān)鍵是這個(gè)緩存機(jī)制需要你主動(dòng)開啟并在代碼層面保持前綴的一致性。我見過不少項(xiàng)目代碼里每個(gè)請(qǐng)求的提示詞都動(dòng)態(tài)拼接前綴看著相似實(shí)際每次都有細(xì)微變化結(jié)果緩存根本命中不了。所以如果你發(fā)現(xiàn)自己的token賬單沒降先檢查一下前綴是不是真的“穩(wěn)定”。3.3 用結(jié)構(gòu)化輸出減少無效生成在跟模型交互時(shí)一個(gè)容易被忽視的token浪費(fèi)場(chǎng)景是“模型輸出了一堆屁話”。比如你問它一個(gè)簡(jiǎn)單問題它非要先用一大段文字鋪墊背景再給結(jié)論最后再加一段注意事項(xiàng)。這在開放式閑聊里沒問題但在生產(chǎn)級(jí)應(yīng)用里就是純成本。我的方案是強(qiáng)制使用結(jié)構(gòu)化輸出。現(xiàn)在主流模型都支持JSON Schema約束輸出讓模型只返回一個(gè)符合約定的JSON對(duì)象不要任何多余文字。我做過對(duì)比測(cè)試同樣一個(gè)查詢?nèi)蝿?wù)開放輸出時(shí)回復(fù)經(jīng)常在1000 token左右加了結(jié)構(gòu)化約束后直接壓到不足200 token而且解析和提取信息的代碼邏輯也更穩(wěn)定。這里有個(gè)小技巧結(jié)構(gòu)化約束模板里也可以順便帶上目標(biāo)格式示例。給模型一個(gè)完整示例往往比寫十句描述性規(guī)定更有效。模型是基于預(yù)測(cè)的給它一個(gè)“標(biāo)準(zhǔn)答案”長(zhǎng)什么樣它就更容易照著來。3.4 該省的地方省該花的地方絕不能摳說了這么多省token的策略有一點(diǎn)我要停下來專門強(qiáng)調(diào)token優(yōu)化絕對(duì)不等于無腦壓縮。如果你的上下文壓縮得太多模型缺失了必要的背景信息回答質(zhì)量一定會(huì)下降用戶感知到的是“這AI怎么變笨了”這種損失遠(yuǎn)大于省下的那點(diǎn)錢。以那個(gè)客服系統(tǒng)為例用戶問售后政策時(shí)我需要把完整的政策原文發(fā)給模型一字不落絕不能壓縮成摘要。因?yàn)檎邨l文是交付給用戶的法律事實(shí)摘要可能導(dǎo)致模型給出含糊甚至錯(cuò)誤的回答。而用戶只是隨口問一句“你們有什么產(chǎn)品”這種問題就不值得把整個(gè)產(chǎn)品手冊(cè)都塞進(jìn)上下文。我的一個(gè)經(jīng)驗(yàn)法則是讓模型做精確生成時(shí)輸入信息要還原原始細(xì)節(jié)讓模型做歸納總結(jié)時(shí)輸入信息可以大膽壓縮。這個(gè)“還原與壓縮并存”的思路也是我后來面試二面時(shí)重點(diǎn)講的案例。4. 不只是省錢Prompt設(shè)計(jì)與上下文管理的進(jìn)階細(xì)節(jié)如果把token優(yōu)化比作“節(jié)流”那么Prompt設(shè)計(jì)就是在同等的token預(yù)算下“提質(zhì)”。這兩個(gè)東西是強(qiáng)耦合的——高質(zhì)量的Prompt能讓每一條記錄在輸入里的信息發(fā)揮更大價(jià)值也能讓模型輸出更穩(wěn)定減少因?yàn)榛卮鸩粚?duì)而被迫重試的額外消耗。4.1 少樣本示例比規(guī)則描述更管用在寫提示詞的時(shí)候我發(fā)現(xiàn)一個(gè)規(guī)律給模型幾條“范例”效果遠(yuǎn)好于給它寫十條“須遵守”。原因是模型本身是語言模型它對(duì)“模式”比對(duì)“命令”更敏感。每給一條高質(zhì)量示例就相當(dāng)于幫模型鎖定了一種輸出模式。比如我想讓模型做用戶評(píng)論分類分類維度包括投訴、建議、咨詢、無關(guān)四類。最初的提示詞寫得很規(guī)范加了大量“請(qǐng)務(wù)必按照以下規(guī)則”的描述效果一般劃分邊界模糊。后來我把方案改成兩三個(gè)完整的“輸入樣例理想輸出樣例”模型的表現(xiàn)立刻不一樣幾乎沒有再出現(xiàn)分類不明確的情況。這個(gè)寫法的額外好處是少樣本示例還能順便控制輸出格式。只要示例里展示的是精煉、直接的回答風(fēng)格模型大概率會(huì)照著這個(gè)風(fēng)格走。輸出長(zhǎng)度自然就短了token消耗跟著就下來了。4.2 溫度參數(shù)也可以幫你們省錢溫度Temperature這個(gè)參數(shù)經(jīng)常被忽略但它在成本和效果之間做平衡時(shí)挺好用的。溫度調(diào)得越高模型的輸出越不確定越容易寫出多余的話甚至跑偏溫度調(diào)低輸出就更穩(wěn)定更貼近既有模式。如果你的應(yīng)用是任務(wù)型的比如信息抽提、總結(jié)、分類溫度可以大膽地往0到0.3這個(gè)區(qū)間調(diào)。我自己實(shí)測(cè)這類任務(wù)在低溫度下答案準(zhǔn)確率更高輸出也更精簡(jiǎn)。而如果你做的是文案創(chuàng)作、頭腦風(fēng)暴這類開放任務(wù)才需要把溫度調(diào)到0.7以上讓回答顯得更自然更多樣。從我接手過的幾個(gè)項(xiàng)目看大部分人的默認(rèn)設(shè)置都是直接用廠商給的默認(rèn)值這個(gè)默認(rèn)值通常偏均衡并不適合每一個(gè)應(yīng)用場(chǎng)景。養(yǎng)成一個(gè)習(xí)慣每次接新項(xiàng)目先花時(shí)間把溫度、Top P這些參數(shù)跑一遍對(duì)比選擇最適合你這個(gè)應(yīng)用場(chǎng)景的。有些參數(shù)組合能讓單次成本下降三分之一而且效果更好屬于典型的“便宜有好貨”。4.3 上下文管理避免“記憶幻覺”上下文管理是AI應(yīng)用開發(fā)里最微妙、也最容易被忽視的部分。很多人以為把更多歷史信息給模型模型會(huì)更“懂你”但真實(shí)情況是模型不會(huì)像人一樣區(qū)分“重要信息”和“邊角料”。上下文里塞的東西越多模型越容易在回答問題的時(shí)候撿了芝麻丟了西瓜甚至回憶起不存在的細(xì)節(jié)一本正經(jīng)地編造。在客服系統(tǒng)里我們遇到過這樣的事用戶前面問了一句跟訂單無關(guān)的閑話模型在后面的回答中居然把這句話當(dāng)成了背景產(chǎn)生了一個(gè)完全錯(cuò)誤的回答。那之后我把歷史上下文按“事實(shí)型內(nèi)容”和“閑聊型內(nèi)容”做了分離閑聊內(nèi)容不參與后續(xù)所有決策問題馬上就解決了。我的做法是把上下文劃分成四個(gè)槽位用戶基礎(chǔ)信息靜態(tài)、當(dāng)前會(huì)話目標(biāo)動(dòng)態(tài)、核心業(yè)務(wù)規(guī)則靜態(tài)、相關(guān)歷史結(jié)論摘要型。每個(gè)槽位有獨(dú)立的刷新和清理策略不會(huì)因?yàn)橐淮螌?duì)話過長(zhǎng)就把所有槽位全部塞滿。這套上下文槽位管理方案在我參加的幾次技術(shù)分享中講出來時(shí)很多人都說“原來還能這樣分”。但其實(shí)就是回到一個(gè)樸素的原則把模型的注意力放在它該關(guān)注的地方而不是把整個(gè)對(duì)話記錄都無腦丟給它。這算是所有AI應(yīng)用開發(fā)里值得反復(fù)打磨的地方。5. 模型選型與評(píng)估燒token也要燒得明白做AI應(yīng)用開發(fā)避不開的一個(gè)環(huán)節(jié)是選模型。市面上的模型五花八門有人選擇最強(qiáng)大最貴的旗艦?zāi)P陀腥诉x擇最便宜的小參數(shù)模型。我的經(jīng)驗(yàn)是選模型不能靠名氣也不要靠直覺一定要靠數(shù)據(jù)而這個(gè)數(shù)據(jù)就是你自己真實(shí)場(chǎng)景下的評(píng)測(cè)結(jié)果。5.1 先想清楚場(chǎng)景到底需不需要“最強(qiáng)模型”這里有一個(gè)我在項(xiàng)目里反復(fù)驗(yàn)證過的事實(shí)大部分AI應(yīng)用場(chǎng)景用不上目前能力最強(qiáng)的旗艦?zāi)P?。什么意思如果你的任?wù)是情感分析、實(shí)體抽取、關(guān)鍵詞提取、簡(jiǎn)單客服問答一個(gè)中等大小的模型完全夠用旗艦?zāi)P投喑鰜淼哪遣糠帧奥斆鳌庇貌簧系珒r(jià)格可能是十倍以上。反過來如果你的應(yīng)用是復(fù)雜的多步推理、長(zhǎng)文深度理解、代碼生成那么旗艦?zāi)P偷哪芰Σ胖档媚闾湾X。這里面的判斷標(biāo)準(zhǔn)很簡(jiǎn)單你的任務(wù)對(duì)“推理深度”的要求有多高。高就花大價(jià)錢低就果斷用小模型。有一次我做了一個(gè)知識(shí)庫問答系統(tǒng)為了保險(xiǎn)起見最開始所有請(qǐng)求都走能力最強(qiáng)的旗艦?zāi)P?。?shí)測(cè)平均每輪對(duì)話40萬token的單價(jià)比普通模型貴得多但準(zhǔn)確率并沒有顯著提升反而因?yàn)槌L(zhǎng)上下文讓響應(yīng)速度變慢。后來我把任務(wù)分流簡(jiǎn)單查詢走中小模型復(fù)雜推理才走最強(qiáng)模型總成本立馬降了一半還多用戶體驗(yàn)還更好了。所以當(dāng)你面對(duì)模型選型的時(shí)候不要問“哪個(gè)模型最強(qiáng)”要問“哪個(gè)模型在我的場(chǎng)景下能夠在成本可接受的范圍內(nèi)給出合格的結(jié)果”。這個(gè)思路用到面試溝通里也能幫你避開“唯參數(shù)論”的陷阱畢竟模型能力和應(yīng)用效果之間從來不能畫等號(hào)。5.2 用小而準(zhǔn)的評(píng)測(cè)集來“定檔”既然要做基于數(shù)據(jù)的選型就得有一個(gè)好用的評(píng)測(cè)集。很多人做選型的時(shí)候拿一兩條測(cè)試用例試試就跑路了這完全不靠譜。你自己?jiǎn)栆粭l樣例可能都不能覆蓋真實(shí)場(chǎng)景的十分之一選出來的模型自然沒有說服力。我的方法是花半天時(shí)間構(gòu)建一個(gè)20到50條輸入樣例的評(píng)測(cè)集。這幾十條樣例要盡可能覆蓋應(yīng)用的全部關(guān)鍵場(chǎng)景包括正常問題、邊界情況、無標(biāo)準(zhǔn)答案的問題、以及惡意或危險(xiǎn)輸入。我在每個(gè)樣例上提前標(biāo)注好“理想答案”和“可接受答案”評(píng)測(cè)模型時(shí)按兩個(gè)維度打分答案準(zhǔn)確率和格式符合度。這個(gè)小評(píng)測(cè)集帶來的直接收益是我可以在一小時(shí)之內(nèi)把四五個(gè)候選模型的“性價(jià)比”橫向?qū)Ρ瘸鰜?。比一張嘴?zhēng)論哪個(gè)模型好靠譜多了。而且這套評(píng)測(cè)集在后續(xù)產(chǎn)品迭代中也持續(xù)復(fù)用新模型一發(fā)布跑一遍就知道值不值得替換。我在一個(gè)模擬項(xiàng)目中把評(píng)測(cè)集跑完發(fā)現(xiàn)某中小模型在90%的樣例上表現(xiàn)接近旗艦?zāi)P椭挥?0%的高難度推理樣例有差距。但它的價(jià)格是旗艦?zāi)P偷氖种徊坏健D俏疫€有什么好猶豫的肯定用它跑主要流量旗艦?zāi)P椭蛔龆档住?.3 成本監(jiān)控和配額預(yù)警是AI應(yīng)用開發(fā)的“儀表盤”選完模型、做完優(yōu)化成本控制還沒有結(jié)束。生產(chǎn)環(huán)境里的AI應(yīng)用時(shí)刻都在產(chǎn)生token消耗如果你沒有一個(gè)監(jiān)控和預(yù)警機(jī)制成本失控往往是悄無聲息的。我現(xiàn)在做每一個(gè)項(xiàng)目都會(huì)在日志系統(tǒng)里記錄每次請(qǐng)求的輸入token數(shù)、輸出token數(shù)、模型名稱、任務(wù)類型、耗時(shí)這些核心指標(biāo)。然后做一張簡(jiǎn)單的匯總報(bào)表按天查看總消耗、平均單次消耗、按任務(wù)類型的消耗分布。用這些數(shù)據(jù)我能非??斓匕l(fā)現(xiàn)異常情況。比如某天某個(gè)任務(wù)的token消耗突然飆升我馬上就能定位到是上下文緩存失效了還是有人改了提示詞導(dǎo)致前綴不匹配。又比如某個(gè)用戶的行為模式特別奇怪頻繁觸發(fā)長(zhǎng)上下文調(diào)用我就能針對(duì)性地做熔斷或者額外限流。這塊很多人不太在乎但實(shí)際上它是決定AI應(yīng)用能否長(zhǎng)期健康運(yùn)行的關(guān)鍵。你想想如果連你都不知道你的應(yīng)用每天燒多少錢、燒在哪里你怎么向老板匯報(bào)怎么跟客戶談利潤率這個(gè)“成本儀表盤”意識(shí)是我認(rèn)為的AI應(yīng)用開發(fā)者和單純算法工程師之間最大的分界線。6. 面試中如何聊透“token消耗”這個(gè)話題回到開頭那次面試。面試官問完了token消耗緊接著又追問了幾個(gè)問題。我把我認(rèn)為有價(jià)值的問答復(fù)盤一下你會(huì)發(fā)現(xiàn)把token這個(gè)話題聊透比背一百道八股文有用得多。他問的第一個(gè)問題是“你說你優(yōu)化了token成本那你怎么證明你的優(yōu)化有效”這個(gè)問題其實(shí)在考察你有沒有體系化的評(píng)估手段。我的回答是拿出一套對(duì)比數(shù)據(jù)優(yōu)化前的平均每次會(huì)話消耗優(yōu)化后的對(duì)應(yīng)值以及準(zhǔn)確率的對(duì)比情況。我特別強(qiáng)調(diào)了一點(diǎn)優(yōu)化必須在效果不降的前提下才有意義所以我把準(zhǔn)確率這個(gè)指標(biāo)擺在成本前面。這個(gè)回答讓面試官明顯點(diǎn)頭了。他問的第二個(gè)問題是“如果一個(gè)新模型的價(jià)格只有原來的一半但推理準(zhǔn)確率下降了5%你會(huì)怎么選”這個(gè)問題很經(jīng)典本質(zhì)是考察你的決策框架。我說我會(huì)先看這5%發(fā)生什么場(chǎng)景里。如果這5%的準(zhǔn)確率損失全發(fā)生在極端復(fù)雜的推理任務(wù)里而這類任務(wù)只占流量的5%我可能用路由分流的方式讓簡(jiǎn)單任務(wù)用新模型復(fù)雜任務(wù)繼續(xù)用舊模型這樣平均成本能降不少用戶感知幾乎沒變。他問的第三個(gè)問題是“你怎么判斷提示詞里的信息是對(duì)模型有用的”這個(gè)問題其實(shí)是在考察你對(duì)模型工作機(jī)制的理解。我的回答是我自己總結(jié)了一套簡(jiǎn)單的信息價(jià)值判斷標(biāo)準(zhǔn)一條信息能否被當(dāng)前問題直接引用如果能就保留原始形態(tài)如果不能壓縮成摘要如果既不能被直接引用又不能提供背景直接刪掉。核心思路是提示詞的每一段文字都要能讓模型的注意力更聚焦。面試結(jié)束后我復(fù)盤了一下我之所以能在“一天燒幾十個(gè)token”這種略帶挑釁的提問下穩(wěn)住不慌本質(zhì)上不是因?yàn)槲业目诓藕枚且驗(yàn)槲覍?duì)token這個(gè)話題從原理到實(shí)操都有完整的方法論。所以我能在心里快速預(yù)判他接下來會(huì)追問什么以及我該怎么把回答往自己最擅長(zhǎng)的方向上引。如果你的面試也遇到類似的提問記住這條經(jīng)驗(yàn)不要讓問題停留在“你燒了多少錢”這個(gè)表層而是主動(dòng)把它遷移到“我怎么控制成本、怎么評(píng)估效果、怎么做選型決策”這些你能深入展開的方向上。這種“主動(dòng)定義話題”的能力是我認(rèn)為的AI應(yīng)用開發(fā)面試?yán)锏淖顝?qiáng)加分項(xiàng)。7. 常見踩坑與排查經(jīng)驗(yàn)速查最后把我在多個(gè)AI應(yīng)用項(xiàng)目里遇到的問題和排查方法整理成一個(gè)速查表每一個(gè)坑都是真實(shí)踩過的希望能幫你少走一些彎路。現(xiàn)象常見原因排查與解決token消耗突然暴漲系統(tǒng)提示詞或前綴動(dòng)態(tài)拼接導(dǎo)致緩存失效檢查前綴穩(wěn)定性固定不變部分為常量并確認(rèn)緩存開關(guān)已開啟上下文一長(zhǎng)回答質(zhì)量急劇下降無關(guān)歷史信息堆積干擾模型注意力引入三級(jí)歷史策略只保留近期關(guān)鍵信息老內(nèi)容轉(zhuǎn)摘要或入庫模型輸出大量“廢話”未明確輸出格式溫度參數(shù)偏高啟用結(jié)構(gòu)化輸出約束加入少樣本示例把溫度降到0到0.3小模型與大模型效果差異極小任務(wù)本身推理難度低浪費(fèi)了溢價(jià)基于評(píng)測(cè)集重新做任務(wù)分流簡(jiǎn)單場(chǎng)景走小模型復(fù)雜場(chǎng)景走大模型同日同一前綴的請(qǐng)求費(fèi)用不平滑緩存未命中或同一用戶請(qǐng)求分散在不同并發(fā)實(shí)例上提前核對(duì)緩存觸發(fā)條件盡量讓相同請(qǐng)求收斂到同一服務(wù)實(shí)例監(jiān)控系統(tǒng)看不到token消耗明細(xì)日志沒記錄模型返回的usage字段在調(diào)用模型后補(bǔ)全usage記錄落庫做按日/按任務(wù)聚合報(bào)表這些排查經(jīng)驗(yàn)的價(jià)值在于AI應(yīng)用開發(fā)過程中90%的“玄學(xué)問題”最后都能落到token、上下文、提示詞、參數(shù)這幾個(gè)變量里。養(yǎng)成順藤摸瓜的習(xí)慣基本不會(huì)有查不出來的問題。寫在最后關(guān)于那場(chǎng)面試的最終結(jié)果——我拿到了二面邀請(qǐng)后來也順利拿到了offer。但比起offer本身那場(chǎng)對(duì)話讓我真正想明白了一件事AI應(yīng)用開發(fā)這個(gè)崗位技術(shù)固然重要但決定你能走多遠(yuǎn)的是你對(duì)成本和效果之間動(dòng)態(tài)平衡的感知力。而我那句“燒的不是token是熱情”也不全是一句抖機(jī)靈。熱情在這件事里的含義是愿意為做一個(gè)好用的AI應(yīng)用反復(fù)打磨提示詞反復(fù)跑評(píng)測(cè)反復(fù)壓成本愿意把那些別人覺得“差不多得了”的細(xì)節(jié)較真到底。這種熱情最后會(huì)一點(diǎn)一點(diǎn)變成你真正的專業(yè)優(yōu)勢(shì)。所以如果你也準(zhǔn)備走AI應(yīng)用開發(fā)這條路建議從今天開始給自己正在做的每個(gè)小項(xiàng)目都記一份token賬本算一算每天燒了多少燒在了哪里哪些地方該省哪些地方不該省。這份賬本就是你未來面試場(chǎng)上最大的底氣。