SynapseWire

語音套接字用別名。模型卡寫的是 3.0。

語音文件的即時網址要 grok-voice-latest。模型卡名字是 grok-voice-3.0。兩段取樣率範例一個 24000,一個 16000。

發布於:
木桌上合著的筆記型電腦、一捲耳機線,和一張空白索引卡,檯燈偏暖。
FIG. 01 // 木桌上合著的筆記型電腦、一捲耳機線,和一張空白索引卡,檯燈偏暖。

模型卡和套接字範例沒有用同一個字串。Grok Voice 3.0 的模型卡把模型寫成 grok-voice-3.0,開頭那句是即時語音代理用的語音對語音模型。語音對語音那一頁把 WebSocket 寫成 wss://api.x.ai/v1/realtime?model=grok-voice-latest。你若把卡片上的名字貼進查詢字串,貼的就不是範例。你若照範例貼,貼的就不是卡片。

這個站寫過本機模型旗標,不是離線模式。/model 找得到 Ollama,離線不是它。也寫過知識 API 要先搜片段。先搜片段。也寫過標價不是帳單。Haiku 5.5 短提示 0.10 美元。Grok Voice 3.0 是同一種錯法:官方有三種看法,取樣率有兩個數字,價格不在你剛打開的那張卡上。

查詢參數是別名,如果第二手頁說得對

grok-voice-latest 是官方套接字範例裡的字串。grok-voice-3.0 是模型卡上的字串,Markdown 版和HTML 卡都是這個名字。kie.ai 10 月 16 日的整理說別名 grok-voice-latest 現在指向 grok-voice-3.0,並且從 2026 年 10 月 14 日起一般可用。我撈到的卡片頁沒有印這個日期,也沒有印「latest 指向 3.0」這句。別名是 kie.ai 的。兩個字串是文件自己的。

把 grok-voice-3.0 寫死,因為卡片這樣寫,說得通。把 grok-voice-latest 寫死,因為套接字範例這樣寫,也說得通。把兩者當成已經證明的同義詞,是在借 kie.ai。別名可以改。latest 這個名字被允許在你書籤裡的卡片還沒改的那一天就換掉。測試夾具要一個看起來凍結的 id,卡片上的 grok-voice-3.0 比較像。要文件實際示範的 id,就是 grok-voice-latest。寫下你抄的是哪一頁。下一個來查 400 的人需要這句。

kie.ai 還把公司寫成 SpaceXSI,以前叫 xAI。官方範例裡的套接字主機仍是 api.x.ai。客戶端因為一篇整理改了主機,失敗的原因和取樣率無關。

語音對語音文件裡的認證是暫時權杖或 API 金鑰,放在 WebSocket 子協定裡,形式是 xai-client-secret 加上權杖。那是接上去的秘密,不是查詢參數。不要因為兩者都發生在連線當下,就把權杖塞進 grok-voice-latest 旁邊的查詢字串。文件自己的順序是:盡早開始開套接字,而且在套接字的 open 事件之前就開始麥克風。那是兩個時鐘。權杖屬於套接字那個時鐘。

24000 和 16000 都在文件裡,不在同一段範例

語音對語音那一頁沒有單一取樣率。麥克風範例把 AudioContext 設在 24000 Hz。再往下的 session 更新範例,把輸入和輸出格式設成 audio/pcm,速率 16000,並且寫明這個速率只適用於 audio/pcm。它還點了另外兩個格式名:audio/pcmu 和 audio/pcma。先照第一段做、再把第二段貼進去的人,程式裡會有兩個速率,除非他發現自己蓋掉了前一個假設。

我不替你選 16000 或 24000。那一頁兩個都印了,兩段範例做的事不一樣。AudioContext 的速率是那段程式碼裡的擷取時鐘。session 的速率是 session 設定宣稱要送、要收的速率,而且只對 PCM。擷取時鐘和 session 速率不一樣的時候,重採樣是你的,或者破音是你的。我用到的那一節沒有寫「把 24000 重採樣成 16000」,也沒有寫「忽略 AudioContext 的速率」。它把兩個數字都放出來。一篇教學若收成「Grok Voice 用 16 kHz」,就刪掉了 24000 那段。若收成「從頭到尾用 24 kHz」,就刪掉了 session 範例,也刪掉了「速率欄只對 PCM」那句。

那一頁值得照抄的是順序,不是某一個速率。先要麥克風,在 WebSocket 的 open 之前就開始緩衝樣本。不要等 open 才開始收。理由是延遲,文件說套接字連線可能要時間。提前緩衝是文件寫的辦法。它也是一個隱私開關:套接字還沒成功,你已經在收聲音。連線失敗的話,那段緩衝仍是你拿走的音訊。丟掉。文件在乎的是不要切掉一句話的開頭。它不是讓你留著失敗連線的樣本。

format 和 transport 是不同欄位。那一頁說 format 選編解碼,transport 選這些位元組在套接字上怎麼走。客戶端需要那個列舉,就去讀那個標題,不要讀一篇轉述。

session 裡有一個欄位叫 instructions。範例填了一句通用助理。那是片段裡的佔位,不是評過的提示詞,也不是把「你是一個有用的助理」送進客服機器人的理由。換成你真正的任務,或者在知道產品要這個欄位之前先留空。我不轉貼那段程式。欄位名稱才是這裡要留的事實。

Markdown 卡寫文字進文字出。HTML 卡寫文字和音訊

同一個模型 id,兩行「一眼看去」。Markdown 版的模態是 text → text。HTML 卡印的是進去 Text, Audio,出來也是 Text, Audio。兩邊的大標題都是語音對語音模型。套接字那一頁是麥克風和 PCM session。從 Markdown 那一行模態開始搭客戶端的人,會先做出一個文字模型,然後納悶套接字範例為什麼在講 getUserMedia。

我不知道是 Markdown 匯出弄丟了音訊,還是 HTML 卡多寫了音訊。兩頁同一天撈到,它們不一致。在其中一頁改口之前,告訴你這通呼叫是音訊的,是套接字那一頁。會誤導快速產生器的,是 Markdown 那一行。寫包裝層的人,不要信同一張卡上和大標題打架的單行模態。先讀套接字頁,再鎖型別。

區域是同一種分裂,規模小一點。Markdown 版一行列出 us-east-1、eu-west-1、us-saltlake-2。HTML 細節區塊在撈到的那一段裡印了 us-east-1,接著就轉去速率限制。這不能證明 HTML 否認另外兩個區域。它能證明的是:不要從細節格引用「只有 us-east-1」,也不要把三個區域說成 HTML 卡已經複述過。兩種版面的速率限制標題下面,我撈到的都是空的。空標題不是每秒零次。它是缺數字。不要為了讓設定檔看起來寫完,就編一個每秒請求數。

價格不在你剛打開的那張卡上

模型卡的 Pricing 標題下面沒有數字,Markdown 版沒有,我撈到的 HTML 版也沒有。eesel AI 10 月 15 日說定價頁把語音對語音的 grok-voice-3.0 列成每分鐘 0.08 美元,也就是每小時 4.80 美元,另加每次文字輸入 0.004 美元,和已棄用的 grok-voice-2.0 同一張標價。kie.ai 印了同樣的 0.08 和 0.004,也說價格沒有從 2.0 漲上來。我自己沒有撈到一張把這些格子印出來的定價表。兩個第二手頁彼此一致。它們不是模型卡。

這件事在你要把成本寫死的時候才要緊。Pricing 標題是空的,不是承諾這通呼叫免費。它是這一頁沒帶數字。先去 eesel 描述的那張定價頁,讀那一列,再把 0.08 寫進註解。若那一列在 10 月 15 日之後動過,eesel 和 kie.ai 救不了你。它們是這週寫的。已經是第二手。

eesel 還把別的標價排在一起,很容易被誤用成排名。GPT-Live-1 列成每分鐘 0.05 美元,後端模型另計。Gemini 3.8 Live 列成音訊輸入每分鐘 0.005 美元、輸出每分鐘 0.018 美元。一張不含模型的 0.05 標價,在你把被排除的那一列加回去之前,並不比一張含模型的 0.08 便宜。eesel 轉述 Artificial Analysis 對輸入音訊整小時的算法:Grok Voice 3.0 是 4.80 美元,和 Voice 2.0 一樣;高於 GPT-Live-1(Sol, low)的 4.47 美元,也高於 Gemini 3.8 Live Extended Thinking(High)的 3.50 美元;低於 GPT-Live-1(Astra, medium)的 5.83 美元;大約比 GPT-Realtime-2.1 High 的 10.75 美元便宜 2.2 倍。這些是 eesel 轉述的 Artificial Analysis 數字,不是模型卡上的格子。「更便宜」取決於你把哪一檔 GPT-Live-1 放在旁邊。Sol-low 和 Astra-medium 不是同一個產品。一句「Grok Voice 3.0 比 GPT-Live-1 便宜」已經選了一檔,藏了另一檔。

kie.ai 補了一組價格表裡沒有的品質分裂。在 Artificial Analysis 的語音對語音指數上,它把 Grok Voice 3.0 放在 86.9,前頭是 GPT-Live-1(Astra, medium)的 83.2 和 Gemini 3.8 Live 的 82.6。在 τ-Voice 這個客服通話測驗上,它把 GPT-Live-1 放在 74.5%,Grok Voice 3.0 放在 71.6%。它還說實驗室宣稱在這個測驗上延遲比 GPT-Live-1 低 40%。指數領先和單項落後可以同時被印出來。它們不是同一個排名。延遲是第三個排名。你若在為電話佇列選模型,τ-Voice 那一對比較近,而它仍是 kie.ai 的表,不是你能從套接字頁讀到的數字。

語言數是同一種問題,規模更小。kie.ai 說開發者對文件的轉述是 20 種以上,語音落地頁寫 25 種以上。我不再打開第三頁去封一個勝者。產品需要某一種語言,就看你實際對接的那一頁上的清單。「20+」和「25+」都是別人摘要過的下限。都不是語系代碼。

要設定的,和不該從轉述抄的

套接字主機用 api.x.ai,路徑 /v1/realtime,模型查詢要明確決定是 grok-voice-latest 還是 grok-voice-3.0。把選擇記下來。秘密放在文件寫的子協定裡,不要放進查詢參數。在等待 open 之前就開始收麥克風,套接字若沒打開,緩衝丟掉。PCM 速率選一個,讓 AudioContext 和 session 設定一致,不然就故意重採樣。文件的兩段範例用的是 24000 和 16000。你的程式應該只用一個,註解裡寫你跟著哪一段。

做語音客戶端時,不要從 Markdown 的一眼模態取值。那一行寫的是文字進、文字出。套接字頁是音訊。不要從模型卡取價格。標題是空的。不要從速率限制標題取每秒請求數。那裡也是空的。不要從單一細節格取區域清單,如果 Markdown 那一行列了三個 id。你真正要打的區域端點,自己核。

kie.ai 印了部署數字,包括特斯拉每天數百萬次對話、Starlink 客服每天約 2 萬通、其中約 70% 沒有人接手。這些都不是設定步驟。也都不在套接字頁上。容量計畫若從一篇部落格的 Starlink 句子開始,那就不是容量計畫。同一頁把上下文長度與參數數量標成尚未確認。就讓它們保持未確認。

這週的失敗方式,是抄了一頁官方文件,就把它叫成整合。卡片、Markdown 匯出、套接字範例是三頁。它們已經在模型字串、模態那一行、取樣率上不一致。客戶端在送出去之前先看見這個不一致,才是文件裡還沒替你寫好的那一步。

分享文章 //
READER LETTERS

讀者回應与討論

[ 0 則評論 ]

暫無讀者回應,歡迎發表你的見解。

FURTHER READING

相關文章