创建实时对话
/v1/realtime通过 WebSocket 建立持续的双向实时会话,连续输入语音、摄像头或屏幕画面,并流式接收文本与语音响应。
连接与鉴权
使用 HTTP GET 升级为 WebSocket。连接地址为 wss://api.mosi.cn/v1/realtime,必须通过 model 查询参数指定模型;API Key 只能放在 Authorization 请求头中。
模型 ID,固定为 moss-live-1.0,通过 WebSocket 地址的 model 查询参数传入。
调用方自己的稳定终端用户 ID,需 URL 编码;使用 memory_scope=user 时必填,重连时使用相同 user。示例:wss://api.mosi.cn/v1/realtime?model=moss-live-1.0&user=customer_001。
Bearer <API Key>;放在 WebSocket 握手的 Authorization 请求头中。
会话流程
| 阶段 | 客户端 | 服务端与判断 |
|---|---|---|
| 建立连接 | 完成 WebSocket 握手 | 连接打开后加入会话 |
| 配置 | 发送 attach_session,再发送 session.update | 依次等待 session_attached、session.updated,确认 data.error 为空字符串 |
| 发送音频及视频 | 启用麦克风;画面启用 media.mode 与 video.state | 同一连接接收音频和 JPEG 画面 |
| 回答 | 展示文本、播放语音并发送播放回执 | 接收 input.transcript.done、output.transcript.done 和 response.ended |
| 继续或结束 | 继续输入,或关闭 WebSocket | 本轮完成可继续;关闭连接结束会话 |
客户端事件
加入会话;收到 session_attached 后开始按在线时长计费。
设置人设与业务规则;收到 session.updated 后检查 data.error,非空时配置不生效。
开启或关闭麦克风输入。
视频或屏幕共享前启用 tagged-v1。
控制摄像头或屏幕画面;关闭画面不结束会话。
每个音频块实际播放完成后发送;字段放在消息顶层,不套 data。只确认实际播放完成的音频,不要等待回答文本结束才确认。
收到 response.audio.done 且本轮音频全部播放完成后发送。
设置主要关注的画面来源。
收到 response.audio.stop 后停止对应播放并回传。
服务端事件
会话已加入;收到后再配置人设与业务规则。
配置结果;data.error 为空字符串时启用媒体和麦克风。
用户识别文本更新;data.text 为当前完整文本,替换显示,不要逐条追加。
用户识别文本完成。
模型回答文本更新;data.text 为当前完整文本,替换显示,不要逐条追加。
模型回答文本完成。
回答被打断;按 run_id、turn_id 将对应回答标记为已打断。
保存音频上下文,与后续二进制音频按顺序配对。
本轮音频发送完毕;实际播放全部完成后发送 playback.completed。
本轮状态通知;不等同于会话结束。
错误事件;记录原因并释放连接及媒体资源。
停止对应语音播放,并发送 playback.stopped。
协议限制
| 项目 | 当前协议值与说明 |
|---|---|
| 音频 | 上行 16 kHz、下行 48 kHz,单声道 PCM S16LE;不带 WAV 头。说话结束后继续传静音。 |
| 媒体封装 | tagged-v1:音频 0x00,摄像头 JPEG 0x01,屏幕 JPEG 0x02;关闭画面后音频仍保留前缀。 |
| 画面 | 每张 JPEG 一条二进制消息,不使用 Base64,不接受整段 MP4 或 H.264 码流。 |
| 传输 | 音频与画面复用同一 WebSocket。 |
| 画面处理 | 过载时可能保留最新画面并丢弃待处理旧帧,不保证逐帧分析。1 FPS、JPEG quality 0.8、摄像头长边 640 px、屏幕 1024 px 是客户端默认值,不是硬上限。 |
错误码
建连阶段的认证、权限、限流和通用 HTTP 错误,请参见 错误码。以下仅列出 MOSS-LIVE 接口专属的协议错误。
| 错误码 | 触发条件 | 处理建议 |
|---|---|---|
| memory_scope_requires_user | user 记忆范围缺少终端用户身份 | 传入稳定 user,或使用 session 范围。 |
| memory_scope_immutable | 重连时修改创建选项 | 按创建时选项重连;改变选项需新建会话。 |
| invalid_memory_scope | 参数值不合法 | 检查枚举值。 |