| 版本 | 日期 | 描述 |
|---|---|---|
| 2.8 | 2026-09-07 | 新增魔法命令 incognito on、incognito off和debug on/off 并列;启动无痕模式,所有对话内容不进入记忆库,不触发认主 |
| 2.7 | 2026-06-02 | 新增 IMAGE 消息流(type=0x0a),login 新增 resolution 参数;服务器在 LLM 输出含图片 JSON 时自动下行 IMAGE 帧,按设备分辨率通过 TOS URL 即时缩放 |
| 2.6 | 2026-04-14 | 新增降噪模式 |
| 2.5 | 2025-01-15 | 新增VAD(语音活动检测)功能,支持auto/manual两种模式,自动检测用户说话结束 |
| 2.4.1 | 2025-08-11 | 新增入参 input_audio_format,支持裸 Opus 输入(2字节长度前缀 + 60ms 帧),ASR 前统一转 PCM;文档更新 |
| 2.4 | 2025-07-15 | 新增SPEAK消息类型,支持让角色直接说指定内容 |
| 2.3 | 2025-07-10 | 修改连接超时为5分钟,认证超时为5秒,心跳包不再推荐,新增关闭连接操作 |
| 2.2 | 2025-04-23 | 新增音频格式选择功能,支持PCM和Opus格式 |
| 2.1 | 2025-03-15 | 支持新版模型AnyoneV2.1 |
| 1.32 | 2025-01-03 | 增加认证消息可选参数,新增prompt回执消息 |
| 1.31 | 2024-12-29 | 消息头尾标记改为##START和##END,修改了文档中一些误导性描述 |
| 1.30 | 2024-12-27 | 统一消息结构,新增END_FRAME帧类型 |
# 客户端发送心跳包
##START\x0500000000[0000]##PING##END
# 服务器响应
##START\x0500000000[0000]##INFO:PONG##END##START\x0500000000[0000]##DISCONNECT##END##START\x0500000000[0000]##INFO:DISCONNECT 3 seconds##END##START[消息类型][任务ID][序列号][消息内容]##ENDAUTH : b'\x01' # 认证消息
AUDIO_FRAME : b'\x02' # 音频帧数据
END_FRAME : b'\x03' # 结束帧标记
TEXT : b'\x04' # 文本消息
STATUS : b'\x05' # 状态消息(客户端可用于心跳包)
MCP : b'\x06' # MCP消息(可选扩展)
SPEAK : b'\x07' # 说指定内容(2.4新增)
LISTEN : b'\x08' # VAD监听控制消息(2.5新增)
EMOJI : b'\x09' # Emoji消息
IMAGE : b'\x0a' # 图片消息(2.6新增)00000000(用于系统消息)00000000 - 系统消息task0001 - 普通任务abcd1234 - 普通任务##START\x0100000000[0000]JWT_TOKEN##[参数1]:[值1]##[参数2]:[值2]...##END| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| voiceid | string | 角色默认音色 | 语音ID |
| emotion_status(施工中) | string | true/false | 情绪状态返回与否 |
| lang | string | string | 语言设置,可使用自然语言配置, "default", "auto", "中文", "English" , "JA" ,"kr" |
| format | string | pcm | 输出音频格式设置,影响服务器返回的音频数据,可选值:pcm, opus |
| input_audio_format | string | pcm | 输入音频格式设置,影响客户端上行的音频解析,可选:pcm,opus(裸流:2字节长度前缀 + 60ms 帧) |
| in_rate | int | 16000 | 输入采样率(记录与校验用途,当前服务端统一转 16k 处理) |
| in_channels | int | 1 | 输入声道数(记录与校验用途,当前服务端统一转单声道处理) |
| in_frame_ms | int | 60 | 输入帧长(毫秒),用于 opus 输入的推荐帧长 |
| mode | string | manual | 2.5新增 音频处理模式,可选值:manual(手动模式), auto(自动VAD模式) |
| denoise | bool | false | 是否启用ASR降噪预处理,适合嘈杂环境,GPU上增加约200ms延迟 |
| resolution | string | 不缩放 | 2.6新增 设备屏幕分辨率,格式为 WxH(如 320x240、540x540)。服务器在下行图片消息流时按此分辨率对 TOS 图片 URL 追加即时缩放参数(m_lfit 等比缩放,不裁剪不变形)。未设置则原图 URL 直传。 |
# 基础认证(仅token)
##START\x01000000000000JWT_TOKEN##END
# 带单个参数
##START\x01000000000000JWT_TOKEN##voiceid:voice1##END
# 带多个参数
##START\x01000000000000JWT_TOKEN##voiceid:voice1##stage_mode:true##fast_mode:true##END
# 设置输出音频格式为 opus(下行)
##START\x01000000000000JWT_TOKEN##format:opus##END
# 设置输入音频格式为裸 Opus(上行)
##START\x01000000000000JWT_TOKEN##input_audio_format:opus##END
# 设置为auto模式(启用VAD自动检测)- 2.5新增
##START\x01000000000000JWT_TOKEN##mode:auto##input_audio_format:opus##END
# 使用PCM格式的auto模式
##START\x01000000000000JWT_TOKEN##mode:auto##input_audio_format:pcm##END
# 启用降噪(嘈杂环境下提升识别准确率)
##START\x01000000000000JWT_TOKEN##denoise:true##END##START\x0500000000[0000]##INFO:认证成功,NPCID: <npcid>, 模式: <mode>##END##START\x0500000000[0000]##ERROR:token error##ENDEND_FRAME来标记音频结束input_audio_format:opus以获得更好的性能END_FRAME# 开始监听
##START\x05[任务ID][0000]##LISTEN:{"session_id":"<会话ID>","type":"listen","state":"start","mode":"auto"}##END
# 停止监听
##START\x05[任务ID][0000]##LISTEN:{"session_id":"<会话ID>","type":"listen","state":"stop","mode":"auto"}##END
# 噪音过滤提示
##START\x05[任务ID][0000]##INFO:检测到噪音或空白,继续监听##ENDformat/input_audio_format(或均设为 pcm)END_FRAME1. 文本帧:
##START\x04[任务ID][0000][文本内容]##END
2. 结束帧:
##START\x03[任务ID][0001]##END1. 提示词回执:
##START\x05[任务ID][0000]##INFO:prompt: [提示词内容]##END
2. 响应文本:
##START\x04[任务ID][0000][响应内容]##END
3. 音频数据(如果有):
##START\x02[任务ID][0001][音频数据1]##END
##START\x02[任务ID][0002][音频数据2]##END
...
4. 结束帧:
##START\x03[任务ID][最后序号+1]##END1. 音频帧序列:
##START\x02[任务ID][0000][音频数据1]##END
##START\x02[任务ID][0001][音频数据2]##END
...
2. 结束帧:
##START\x03[任务ID][最后序号+1]##END1. 文本响应:
##START\x04[任务ID][0000][回应文本]##END
2. 音频响应序列:
##START\x02[任务ID][0001][音频数据1]##END
##START\x02[任务ID][0002][音频数据2]##END
...
3. 结束帧:
##START\x03[任务ID][最后序号+1]##ENDformat 控制:pcm 或 opusopus 为裸流:每帧 60ms,帧前有 2 字节大端长度前缀,负载为连续的若干帧级联;服务器会尽量将多个完整帧打包到一个网络帧发送input_audio_format 控制:pcm 或 opusopus 时,客户端需采用与“出”一致的裸 Opus 帧流(2 字节长度前缀 + 60ms 帧,采样率 16k,单声道)。服务器端在 ASR 前将其统一解码为 PCM 再处理format:opusinput_audio_format:opusEND_FRAME,服务器将聚合全部上行帧后统一识别input_audio_format 未设置或取值非法,服务器按 pcm 处理{"type":"image","url":"..."} 或旧式 {"image_url":"..."})时,自动将其路由为下行 IMAGE 帧,不再以 TEXT 帧发送给设备。设备无需修改上行协议,仅需额外处理 IMAGE 帧。##START\x0a[任务ID][0000]{"type":"image","url":"<图片URL>"}##END\x0a:IMAGE 消息类型(十进制 10)url:火山 TOS 图片 URL,若认证时声明了 resolution 则已追加 TOS 即时缩放参数resolution:320x240,服务器下行的 URL 格式为:https://vision.tos-cn-beijing.volces.com/{npcid}/latest.jpg?x-tos-process=image/resize,m_lfit,w_320,h_240/format,jpg/quality,q_90m_lfit:等比缩放,长边限制在目标框内,不裁剪不变形##START\x01000000000000JWT_TOKEN##resolution:320x240##END
##START\x01000000000000JWT_TOKEN##resolution:540x540##END##START\x07[任务ID][序列号][文本内容]##END1. 音频数据帧:
##START\x02[任务ID][0001][音频数据1]##END
##START\x02[任务ID][0002][音频数据2]##END
...
2. 结束帧:
##START\x03[任务ID][最后序号+1]##END
3. 状态消息(可选):
##START\x05[任务ID][0000]##INFO:语音合成完成##END##START\x05[任务ID][0000]##ERROR:错误描述##END本次更新新增图片消息流(IMAGE 帧),涉及以下三处对接变更:
登录时声明设备分辨率(可选)
在认证消息的参数串里加一个 resolution 字段,格式为 WxH:
##START\x01000000000000<JWT_TOKEN>##resolution:320x240##END
不传则保持原有行为,图片 URL 不缩放直传。支持任意分辨率,服务端会按等比缩放(不裁剪不变形)。
画图函数名更新(NPC 配置需变更)
按分辨率定制的画图函数已退役,统一使用主版本。需在 NPC 的 functions 配置中替换函数名:
draw_pic_t → draw_pic draw_pic_d → draw_pic draw_pic_google_t → draw_pic_google draw_pic_google_d → draw_pic_google
只改函数名,其余参数配置不变。分辨率适配由服务端根据设备登录时声明的 resolution 自动处理,无需在函数配置里指定。
客户端新增解析 IMAGE 帧(type = 0x0a)
服务端检测到图片后,会自动转为 IMAGE 帧下发,不再作为普通 TEXT 帧:
##START\x0a[任务ID][0000]{"type":"image","url":"<图片URL>"}##END
客户端收到 type = 0x0a 的帧后,解析 JSON 取出 url,直接发起 HTTP GET 下载图片渲染即可。URL 已按登录时声明的分辨率缩放处理完毕,无需客户端侧再做任何图像处理。
以上三项相互独立,可逐步接入。如未更新客户端,IMAGE 帧会被忽略,不影响音频和文字流的正常运行。# 认证(不显式设置格式,默认上下行均为 PCM)
C -> S: ##START\x01000000000000JWT_TOKEN##voiceid:voice1##END
S -> C: ##START\x05000000000000##INFO:认证成功,NPCID: <npcid>##END
# 文本对话
C -> S: ##START\x04123456780000你好##END
C -> S: ##START\x03123456780001##END
S -> C: ##START\x04123456780000你好,很高兴见到你##END
S -> C: ##START\x02123456780001[音频数据1]##END
S -> C: ##START\x02123456780002[音频数据2]##END
S -> C: ##START\x03123456780003##END# 认证(下行与上行均启用 Opus)
C -> S: ##START\x01000000000000JWT_TOKEN##voiceid:voice1##format:opus##input_audio_format:opus##END
S -> C: ##START\x05000000000000##INFO:认证成功,NPCID: <npcid>, 模式: manual##END
# 上行音频(帧流:2字节长度前缀 + 60ms 帧,可多帧/包)
C -> S: ##START\x02task00010000[长度+帧][长度+帧]...##END
...
C -> S: ##START\x03task00010001##END
# 下行音频(服务器按多帧尽量聚合打包返回)
S -> C: ##START\x02task00010001[音频数据1]##END
S -> C: ##START\x02task00010002[音频数据2]##END
S -> C: ##START\x03task00010003##END# 认证(启用auto模式 + Opus格式)
C -> S: ##START\x01000000000000JWT_TOKEN##mode:auto##input_audio_format:opus##format:opus##END
S -> C: ##START\x05000000000000##INFO:认证成功,NPCID: <npcid>, 模式: auto##END
# 服务器主动发送开始监听
S -> C: ##START\x05000000000000##LISTEN:{"session_id":"00000000","type":"listen","state":"start","mode":"auto"}##END
# 客户端开始发送音频流(无需END_FRAME)
C -> S: ##START\x02task00010000[长度+帧][长度+帧]...##END
C -> S: ##START\x02task00010001[长度+帧][长度+帧]...##END
...
# VAD检测到语音结束,服务器发送停止监听
S -> C: ##START\x05task00010000##LISTEN:{"session_id":"task0001","type":"listen","state":"stop","mode":"auto"}##END
# 服务器处理并返回响应
S -> C: ##START\x05task00010000##INFO:prompt: 用户说的话##END
S -> C: ##START\x04task00010000AI的回应文本##END
S -> C: ##START\x02task00010001[音频数据1]##END
S -> C: ##START\x02task00010002[音频数据2]##END
S -> C: ##START\x03task00010003##END
# 响应完成后,服务器重新开始监听
S -> C: ##START\x05000000000000##LISTEN:{"session_id":"00000000","type":"listen","state":"start","mode":"auto"}##END
# 循环:客户端继续发送音频,服务器自动检测...
# 强制结束对话示例
C -> S: ##START\x0500000000[0000]##STOP_VAD##END
S -> C: ##START\x0500000000[0000]##INFO:强制结束对话,处理当前音频##END
S -> C: ##START\x0500000000[0000]##LISTEN:{"session_id":"00000000","type":"listen","state":"start","mode":"auto"}##END# 客户端发送音频
C -> S: ##START\x02task00020000[环境噪音]##END
C -> S: ##START\x02task00020001[环境噪音]##END
# VAD检测到"语音结束"但STT识别结果无效
S -> C: ##START\x05task00020000##LISTEN:{"session_id":"task0002","type":"listen","state":"stop","mode":"auto"}##END
S -> C: ##START\x05task00020000##INFO:检测到噪音或空白,继续监听##END
# 服务器立即重新开始监听,无需用户重新操作
S -> C: ##START\x05task00020000##LISTEN:{"session_id":"task0002","type":"listen","state":"start","mode":"auto"}##ENDinput_audio_format:opus,并按"入端 Opus 帧流规范(6.2.4.1)"打包input_audio_format:opus)# 强制结束当前对话(仅Auto模式有效)
##START\x0500000000[0000]##STOP_VAD##END