落地:從Grok Voice到Starlink的工程架構(gòu)與實踐)
客服與銷售場景是語音 AI 落地最直接也最難規(guī)?;念I(lǐng)域之一。Grok Voice 這類具備自然對話能力的語音服務(wù)進入 Starlink 客服與銷售鏈路后真正需要面對的已經(jīng)不是“能不能說話”而是并發(fā)、延遲、狀態(tài)管理、用戶意圖識別、服務(wù)轉(zhuǎn)人工、成交指標、故障回退等一套系統(tǒng)工程問題。把語音模型接到電話網(wǎng)關(guān)只是第一步后面的可觀測性、降級策略、合規(guī)校驗和銷售話術(shù)控制才決定這套系統(tǒng)能不能長期運行。本文從一個可落地的語音客服 Agent 出發(fā)拆解如何為 Starlink 這類客戶規(guī)模大、地域分散、網(wǎng)絡(luò)產(chǎn)品解釋成本高的業(yè)務(wù)設(shè)計一套語音客服與銷售系統(tǒng)。1. 語音客服與文本客服的業(yè)務(wù)差異決定了系統(tǒng)設(shè)計起點1.1 “客服”和“銷售”是兩種不同目標驅(qū)動的會話客服會話和銷售會話雖然共用同一套語音交互鏈路但目標函數(shù)完全不同??头挼哪繕耸恰敖鉀Q存量問題”用戶設(shè)備離線、網(wǎng)速不達標、賬單有疑問、需要取消服務(wù)。成功指標是問題解決率、轉(zhuǎn)人工率、通話時長和滿意度。銷售會話的目標是“創(chuàng)造增量價值”用戶咨詢更高套餐、加購 Mesh 路由器、續(xù)費、升級服務(wù)區(qū)域。成功指標是轉(zhuǎn)化率、客單價、線索完成率和成交后回訪率。把兩類會話塞進同一個提示詞模板里是最常見的錯誤??头鼍靶枰J?、精確、可回退銷售場景需要引導(dǎo)、解釋、促成。正確做法是在會話開始前就通過主叫號碼、IVR 按鍵、用戶標簽或上一通會話結(jié)果確定會話類型并把類型寫入會話上下文。Grok Voice 這類模型雖然能感知對話風(fēng)格但業(yè)務(wù)系統(tǒng)必須在模型之外控制會話方向否則 AI 可能在客服會話里過度推銷或在銷售會話里給出不準確的故障承諾。1.2 Starlink 業(yè)務(wù)場景的語音會話特征Starlink 這類衛(wèi)星互聯(lián)網(wǎng)服務(wù)客戶群分布廣、設(shè)備環(huán)境差異大、故障原因復(fù)雜。常見咨詢包括套餐怎么選、當前區(qū)域是否覆蓋、安裝是否需要屋頂走線、陰雨天為什么掉速、Starlink 應(yīng)用里看到的“視野受阻”是什么意思、賬單扣款失敗后如何處理、設(shè)備返修流程是什么。這些問題的共同點是“不能只靠聊天回答”。查詢訂單狀態(tài)需要讀 CRM 接口判斷是否覆蓋需要傳入地理位置和仰角數(shù)據(jù)解決掉線問題需要解析客戶端 telemetry銷售推薦需要結(jié)合套餐和服務(wù)區(qū)域。因此語音 Agent 不能做成通用閑聊必須把它設(shè)計成“語音交互外殼 業(yè)務(wù)工具調(diào)用層 對話生成內(nèi)核”的組合體。1.3 語音鏈路比文本鏈路多出哪些狀態(tài)文本聊天只需要處理“收到消息、生成回復(fù)、發(fā)送回復(fù)”三個事件。語音呼叫則增加了大量實時狀態(tài)用戶是否在說話需要 VAD 判斷。用戶說完話后需要“端點檢測”判斷何時結(jié)束。模型生成回復(fù)期間用戶可能直接打斷也就是 barge-in。ASR 轉(zhuǎn)寫可能出現(xiàn)同音字錯誤需要置信度判斷。TTS 合成需要時間用戶等待超過閾值會產(chǎn)生焦慮。通話可能被運營商中斷、主叫方掛斷、信號丟包導(dǎo)致音頻斷裂。這些狀態(tài)必須由代碼顯式管理。否則模型回復(fù)再自然只要靜默超時處理不當用戶就會覺得“AI 卡住了”。這也是語音客服系統(tǒng)在架構(gòu)上不能只依賴 LLM 的原因。維度文本客服語音客服輸入粒度文本消息連續(xù)音頻流時長壓力低高秒級等待都影響體驗錯誤來源用戶打字表達不準用戶口音、環(huán)境噪聲、ASR 誤識別打斷能力無需考慮必須支持 barge-in轉(zhuǎn)人工成本點擊按鈕或輸入轉(zhuǎn)人工需要語音指令識別或坐席搶接數(shù)據(jù)完整性文本可留痕需要錄音轉(zhuǎn)寫事件三份數(shù)據(jù)2. 語音鏈路架構(gòu)不能先接模型再補工程2.1 一條通話從接入到響應(yīng)的完整路徑一條語音通話要經(jīng)過電話網(wǎng)關(guān)、媒體服務(wù)、ASR、事件總線、會話服務(wù)、LLM、TTS 等多個組件。常見鏈路如下用戶撥打客服熱線運營商通過 SIP 中繼接入。媒體服務(wù)器把 RTP 音頻流轉(zhuǎn)成可處理的 PCM/Opus 流。語音活動檢測器識別用戶開始說話把音頻片段送入 ASR。ASR 輸出轉(zhuǎn)寫文本和置信度投遞到 Redis Stream 或 Kafka。Voice Agent 消費轉(zhuǎn)寫結(jié)果更新會話狀態(tài)機。Agent 根據(jù)意圖調(diào)用 CRM、訂單、工單等業(yè)務(wù)接口。Agent 把業(yè)務(wù)結(jié)果和對話歷史交給 Grok Voice 類模型生成回復(fù)?;貜?fù)文本進入 TTS合成音頻后通過媒體服務(wù)器播放給用戶。通話結(jié)束后錄音、轉(zhuǎn)寫、狀態(tài)事件統(tǒng)一歸檔。這條路看起來長但每一層都有必要。實際項目中不建議把媒體服務(wù)器直接接到模型推理服務(wù)上因為音頻流是連續(xù)且高吞吐的而 LLM 推理是突發(fā)且延遲敏感的中間需要有隊列和狀態(tài)層做緩沖。2.2 ASR、意圖識別與回復(fù)生成分層處理很多團隊想用一個大模型同時完成 ASR、意圖識別、回復(fù)生成甚至語音合成。短期內(nèi)能演示但生產(chǎn)環(huán)境中問題很多。一點口音變化會導(dǎo)致 ASR 完全錯亂業(yè)務(wù)意圖頻繁變化時調(diào)整一次大模型提示詞的成本遠高于調(diào)整一個輕量分類器TTS 失敗時也沒有辦法快速降級。推薦分層ASR 單獨使用語音識別服務(wù)或本地模型輸出文本、時間戳、置信度。意圖識別使用規(guī)則 少樣本分類至少對“故障報修、訂單查詢、賬單查詢、銷售咨詢、轉(zhuǎn)人工、取消服務(wù)”這些意圖保證高準確率?;貜?fù)生成使用 Grok Voice 類 LLM上下文包含用戶畫像、業(yè)務(wù)接口結(jié)果、話術(shù)約束。TTS 單獨配置音色、語速和打斷策略。分層之后每一層都能單獨驗證、單獨擴容、單獨降級。例如 ASR 置信度低于 0.6 時不進入 LLM而是直接播放“沒有聽清請再說一遍”。2.3 為什么不能讓模型直接驅(qū)動整條鏈路LLM 擅長語言生成但不擅長處理狀態(tài)和硬約束。它不知道用戶已經(jīng)等了 8 秒不知道用戶剛才因為聽不清已經(jīng)重復(fù)了兩遍不知道當前訂單號已經(jīng)查過三次也不知道銷售話術(shù)里哪些承諾是被合規(guī)禁止的。因此在語音客服鏈路里模型的定位是“回復(fù)生成器”而不是“會話控制器”。會話控制器由狀態(tài)機、超時策略、業(yè)務(wù)接口調(diào)用和人工接管邏輯組成。這就像在 Ku 波段衛(wèi)星通信波形中導(dǎo)頻和其他可預(yù)測元素被用來做同步和信道估計語音客服鏈路同樣需要可預(yù)測的控制元素會話 ID、狀態(tài)碼、超時閾值、重試次數(shù)、轉(zhuǎn)人工標志。如果沒有這些“導(dǎo)頻”模型再聰明系統(tǒng)也會在異常場景里漂移。3. 用一個最小會話服務(wù)跑通 Grok Voice 類語音 Agent3.1 搭建 VoiceAgent 服務(wù)骨架下面用一個 FastAPI WebSocket 示例說明會話服務(wù)的核心結(jié)構(gòu)。這個骨架不直接處理音頻編解碼而是假設(shè)上游媒體服務(wù)已經(jīng)把語音轉(zhuǎn)成結(jié)構(gòu)化事件推送過來。這樣做更貼近真實工程媒體層、ASR、會話層分離。# voice_agent_server.py from fastapi import FastAPI, WebSocket, WebSocketDisconnect from enum import Enum import asyncio import uuid app FastAPI() class SessionState(str, Enum): IDLE idle LISTENING listening THINKING thinking SPEAKING speaking ENDED ended class VoiceSession: def __init__(self, session_id: str, session_type: str support): self.session_id session_id self.session_type session_type self.state SessionState.LISTENING self.transcript [] self.intent None self.business_data {} self.fallback_count 0 def transition(self, new_state: SessionState) - bool: allowed { SessionState.LISTENING: {SessionState.THINKING, SessionState.ENDED}, SessionState.THINKING: {SessionState.SPEAKING, SessionState.ENDED}, SessionState.SPEAKING: {SessionState.LISTENING, SessionState.ENDED}, } if new_state in allowed[self.state]: self.state new_state return True return False sessions: dict[str, VoiceSession] {} app.websocket(/v1/session/{session_id}) async def voice_session_endpoint(ws: WebSocket, session_id: str): await ws.accept() session VoiceSession(session_idsession_id) sessions[session_id] session try: while True: event await ws.receive_json() if event[type] asr_text: if session.state SessionState.LISTENING: session.transcript.append(event[text]) session.intent await detect_intent(event[text]) session.transition(SessionState.THINKING) reply await generate_reply(session, event[text]) session.transition(SessionState.SPEAKING) await ws.send_json({type: tts, text: reply}) elif event[type] user_barge_in: # 用戶打斷Agent 停止播放并重新進入監(jiān)聽 session.transition(SessionState.LISTENING) elif event[type] call_end: session.transition(SessionState.ENDED) break except WebSocketDisconnect: session.transition(SessionState.ENDED) finally: await persist_session(session) sessions.pop(session_id, None) async def detect_intent(text: str) - str: # 生產(chǎn)環(huán)境用規(guī)則 分類模型不要只靠 LLM if 轉(zhuǎn)人工 in text or 人工 in text: return human_handoff if 訂單 in text or 物流 in text: return order_status if 升級 in text or 套餐 in text or 購買 in text: return sales_inquiry return support_other async def generate_reply(session: VoiceSession, text: str) - str: # 這里可以調(diào)用 Grok Voice 或同類對話模型也可以先返回靜態(tài)話術(shù) if session.intent human_handoff: return 好的我將為您轉(zhuǎn)接人工坐席請稍候。 if session.intent order_status: return 請?zhí)峁┠挠唵翁栁規(guī)湍樵冇唵芜M度。 return 請問您遇到的具體問題是什么是網(wǎng)絡(luò)掉線、速度慢還是設(shè)備故障 async def persist_session(session: VoiceSession) - None: # 生產(chǎn)環(huán)境寫入 PostgreSQL 或 ClickHouse print(fpersist {session.session_id}: {session.transcript})運行服務(wù)pip install fastapi uvicorn uvicorn voice_agent_server:app --host 0.0.0.0 --port 8000這段代碼說明了一個關(guān)鍵點會話狀態(tài)和業(yè)務(wù)決策不應(yīng)該被 LLM 的提示詞替代。意圖識別、轉(zhuǎn)人工和查單觸發(fā)都顯式寫在代碼里模型只負責(zé)生成話術(shù)。這樣即使模型服務(wù)超時也能快速返回兜底話術(shù)。3.2 會話狀態(tài)機的合法遷移關(guān)系狀態(tài)機的價值是讓每一步都有明確語義。上例中允許的遷移如下當前狀態(tài)允許遷移到遷移原因LISTENINGTHINKINGASR 文本到達進入意圖識別和回復(fù)生成LISTENINGENDED用戶掛斷THINKINGSPEAKING回復(fù)生成完成進入 TTSTHINKINGENDED通話中斷或超時SPEAKINGLISTENING用戶打斷重新開始監(jiān)聽SPEAKINGENDED播放完成并繼續(xù)下一輪或用戶掛斷注意實際項目中不要允許從 THINKING 直接回到 SPEAKING 再回到 THINKING 這種無限制循環(huán)。每一輪都要有最大重試次數(shù)。比如 ASR 置信度不足最多重復(fù)追問兩次第三次轉(zhuǎn)人工。否則用戶會陷入“聽不清-重說-再聽不清”的死循環(huán)。3.3 對接 CRM 和訂單/工單系統(tǒng)的邊界語音 Agent 需要查詢 Starlink 訂單狀態(tài)、賬戶余額、服務(wù)區(qū)覆蓋、工單進度時應(yīng)該通過后端封裝好的業(yè)務(wù)接口獲取不能直接讓 LLM 生成 SQL 或調(diào)用內(nèi)部服務(wù)。推薦的交互方式是“工具調(diào)用”。會話服務(wù)識別到意圖后構(gòu)造一個結(jié)構(gòu)化工具調(diào)用請求{ type: tool_call, name: query_order_status, arguments: { order_id: ST-20250101-0001 }, auth_context: { account_id: acct_88421, csr_id: voice-agent-prod } }然后把工具返回結(jié)果放進提示詞上下文再由 Grok Voice 類模型生成最終話術(shù)。這樣做有三個好處業(yè)務(wù)權(quán)限集中在服務(wù)層控制語音 Agent 拿不到數(shù)據(jù)庫憑據(jù)。工具返回的結(jié)構(gòu)化字段可以直接做合規(guī)校驗比如“預(yù)計送達時間不能隨便承諾”。每次工具調(diào)用都能記錄日志方便后續(xù)分析模型是否錯誤使用業(yè)務(wù)結(jié)果。4. 從單路并發(fā)到規(guī)模化服務(wù)的擴容路徑4.1 用業(yè)務(wù)指標估算并發(fā)容量語音客服和銷售系統(tǒng)必須按“忙時并發(fā)”設(shè)計而不是按“日通話量”設(shè)計。假設(shè)某地區(qū)忙時有 800 通呼叫請求平均每通通話 240 秒然后計算同時占用的 Agent 會話數(shù)。可以用一個粗略公式估算CPS 峰值呼叫量 / 3600每秒呼叫數(shù)。Erlang CPS * 平均處理時長表示同時占用的會話資源。如果忙時 800 通分布不均勻最集中 5 分鐘內(nèi)有 200 通則CPS 200 / 300 0.67Erlang 0.67 * 240 ≈ 160。也就是說至少需要能支撐 160 個并發(fā)語音會話的容量。再加上排隊、重試、轉(zhuǎn)人工等待建議預(yù)留 1.3 到 1.5 倍也就是 210 到 240 路并發(fā)。這個估算決定了后面所有擴容指標Kubernetes Pod 數(shù)量、WebSocket 連接數(shù)、模型推理并發(fā)度、TTS 并發(fā)度、數(shù)據(jù)庫連接池大小。如果模型推理只能支持 20 并發(fā)而媒體服務(wù)能接入 200 路語音隊列就會積壓用戶會聽不到回復(fù)。4.2 語音網(wǎng)關(guān)與模型推理服務(wù)之間用隊列削峰模型推理服務(wù)往往是整個鏈路里最慢、最不穩(wěn)的環(huán)節(jié)。語音媒體流是實時的但業(yè)務(wù)回復(fù)不一定需要“逐字實時”。這里要區(qū)分兩個概念音頻流必須實時傳輸否則用戶聽到斷續(xù)。語義回復(fù)可以有一次 200 到 800 毫秒的生成等待但不能超過 3 秒。所以媒體服務(wù)器和 ASR 之間要保持低延遲而 ASR 文本和 LLM 之間可以加入隊列。當模型負載高時隊列能把請求先緩沖起來避免丟棄呼叫。但隊列也不能無限長必須設(shè)置最大等待時間。超過閾值后直接播放“當前話務(wù)繁忙請稍后再試”或轉(zhuǎn)人工。# 使用 Redis Stream 做事件緩沖 redis-cli XADD voice:events * event_typeasr_text session_idabc123 text我的訂單什么時候到消費端從 Stream 里讀取事件執(zhí)行業(yè)務(wù)接口和模型調(diào)用。這樣媒體服務(wù)不需要關(guān)心模型是否繁忙它只負責(zé)把音頻和事件交給下游。4.3 Kubernetes 自動擴縮容配置在線會話是典型的 Pod 級指標。建議用active_voice_sessions這個業(yè)務(wù)指標擴縮容而不是只依賴 CPU。因為一個會話可能大部分時間在等待 TTS 或業(yè)務(wù)接口CPU 不高但會話資源已占滿。apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: voice-agent-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: voice-agent minReplicas: 3 maxReplicas: 50 metrics: - type: Pods pods: metric: name: active_voice_sessions target: type: AverageValue averageValue: 20這個配置的含義是當每個 Pod 平均活躍語音會話數(shù)超過 20 時HPA 自動擴容最多擴到 50 個副本。如果并發(fā)上量很快還需要結(jié)合 KEDA 或自定義調(diào)度器避免冷啟動時間過長。生產(chǎn)環(huán)境建議預(yù)置一部分熱 Pod防止突發(fā)撥入時被擴容延遲拖垮。4.4 學(xué)習(xí)環(huán)境、測試環(huán)境與生產(chǎn)環(huán)境的差異本地跑通上面的 FastAPI 骨架只算學(xué)習(xí)環(huán)境。測試環(huán)境要額外引入模擬電話網(wǎng)關(guān)、模擬 ASR、模擬訂單接口構(gòu)造腳本驗證狀態(tài)機。生產(chǎn)環(huán)境還要補齊以下能力配置外置模型服務(wù)地址、業(yè)務(wù)接口地址、閾值不要硬編碼。權(quán)限隔離語音 Agent 服務(wù)只能調(diào)用白名單 API不能訪問數(shù)據(jù)庫。日志監(jiān)控錄音、轉(zhuǎn)寫、狀態(tài)事件、模型響應(yīng)時間要全鏈路關(guān)聯(lián)?;貪L方案模型服務(wù)版本和話術(shù)模板要支持快速回滾。壓力測試用真實長度音頻回放驗證并發(fā)下是否出現(xiàn)靜默或掉線。5. 可觀測性、質(zhì)量評估與人工接管5.1 每個會話至少沉淀三份數(shù)據(jù)語音客服系統(tǒng)的排障不能靠“復(fù)現(xiàn)”必須靠“回放”。每個會話建議保存三類數(shù)據(jù)錄音文件對象存儲保存路徑關(guān)聯(lián)會話 ID。轉(zhuǎn)寫文本和 ASR 置信度結(jié)構(gòu)化存儲。狀態(tài)轉(zhuǎn)移事件包括每輪狀態(tài)、耗時、模型響應(yīng)、工具調(diào)用結(jié)果??梢栽O(shè)計一張會話事件表字段示例說明session_id20250101-abc123全局會話 IDevent_time2025-01-01 10:00:03.122事件發(fā)生時間event_typeasr_text事件類型state_fromlistening上一個狀態(tài)state_tothinking新狀態(tài)text我的訂單什么時候到轉(zhuǎn)寫或模型文本duration_ms345本階段耗時model_namegrok-voice-v1模型版本confidence0.92ASR 置信度有了這三份數(shù)據(jù)才能回答“用戶為什么沒有轉(zhuǎn)人工”“模型為什么推薦了錯誤套餐”“系統(tǒng)為什么卡了 8 秒”。5.2 語音客服核心指標建議至少監(jiān)控四個層級接通層、交互層、模型層、業(yè)務(wù)層。指標作用參考觀察重點接通率呼叫是否進入 Agent降低時看網(wǎng)關(guān)和資源平均靜默時長用戶等待回復(fù)時間超過 2 秒需關(guān)注模型/TTS 延遲ASR 置信度轉(zhuǎn)寫是否可靠低于 0.6 時追問或轉(zhuǎn)人工轉(zhuǎn)人工率服務(wù)能力邊界過高說明自動化解題率不足會話解決率是否解決用戶問題需要工單系統(tǒng)回傳結(jié)果銷售轉(zhuǎn)化率銷售會話是否成交需與訂單/CRM 對賬打斷率用戶是否頻繁打斷過高說明回復(fù)過長或不符合預(yù)期這些指標不是只在后臺看而是必須落到會話級標簽上。例如“這個會話轉(zhuǎn)人工原因是 ASR 連續(xù)兩輪低置信度”便于復(fù)盤。5.3 模型異常時的降級與人工接管即使 Grok Voice 類模型質(zhì)量很高也不能假設(shè)它永遠可用。超時、限流、內(nèi)容安全攔截、上下文超長都可能導(dǎo)致回復(fù)失敗。降級順序要提前設(shè)計模型超時 2 秒重試一次。重試仍失敗返回靜態(tài)話術(shù)“請稍等我正在查詢”。靜態(tài)話術(shù)播放后 5 秒仍無法恢復(fù)播放“我將為您轉(zhuǎn)接人工坐席”。同時把會話標記為degradedtrue觸發(fā)人工坐席搶接。DEGRADED_RESPONSE 請稍等我正在為您查詢。 async def generate_reply_with_fallback(session: VoiceSession, text: str): try: reply await asyncio.wait_for( call_llm(session, text), timeout2.0 ) return reply except asyncio.TimeoutError: session.fallback_count 1 if session.fallback_count 2: session.transition(SessionState.ENDED) await transfer_to_human(session.session_id) return 我將為您轉(zhuǎn)接人工坐席請稍候。 return DEGRADED_RESPONSE生產(chǎn)環(huán)境里轉(zhuǎn)人工不是簡單發(fā)一個事件。要確保人工坐席能同時看到轉(zhuǎn)寫文本、客戶資料、當前業(yè)務(wù)上下文否則用戶還要把問題再重復(fù)一遍體驗很差。6. 合規(guī)、風(fēng)險與常見排錯6.1 通話錄音、語音數(shù)據(jù)和隱私合規(guī)語音客服系統(tǒng)天然采集用戶聲音這類數(shù)據(jù)屬于敏感個人信息。上線前必須確認是否在通話開始時明確提示用戶“本次通話可能被錄音”。錄音和轉(zhuǎn)寫文本是否存儲在合規(guī)區(qū)域。語音數(shù)據(jù)的保存周期是否受限。用戶要求刪除數(shù)據(jù)時是否能從錄音、轉(zhuǎn)寫、日志中同步刪除。銷售場景是否需要對成交客戶做二次確認。這些不是技術(shù)博客能替代法務(wù)意見的內(nèi)容但工程上必須在第一天設(shè)計刪除接口和存證標記而不是等到監(jiān)管要求時再補。6.2 銷售話術(shù)里的“可預(yù)測元素”不能交給模型自由發(fā)揮Starlink 這類衛(wèi)星互聯(lián)網(wǎng)服務(wù)銷售話術(shù)特別容易踩雷。AI 不能承諾“任何地方都能安裝”“速度一定達到某數(shù)值”“雨天完全不受影響”。這類承諾涉及覆蓋范圍、天氣衰減和安裝條件必須由業(yè)務(wù)配置控制。可以建立話術(shù)模板列表模型只能基于模板生成變體不能自由編造。同時在回復(fù)給用戶之前用規(guī)則引擎檢查是否包含禁用詞或承諾詞。這就像 Ku 波段波形里的導(dǎo)頻和其他可預(yù)測元素通信系統(tǒng)依靠可預(yù)測信號做同步語音銷售系統(tǒng)也需要用可預(yù)測的模板、關(guān)鍵詞、閾值來約束生成結(jié)果。沒有這些約束模型會越說越具體最后造成客訴和合規(guī)風(fēng)險。6.3 常見故障現(xiàn)象與排查順序故障現(xiàn)象可能原因檢查方式處理建議用戶說話但 Agent 無響應(yīng)VAD 沒有識別到語音或 ASR 未輸出文本檢查媒體服務(wù)器音頻流和 ASR 日志先確認是否有 RTP 包再查 ASR 超時配置用戶聽到回復(fù)但明顯延遲LLM/TTS 耗時過高或排隊過長查看事件表中 thinking 和 speaking 耗時壓縮上下文、提升推理并發(fā)、優(yōu)化 TTS 緩存ASR 轉(zhuǎn)寫文字完全錯誤口音、噪聲、語速問題看 ASR 置信度分數(shù)和音頻樣本增加領(lǐng)域熱詞、訓(xùn)練語言模型、低置信度時追問轉(zhuǎn)人工后坐席看不到上下文轉(zhuǎn)人工事件沒有把會話對象傳過去查看轉(zhuǎn)人工事件負載打通 CRM 工單 ID 和會話 ID多輪會話突然回到初始狀態(tài)狀態(tài)機沒有持久化Pod 重啟后會話丟失檢查 session 存儲和 WebSocket 重連邏輯使用 Redis 保存會話快照銷售轉(zhuǎn)化數(shù)據(jù)對不上CRM 記錄和語音會話未關(guān)聯(lián)檢查訂單接口參數(shù)統(tǒng)一 account_id 和 session_id 關(guān)聯(lián)規(guī)則排查順序建議先看會話事件表再看模型調(diào)用日志最后看音頻文件。不要一開始就懷疑 Grok Voice 能力很多“模型答非所問”實際上是 ASR 轉(zhuǎn)寫錯、業(yè)務(wù)接口返回錯、上下文傳錯導(dǎo)致的。7. 上線前檢查清單與后續(xù)擴展方向7.1 可復(fù)用的上線前置檢查清單確認語音呼叫、ASR、Agent、TTS、CRM 五個環(huán)節(jié)之間都有唯一會話 ID。確認每個會話狀態(tài)只能通過合法狀態(tài)機遷移。確認 ASR 低置信度、模型超時、TTS 失敗都有降級動作。確認銷售話術(shù)經(jīng)過規(guī)則引擎檢查禁止出現(xiàn)絕對化承諾。確認轉(zhuǎn)人工時坐席能拿到錄音、轉(zhuǎn)寫、客戶資料和業(yè)務(wù)上下文。確認錄音刪除接口和數(shù)據(jù)保留策略已實現(xiàn)。確認壓測場景包含高峰并發(fā)、模型超時、ASR 亂碼、轉(zhuǎn)人工失敗四類異常。確認模型版本和話術(shù)模板支持一鍵回滾。7.2 下一步擴展方向規(guī)?;南乱浑A段可以考慮主動外呼、預(yù)測式外呼和情緒識別。主動外呼用于訂單確認、續(xù)費提醒、故障回訪。外呼比呼入更容易被投訴必須有嚴格時間窗口和退訂機制。預(yù)測式外呼算法預(yù)測坐席空閑時間后自動撥號提高坐席利用率。但這套策略對語音 Agent 同樣適用需要統(tǒng)計每個 Agent 的平均處理時長和轉(zhuǎn)人工概率。情緒識別通過語速、音量、ASR 文本判斷用戶情緒在用戶憤怒時快速轉(zhuǎn)人工。情緒識別只能作為輔助信號不能單獨決定話術(shù)。多語種也是 Starlink 這類全球化業(yè)務(wù)必須考慮的方向。不同語言的話術(shù)模板、ASR 模型、TTS 音色都要做獨立配置和測試。7.3 一次規(guī)模化后的關(guān)鍵判斷Grok Voice 這類模型能提供更自然的回復(fù)生成但規(guī)?;头c銷售系統(tǒng)的成敗更多取決于工程控制面狀態(tài)機是否正確、超時策略是否兜底、業(yè)務(wù)接口是否穩(wěn)定、轉(zhuǎn)人工是否順暢、數(shù)據(jù)是否能回放。語音模型是這套系統(tǒng)的“表達層”不是“決策層”。對新團隊而言下一步最有價值的事不是繼續(xù)調(diào)模型提示詞而是把真實通話樣本、狀態(tài)轉(zhuǎn)移日志和人工坐席操作記錄沉淀下來形成可評估、可回放、可迭代的數(shù)據(jù)閉環(huán)。