| 版本 | 日期 | 描述 |
|---|---|---|
| 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新增)00000000(用于系统消息)00000000 - 系统消息task0001 - 普通任务abcd1234 - 普通任务##START\x0100000000[0000]JWT_TOKEN##[参数1]:[值1]##[参数2]:[值2]...##END| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| voiceid | string | 角色默认音色 | 本轮对话希望使用的音色,如不填,会使用角色默认音色 |
| lang | string | string | 语言设置,可使用自然语言配置, "default", "auto", "中文", "English" , "JA" ,"kr" |
| format | string | pcm | 输出音频格式设置,影响服务器返回的音频数据,可选值:pcm, opus |
| input_audio_format | string | pcm | 输入音频格式设置,影响客户端上行的音频解析,可选:pcm,opus(裸流:2字节长度前缀 + 60ms 帧) |
| mode | string | manual | 音频处理模式,可选值:manual(手动模式), vad(自动VAD模式) |
| emoji_mode | string | false | 表情包模式,可选值:true(默认模式,25种表情), dimi(DIMI模式,3500种表情), false(关闭) |
| voice_print | boolean | false | 声纹识别开关 |
| device_id | string | 推荐填写 设备ID,用于单设备登录 |
# 基础认证(仅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\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 处理##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# 认证(不显式设置格式,默认上下行均为 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