Grok Voice 3.0怎么接入?版本迁移、WebSocket连接与首段语音验证
依据10月14日官方更新,将 Grok Voice 2.0 迁移至3.0,用最小服务端示例接收语…
文章目录
已有Grok语音应用使用旧模型时,先确认它固定了哪个版本,比盲目重写音频链路更重要。xAI于2026年10月14日发布Voice 3.0,并弃用Voice 2.0。下面先检查迁移,再用一段服务端程序验证“文本输入、语音输出”,为后续接麦克风建立可定位的起点。
第一步:检查固定版本与latest别名
官方当前文档列明grok-voice-latest指向grok-voice-3.0。已经使用latest别名的会话会升级到3.0;固定grok-voice-2.0的代码应改为grok-voice-3.0。公告说明端点、会话参数和事件保持兼容,但应用自己的音频播放、轮次处理和工具调用仍需回归测试。
该接口是xAI开发者API,需要有效密钥与额度,不是给普通聊天窗口填写一个模型名。不要把语音对话模型与grok-voice-transcribe-2.0混用:前者用于双向实时会话,后者用于识别录音,任务与接口不同。
第二步:只验证最小语音输出
先安装支持additional_headers参数的新版websockets,例如14或更高版本,并设置本机环境变量XAI_API_KEY。下面代码发送一句文字,接收默认JSON路径下的音频增量,按指定采样率保存voice-test.wav。它不采集麦克风,也不是完整通话应用。示例只做语法核对,未执行付费调用。
import asyncio, base64, json, os, wave
import websockets
async def run():
chunks = []
url = "wss://api.x.ai/v1/realtime?model=grok-voice-3.0"
headers = {"Authorization": "Bearer " + os.environ["XAI_API_KEY"]}
async with websockets.connect(url, additional_headers=headers) as ws:
await ws.send(json.dumps({"type": "session.update", "session": {
"voice": "eve", "turn_detection": None,
"instructions": "用两句话回答,解释清楚,不使用外部工具。",
"audio": {"output": {"format": {"type": "audio/pcm", "rate": 24000}}}
}}))
async for message in ws:
event = json.loads(message)
kind = event.get("type")
if kind == "session.updated":
await ws.send(json.dumps({"type": "conversation.item.create",
"item": {"type": "message", "role": "user", "content": [
{"type": "input_text", "text": "请解释浏览器缓存有什么用。"}]}}))
await ws.send(json.dumps({"type": "response.create"}))
elif kind in ("response.output_audio.delta", "response.audio.delta"):
chunks.append(base64.b64decode(event["delta"]))
elif kind == "error":
raise RuntimeError(event.get("error", {}).get("message", "API error"))
elif kind == "response.done":
break
if not chunks:
raise RuntimeError("No audio received; inspect response events")
with wave.open("voice-test.wav", "wb") as output:
output.setnchannels(1)
output.setsampwidth(2)
output.setframerate(24000)
output.writeframes(b"".join(chunks))
asyncio.run(asyncio.wait_for(run(), timeout=60))
第三步:分层核对结果
连接成功只证明WebSocket和鉴权通过;收到session.updated说明配置已应用;保存出非空音频才说明至少拿到了语音数据。最后用音频播放器打开WAV,确认能听清、语速正常、内容回应了提问。不能因为程序没报错就宣布实时会话完成。
尖锐噪声、倍速或时长明显不对,优先检查输出编码与播放采样率。本文固定PCM、单声道、16位和24000Hz,WAV头必须匹配实际返回音频。若切换为binary传输,不能继续把二进制消息当JSON解析;迁移测试时先保持原传输方式。
第四步:再接输入和轮次控制
有了可播放的输出,再按官方文档接音频输入。server_vad可检测用户停止说话,手动轮次则需要正确处理输入提交与响应创建。不要同时开启两套互相重复的轮次触发逻辑,否则可能出现多答一次或截断。用短句、长停顿和中途纠正分别测试。
第五步:检查客户端与迁移范围
服务端可以在Authorization中使用长期API密钥;浏览器和移动客户端应使用短期Ephemeral Token,不能把长期密钥打进网页包。本文样例在本机服务端环境运行。上线前还要验证断线、取消和播放停止,避免旧响应音频继续排队。
保留原配置与测试样本,逐项比较模型名、会话参数、接收到的事件和播放效果。此次迁移不要求凭空替换全部接口;真正的完成标准是新版本路径可运行,语音可播放,现有轮次与工具流程没有被破坏。
官方资料
资料核对日期:2026年10月19日。
本文地址:https://www.163264.com/17388
