MiniCPM-o Docs
Realtime API

Chat 模式

Realtime API 的 turn-based chat 协议

Chat 模式使用同一个 Realtime WebSocket 入口处理一轮或多轮 turn-based 对话。

连接

wss://host/v1/realtime?mode=chat

连接后先等待 session.queue_done,再发送 session.init

{ "type": "session.init", "payload": {} }

服务端返回 session.created 后,客户端发送 input.append

输入

{
  "type": "input.append",
  "input": {
    "messages": [
      { "role": "user", "content": "请只回答:测试" }
    ],
    "streaming": true,
    "generation": {
      "max_new_tokens": 64,
      "length_penalty": 1.1
    },
    "image": {
      "max_slice_nums": 1
    },
    "omni_mode": false,
    "tts": {
      "enabled": false
    },
    "use_tts_template": false,
    "enable_thinking": false
  }
}
字段类型必填说明
messagesarray对话消息。role 支持 systemuserassistant
streamingbool默认 truetrue 时服务端发送文本/音频增量后再发送 response.done
generation.max_new_tokensint生成长度上限,默认 256
generation.length_penaltynumber长度惩罚,默认 1.1
image.max_slice_numsint多模态图片切片数
omni_modebool是否启用 omni chat 输入
tts.enabledbool是否生成语音输出,默认 false
tts.ref_audio_datastringTTS 参考音频,base64 float32 PCM
use_tts_templatebool是否使用 TTS 模板
enable_thinkingbool是否启用 thinking

messages[].content 可以是字符串,也可以是多模态列表:

{
  "role": "user",
  "content": [
    { "type": "text", "text": "描述这张图" },
    { "type": "image", "data": "<base64 image>" }
  ]
}

输出

Streaming chat 会先收到若干 response.output.delta

{
  "type": "response.output.delta",
  "kind": "text",
  "text": "测试",
  "response_id": "resp_xxx",
  "session_id": "sess_xxx"
}

如果启用 TTS,音频作为独立 delta 下发:

{
  "type": "response.output.delta",
  "kind": "audio",
  "audio": "<base64 float32 PCM, 24 kHz mono>",
  "response_id": "resp_xxx",
  "session_id": "sess_xxx"
}

一次 turn 结束时服务端发送 response.done

{
  "type": "response.done",
  "text": "测试",
  "reason": "turn_end",
  "metrics": {}
}

Non-streaming chat 可以只返回 response.done,完整文本在 text 字段中;如果生成音频,完整音频在 audio 字段中。

关闭

{ "type": "session.close", "reason": "turn_done" }

服务端关闭后返回 session.closed 或直接关闭 WebSocket。

On this page