回復(fù)的“首條延遲”該壓到多少?一次速度與擬人化的取舍)
做客服自動(dòng)回復(fù)系統(tǒng)團(tuán)隊(duì)最初的指標(biāo)很樸素把首條回復(fù)延遲壓短。鏈路拆完、逐段優(yōu)化之后我們確實(shí)做到了全鏈路一秒內(nèi)出話。但上線后的對(duì)話數(shù)據(jù)給出了相反的結(jié)論回得太快的對(duì)話反而更早終結(jié)。這篇是一次速度與擬人化取舍的工程復(fù)盤(pán)。一、全鏈路拆解壓進(jìn)一秒在技術(shù)上完全可行一套典型的自動(dòng)回復(fù)鏈路由四段組成每段都有明確的優(yōu)化空間消息捕獲輪詢(xún)聊天窗口變化拿到有新消息事件。500ms 的輪詢(xún)間隔意味著平均約 250ms 的等待換成事件驅(qū)動(dòng)監(jiān)聽(tīng)后可壓到 50ms 以?xún)?nèi)。內(nèi)容讀取只有截圖可用時(shí)走 OCR一張聊天截圖約 300-500ms能直接讀控件文本則只需幾毫秒這一步的選型差距比換模型還大。LLM 生成帶上下文的短回復(fù)首 token 通常在 300-800ms換更小的模型、砍 prompt 長(zhǎng)度、改流式輸出都還有余量。窗口回填模擬鍵盤(pán)輸入按 20ms/字符計(jì)一條 50 字的回復(fù)要 1 秒改成剪貼板粘貼加回車(chē)可壓到 100ms 以?xún)?nèi)。逐段做完整條鏈路一秒內(nèi)出話在工程上完全可行。這套優(yōu)化花了兩周最后卻發(fā)現(xiàn)真正的問(wèn)題不在鏈路里。二、實(shí)測(cè)數(shù)據(jù)秒回是機(jī)器特征不是服務(wù)質(zhì)量有位買(mǎi)家 23:47 發(fā)來(lái)一句這個(gè)多少錢(qián)能便宜點(diǎn)嗎。一秒后他收到一條帶完整報(bào)價(jià)、階梯價(jià)與售后說(shuō)明的回復(fù)。他的下一句是機(jī)器人吧這條對(duì)話沒(méi)有再繼續(xù)。復(fù)盤(pán)時(shí)我們回放了一批同類(lèi) case模式相當(dāng)一致響應(yīng)在一兩秒內(nèi)、且首條就是完整答案的對(duì)話買(mǎi)家發(fā)出第二句的比例明顯偏低。原因不難理解——真人客服不可能秒回。收到消息、看清問(wèn)題、想出答案、打字發(fā)出這件事存在生理下限秒回等于把我不是人寫(xiě)在對(duì)話里。更麻煩的是完整答案本身也在幫倒忙價(jià)格、階梯、售后一次給全買(mǎi)家問(wèn)一句得到一頁(yè)內(nèi)容接話的鉤子全被堵死了對(duì)話自然就在收到報(bào)價(jià)這一步結(jié)束。后來(lái)我們做了對(duì)照兩個(gè)版本各跑數(shù)千條真實(shí)詢(xún)盤(pán)A 版秒回加完整答案B 版先延遲 8-15 秒、先回一句在的稍等隔幾秒再發(fā)正式答案統(tǒng)計(jì)口徑就一條——買(mǎi)家是否發(fā)出第二句話。結(jié)果 B 版的對(duì)話繼續(xù)率明顯更高差距大到不需要顯著性檢驗(yàn)來(lái)說(shuō)服任何人。買(mǎi)家在等待里完成了一次心理確認(rèn)對(duì)面有人在。而在的稍等恰好還原了真人客服接到消息后的第一反應(yīng)。三、提速的正道砍工程段而不是壓模型這里有一個(gè)常見(jiàn)誤區(qū)值得糾正想讓響應(yīng)更快性?xún)r(jià)比高的方向往往不是壓 LLM 推理延遲——每次調(diào)用省一兩百毫秒已經(jīng)非常吃力——而是砍鏈路里的工程段。模型換代的收益是線性的幾十毫秒工程段砍掉的是數(shù)量級(jí)的等待。同理OCR 換文本讀取省幾百毫秒剪貼板替換逐字輸入省一秒這些不起眼的工程段加起來(lái)往往比換任何模型都值錢(qián)。以我們自身為例。早期版本里核心邏輯是一個(gè) 35000 行的單包結(jié)構(gòu)任何一處改動(dòng)都要全量重編譯一次 164 秒。調(diào)延遲參數(shù)時(shí)改一行等三分鐘沒(méi)人有耐心多試幾組所謂調(diào)優(yōu)實(shí)際上是在猜。后來(lái)把純邏輯核從工程中拆出單獨(dú)增量編譯同樣改一行只要 3.4 秒——164 除以 3.448 倍的差距。改完到驗(yàn)證的循環(huán)從泡杯咖啡變成一眨眼調(diào)參才真正變成調(diào)參。這件事的意義不在編譯本身開(kāi)發(fā)迭代速度決定了響應(yīng)速度優(yōu)化的上限。改一次配置要等三分鐘你只會(huì)試一次三秒就能見(jiàn)效你才會(huì)把延遲從 500ms、300ms、150ms 一路試下去找到對(duì)話繼續(xù)率的拐點(diǎn)。很多團(tuán)隊(duì)的延遲優(yōu)化做不動(dòng)瓶頸不在模型而在缺少一條能快速驗(yàn)證的反饋回路。四、最終取舍延遲不是一個(gè)數(shù)而是一張分層表回到標(biāo)題的問(wèn)題首條延遲該壓到多少我們的答案是故意不壓。首條回復(fù)擬人優(yōu)先保留 8-15 秒的自然延遲并拆成在的稍等加正式回答兩段后續(xù)消息則盡快回因?yàn)閷?duì)話進(jìn)行中真人客服也是越聊越快的。策略固化為分層配置latency_policy: # 首條回復(fù)擬人優(yōu)先保留打字與思考時(shí)間 first_reply: delay_s: [8, 15] # 隨機(jī)區(qū)間避免固定值 ack_message: 在的稍等 answer_delay_s: [4, 10] # 正式答案再隔一段 follow_up: delay_s: [2, 6] # 對(duì)話進(jìn)行中快但留間隔 long_question_extra_s: [1, 3] # 長(zhǎng)問(wèn)題加讀題時(shí)間 long_answer: simulate_typing: true # 長(zhǎng)回復(fù)按字符數(shù)模擬輸入耗時(shí) cps: 8 # 每秒約 8 字接近真人手速對(duì)應(yīng)到什么該快、什么該慢我們內(nèi)部用一張表對(duì)齊認(rèn)知環(huán)節(jié)快 / 慢目標(biāo)區(qū)間理由捕獲、讀取、生成、回填快一秒內(nèi)純機(jī)器耗時(shí)藏在延遲區(qū)間里首條回復(fù)慢8-15 秒真人不可能秒回?cái)M人優(yōu)先對(duì)話中的追問(wèn)快2-6 秒真人越聊越快跟上節(jié)奏長(zhǎng)答案發(fā)出中按字?jǐn)?shù)模擬打字長(zhǎng)文本瞬間貼出明顯違和這套分層的背后只有一條原則回復(fù)節(jié)奏對(duì)齊真人客服的工作節(jié)奏而不是對(duì)齊機(jī)器的性能上限。機(jī)器該快的部分全部壓短作為內(nèi)部耗時(shí)藏起來(lái)機(jī)器不該快的部分——人對(duì)人的反應(yīng)時(shí)間——明確保留出來(lái)。上線后這套分層沒(méi)有再動(dòng)過(guò)技術(shù)指標(biāo)上它變慢了業(yè)務(wù)指標(biāo)上它活了下來(lái)。另外兩點(diǎn)經(jīng)驗(yàn)值得記下。其一延遲區(qū)間必須是隨機(jī)的固定 10 秒和固定 1 秒一樣是機(jī)器特征真人的響應(yīng)時(shí)間天然帶著抖動(dòng)。其二深夜時(shí)段可以適當(dāng)放寬區(qū)間凌晨咨詢(xún)的買(mǎi)家對(duì)人還在不在更敏感一段符合作息的等待反而更像真人在崗。如果只記住一件事那就是秒回不是能力是特征。參考文章延遲分層里用到的報(bào)價(jià)組織與詢(xún)盤(pán)應(yīng)答節(jié)奏兩篇文章有更細(xì)的展開(kāi)微信 AI 客服價(jià)格與報(bào)價(jià)拆解 講報(bào)價(jià)內(nèi)容如何組織售前咨詢(xún)自動(dòng)化詢(xún)價(jià)砍價(jià)場(chǎng)景的應(yīng)答策略 講詢(xún)價(jià)砍價(jià)的應(yīng)答節(jié)奏與本文的延遲分層放在同一套策略里看會(huì)更完整。