目錄(27 節)

即時粵語語音 Agent 架構指南:近即時對話點樣設計

真串流定近即時?短句切分、預取、快取三招令任務式 API 有即時聽感。

— 港嘢內容團隊約 11 分鐘粵語TTS語音Agent即時對話架構設計
分享:

一句答你: 用任務式生成 API 一樣做到「近即時」嘅粵語語音 Agent——關鍵唔係等接口變快,係你嘅架構要識做:短句切分、邊播邊預取、管好在途任務上限、常見句快取,加埋一個語音失靈時嘅文字降級。

Key Takeaways

  • 「真串流」(邊生成邊播)同「近即時」(聽感順暢)係兩回事;任務式 API 做到後者
  • 短句先係即時感嘅來源:一句 20–60 字符,聽感節奏同生成壓力都最健康
  • 預取係核心技巧:播第 N 句嗰陣已經提交咗第 N+1 句
  • 在途任務上限按方案分級(免費 3/入門 5/專業 10/工作室 20),過期請求要識取消
  • 同步捷徑適合 ≤300 字符短句,但資源未預熱時會回 503(fail closed),架構要有任務式後備
  • 撞 429/503 唔好死磕:讀 Retry-After、指數退避、降級出文字

先分清楚:你要嘅係「真串流」定「近即時」?

講「即時語音 Agent」,好多人腦入面其實係兩種唔同嘢:

真串流:音頻未生成完就開始播,邊生成邊播,追求字級延遲。 近即時:每句完整生成先播,但句子夠短、流程夠順,用家感覺係「即答」。

對絕大多數客服、語音助手、導覽場景,近即時已經完全夠用——人類對話本身都有 200 至 400 毫秒嘅自然停頓。港嘢 API 係任務式(提交、輪詢、下載),另有 ≤300 字符嘅同步捷徑;呢篇文章講嘅係:喺呢個現實之上,點設計出聽感順暢嘅即時體驗。以下規格以 2026-10 公開文件為準。

一個語音 Agent 嘅基本回合

無論背後幾複雜,一個回合都係三步:

用家講嘢 → 語音辨識 → 理解/回覆生成 → 語音合成 → 播放

語音合成係最後一里路,亦係成條鏈入面最可以「偷時間」嘅一環——因為佢可以同前面嘅工序並行,亦可以拆到好碎。

回合制嘅優勢

你唔使追求字級串流:只要「用家講完至聽到回應」嘅總體感喺一兩秒內,體驗已經及格。時間預算應該點拆?建議你自己逐段量測(辨識幾多、理解幾多、合成幾多、下載幾多),唔好用任何宣傳數字——你自己場景嘅句長、並發同時段先係決定因素。

五個設計要點

要點一:短句切分

即時感嘅第一來源係句子短。20 至 60 字符一句(即日常講嘢一句嘅長度),有三個好處:

  1. 單句生成快(輸入短)
  2. 用家好快聽到第一個字
  3. 出事重做成本細

將回覆生成模組輸出嘅長答案,按標點切成句子流,逐句交語音合成。切法有兩派:句號切(句子完整,但可能仍太長)同逗號切(夠短,但碎片多)。實務建議:先句號切,超過 100 字符嘅「長句」內部再按逗號細拆——兩層切,句子完整度同長度都照顧到。切完最好喺你嘅系統度記返句序,拼接嗰陣按序回復。

要點二:邊播邊預取

播第 N 句嘅時間,就係生成第 N+1 句嘅時間。流水線咁行:

第 1 句:提交 → 輪詢 → 下載 → 開始播
第 2 句:            提交 → 輪詢 → 下載 → 開始播
第 3 句:                      提交 → ……

理想狀態係第 N+1 句喺第 N 句播完之前已經喺手。句越短,越容易追到。一條 30 字符嘅句子,播大約 7 至 8 秒——呢 7 至 8 秒,就係下一句嘅生成窗口,通常相當充裕。

要點三:管好在途任務上限

每個方案有並行在途上限:免費 3、入門 5、專業 10、工作室 20。超額提交會回 429(in_flight_limit_reached,回應會話你知上限同現時在途數)。即時場景特別容易撞,因為句子提交得多:

  • 自己計數:提交咗未完成嘅任務,唔好超上限
  • 過期任務要取消:用家已經行咗嘅回合,佢嗰句合成已經冇意義,用取消接口釋放名額
  • 收到 in_flight_limit_reached,唔好即刻重交——等一個任務完成,或者取消最舊嗰個

要點四:限流同輪詢節奏

提交接口有每分鐘限流(預設 60 次,開金鑰時可以調),滑動 60 秒窗口、只計成功請求;回應會帶 X-RateLimit 系列 header,撞限流會有 Retry-After。好消息係:輪詢同下載唔計限流——你可以放心 poll。節奏建議 2 至 5 秒退避,快完成嗰陣密啲。錯誤碼逐個點解讀,我哋有專文(粵語 TTS API 錯誤碼大全)。

要點五:快取重複句

每個 agent 都有一批講極都係嗰句嘢:歡迎語、「唔好意思,我聽唔清楚」、常見答覆。呢啲句生成一次、音頻存底,回合開波即刻播,連生成時間都慳埋。

快取設計三個細節:

  • key 點定:用「slug+情緒+文字內容」做快取鍵,任何一樣唔同都係新條目
  • 存邊度:近播放端存(網頁記憶體、應用本地),唔好每次回中心攞——否則慳咗生成時間,蝕咗傳輸時間
  • 幾時失效:台詞版本升級、換聲線 slug、情緒調整——三樣任何一樣變,對應條目作廢

快取命中率係即時場景最着數嘅指標:每個命中,係整整一句嘅生成時間同配額。

同步捷徑:幾時用、點防禦

≤300 字符、圖庫聲線或設計聲線,可以用同步接口:一次過回音頻檔,慳咗輪詢回合,好啱短句即時場景。

但有一個防禦位一定要有:同步專用資源未預熱時,接口會回 503(pool_cold),而且係「fail closed」設計——唔會靜靜幫你轉任務式。所以你嘅代碼要自己兜:

try 同步接口
  撞 503 pool_cold → 轉任務式(提交→輪詢→下載)
  撞 429 → 照 Retry-After 等

短句場景我建議一開始就預咗呢條後備路徑,上線前兩條路都行過一次先穩陣。

一個示例:預約確認電話嘅時間線

將成套概念落地:一個打俾客人確認聽日預約嘅電話 agent,時間線大概咁行:

0.0s  客人接聽
0.0s  播快取開場白(預生成:「你好,呢度係XX,同你確認聽日嘅預約」)
4.0s  客人回應 → 辨識+理解(呢段時間冇生成負擔)
5.5s  回覆第一句(「你聽日下晝3點,喺中環分店」)——短句,提交後好快就緒
9.0s  播第一句;同一時間第二句(「需唔需要改期?」)已經喺預取
12.0s 客人話 OK → 確認句(快取命中)即刻播
14.0s 結束語(快取),收線

留意三樣嘢:開場白同結束語係快取(零等待);中段對答靠短句+預取接住;客人思考嗰幾秒,正好係系統做工嘅時間。近即時嘅祕訣就係呢啲安排,冇魔法。

失聲保險:文字降級

語音合成呢環出事(連續 5xx、限流、超時),agent 唔應該死機。降級順序建議:

  1. 播快取嘅通用回應(「唔好意思,請再講一次」)
  2. 退化出文字(畫面顯示,或者將句子縮短再試一次合成)
  3. 記錄事故,下一回合恢復

用家對「文字兜底」嘅容忍度,遠高於對「agent 無反應」。仲有一個加分位:降級觸發嗰陣喺介面講一聲(「語音服務有啲擠擁,先用文字同你講」)——透明嘅降級係服務,靜靜哋掛咗先至係事故。降級邏輯同生成邏輯一樣,都要測試:人手關掉合成通道,行一次全流程,確認文字路徑真係出到嚟。測過嘅降級先算數,未測嘅降級只係心愿。

聲線一致性:agent 嘅「臉」

即時對話入面,聲線就係 agent 嘅身份。兩個提醒:

  • 鎖死圖庫 slug:設計/複製聲線係單次請求性質唔會存底,跨回合一致性要用圖庫聲線
  • 語氣要有個性但唔好過火:情緒參數九種(happy、sad、angry 等),客服場景多數 neutral/gentle 為主,重要位先加情緒。點調教先自然,睇情緒控制指南

agent 整體點由零搭起(包括辨識同對話管理),可以睇AI 粵語語音助手指南;想直接喺現有 agent 框架度接入,港嘢提供 MCP 接入(用 MCP 教 agent 講廣東話)。由頭認識成個語音生成體系,睇廣東話 TTS 完全指南。

狀態管理:對話上下文點影響語音

語音層本身無狀態——每個請求自包含。狀態都喺你嗰邊:對話歷史、用家偏好、當前場景。兩個實務提醒:

  • 上下文裁剪:回覆生成模組唔使孭住全部歷史;裁走遠古回合,回應短咗,語音合成跟住快
  • 角色不變量:同一個對話 session 由頭到尾一個 slug,中途換聲等於換人——要換就喺明確嘅場景邊界換

延遲預算:點拆、點量

近即時體驗係一條加法題:辨識時間+理解時間+合成時間+下載時間+播放啟動時間。你要做嘅係:

  1. 逐段打點量測:喺每個工序前後記時間戳,跑 50 至 100 個真實回合,睇分佈唔好只睇平均——尾延遲(p95)先係用家嘅真實感受
  2. 搵最長嗰段先落手:多數情況輪到合成可以拆(短句化)或者可以預取
  3. 設一個體驗預算:例如「講完至聽到第一個字 ≤1.5 秒」,超預算嘅回合記錄原因,逐步收窄

唔好用任何宣傳數字做規劃——你嘅句長分佈、你嘅並發、你嘅時段,全部影響實際表現。量測嗰陣記得分開高峰同非高峰時段,兩組數字話埋你知幾時要啟動降級。

成本同額度:即時場景嘅帳

即時對話嘅用量特徵係「碎」:句多、每句短。管理三樣嘢:

  • 配額同 playground 共用:測試同正式計同一份額度,開發期用沙盒金鑰分開
  • 在途上限=方案等級:並發用家多,上限先係真正嘅容量指標——免費 3、入門 5、專業 10、工作室 20
  • 快取命中率直接慳錢:每個命中快取嘅回合,係零生成成本;歡迎語、常用確認句呢啲「必然句」優先入快取

兩種失敗模式,上線前預演一次

  • 慢,但冇死:合成延遲升高(例如高峰期排隊)。體驗對策:播放端有個「等緊」提示或者文字浮現,用家知道系統仲喺度
  • 死,但唔靜:連續錯誤。體驗對策:文字降級+快取回應,同時警報去到你嘅監察

兩種都應該喺上線前人手觸發一次,確認降級路徑真係通——預演過嘅降級先叫降級,冇預演過嘅叫祈禱。

上線前檢查清單

檢查項過關標準
句長分佈9 成句子 ≤100 字符
預取命中播完上一句時,下一句已經就緒
在途管理撞 429 時會取消舊任務定傻等
503 後備同步失敗時自動轉任務式
文字降級合成全掛時 agent 仲有回應
聲線一致跨回合同一 slug

常見問題 FAQ

咩先算「夠即時」?

睇場景。一般對話助手,「用家講完至聽到回應」喺一至兩秒內已經係順暢體驗;客服播報可以寬鬆啲。唔好追絕對數字,用你自己嘅句子長度量測尾延遲,再逐段收窄。量測嗰陣記得分開高峰同非高峰時段——兩組數據會話你知,你嘅瓶頸係自己嘅架構定係時段擁塞。

可唔可以每句都行同步接口?

短句(≤300 字符、圖庫或設計聲線)可以,但要預 503 後備——資源未預熱時同步接口係 fail closed。有字幕(SRT)或複製聲線需求嘅句子,一定行任務式。

預取會唔會浪費配額?

預生成咗但冇播嘅句子,的確會用咗配額。對策:只預取高信心嘅下一句(對話流程固定嘅場景最啱);流動對話就等理解結果確定先交;唔要嘅任務用取消接口釋放。量一量自己嘅預取命中率——低過五成,即係你嘅對話流動性高,應該收窄預取窗口,改為「理解確定先提交」。

撞限流應該點做?

照 Retry-After 等之後重交,唔好即刻重試。留意限流係滑動 60 秒窗口、只計成功請求;真係長期貼住 60 次/分鐘,就考慮開金鑰時調高限流或者升方案(在途上限同步升)。

在途上限 3 個(免費方案)夠唔夠做即時?

單一個對話流,2 至 3 個在途已經夠行預取;唔夠嘅係多個用家同時共用同一把金鑰。多併發場景建議專業方案(10 個)或工作室(20 個)。判斷方法好簡單:記錄一日入面 in_flight_limit_reached 嘅次數——出現得密,就係升級訊號。

語音辨識都要即時,點整合?

辨識同合成係兩件事,呢篇聚焦合成嗰環。完整助手(辨識+對話+合成)嘅搭建順序,睇 AI 粵語語音助手指南一文,入面有逐層接入嘅建議。簡單講排序:先驗合成(最快見效果),再接理解,最後先做辨識——倒轉行,好容易喺中間一步失去動力。

播放端有咩要留意?

三樣:格式(mp3 通用、wav 啱後製同 IVR)、自動播放政策(瀏覽器通常要一次用戶互動先准出聲,開場白要由 click 觸發)、同緩衝(先載先播,唔好即載即播——網絡一抖就斷)。播放端係用家耳仔直接接觸嘅位,生成做得幾好,播得差都前功盡廢。最後一個位係音量:生成批次之間嘅响度可能有微差,播放端做一次統一增益,體驗先完整。

[!CTA]

俾你嘅 Agent 開口講廣東話

免費開戶即有每月 5,000 字符試底,一段歡迎語嘅時間就驗證到成條生成鏈。

相關文章