TokenToSea开发者文档
控制台

Qwen3.5-Omni-Flash-Realtime (2026-03-15)

千问全模态实时模型,经 WebSocket 进行低延迟音视频对话。

本页内容
千问

千问 · 阿里巴巴

国内 实时音频 官方直供

在控制台测试
模型 ID(请求中的 model 字段)
qwen3.5-omni-flash-realtime-2026-03-15

快速开始#

  1. 创建 API Key

    在控制台 我的 Key 创建通用 API Key(明文只显示一次),并确认账户余额充足。

  2. 设置环境变量

    export TOKENTOSEA_API_KEY="sk-relay_…",示例从环境变量读取密钥。

  3. 发送请求

    以下为 实时会话 · WebSocket 示例;其他接口见全部调用示例。

  • 需要准备单声道 PCM16 音频文件 audio.pcm(可用示例中的 ffmpeg 命令转换)
  • 单次会话最多 60 秒。断线后先查询原会话状态,不会自动重连并重新生成。
// npm install ws
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
// ffmpeg -i your-audio.wav -ac 1 -ar 16000 -f s16le audio.pcm
// node realtime.mjs
import WebSocket from 'ws';
import { readFileSync } from 'node:fs';
import { randomUUID } from 'node:crypto';
const key = process.env.TOKENTOSEA_API_KEY;
const requestKey = randomUUID();
const taskId = randomUUID().replaceAll('-', '');
const kind = "session";
const init = {
  "type": "session.update",
  "session": {
    "modalities": [
      "text"
    ],
    "instructions": "Reply briefly to the spoken greeting."
  }
};
const ws = new WebSocket("wss://api.tokentosea.com/v1/realtime?model=qwen3.5-omni-flash-realtime-2026-03-15", {
  headers: { Authorization: 'Bearer ' + key, 'Idempotency-Key': requestKey }
});
let finishing = false;
const send = value => {
  if (ws.readyState !== WebSocket.OPEN || value.type === 'session.finish' && finishing) return;
  if (value.type === 'session.finish') finishing = true;
  ws.send(JSON.stringify({...value,...(value.type ? {event_id:'example-'+randomUUID()} : {})}));
};
let started = false;
async function produce() {
  if (started) return; started = true;
  if (kind === 'tts-session') {
    send({type:'input_text_buffer.append', text:""});
    send({type:'input_text_buffer.commit'});
    send({type:'session.finish'}); return;
  }
  const audio = readFileSync('audio.pcm'), step = 3200;
  for (let i = 0; i < audio.length && ws.readyState === WebSocket.OPEN; i += step) {
    const part = audio.subarray(i, i + step);
    if (kind === 'inference') ws.send(part);
    else send({type:'input_audio_buffer.append', audio:part.toString('base64')});
    await new Promise(resolve => setTimeout(resolve,100));
  }
  if (kind === 'inference') send({header:{action:'finish-task',task_id:taskId,streaming:'duplex'},payload:{input:{}}});
  else send({type:kind === 'translate-auto' ? 'session.finish' : 'input_audio_buffer.commit'});
}
ws.on('open',()=>send(init));
ws.on('message',raw=>{
  const event = JSON.parse(raw.toString()), type = event.type ?? event.header?.event;
  console.log(event);
  if (type === 'session.updated' || type === 'task-started') void produce();
  if (type === 'input_audio_buffer.committed' && kind === 'session') send({type:'response.create'});
  if (type === 'response.done') {
    if (['tts-session','translate-commit'].includes(kind)) send({type:'session.finish'});
    else if (kind !== 'translate-auto') ws.close();
  }
  if (['session.finished','task-finished','error','task-failed'].includes(type) || type === 'conversation.item.input_audio_transcription.completed' && kind === 'asr-session') ws.close();
});
const timer = setTimeout(()=>ws.close(),60000);
ws.on('close',async()=>{
  clearTimeout(timer);
  const result = await fetch('https://api.tokentosea.com/v1/results/'+requestKey,{headers:{Authorization:'Bearer '+key}}).then(r=>r.json());
  console.log('Result / billing status:',result);
  // 如仍在结算或处理中,继续 GET 同一地址;不要自动重新连接生成。
});
ws.on('error',error=>console.error(error.message));

能力与接口#

实时音频

下表只列出已在该型号上完成验收的接口、响应方式与输入类型;其他组合会返回 422(如 endpoint_not_verified、response_mode_not_verified、input_modality_not_verified)。

接口JSONSSE 流式WebSocket已验证输入
实时会话/v1/realtime不支持不支持支持音频

价格#

官方价格以人民币(CNY)公布,核对日期 2026-10-19。TokenToSea 按官方价格计费、不加价;调用从账户余额(美元)扣除,人民币价格按请求受理时冻结的汇率换算为美元,金额保留 6 位小数并向上取整。

计费项单价计量单位
输入 token¥3.3每百万 token
音频输入 token¥27每百万 token
输出 token¥0每百万 token
文字输出 token¥20每百万 token
多模态文字输出 token¥20每百万 token
音频输出 token¥107每百万 token

每次请求先按可能的最高用量预留金额,完成后按供应商返回的实际用量结算并退回差额。计费方式详见计费与结算。

官方价格来源

限制#

项目取值说明
上下文窗口262,144 token厂商文档
最大输出65,536 token厂商文档

响应方式:WebSocket。

  • 同一账户最多同时进行 8 个已预留或执行中的调用(平台规则)。
  • JSON 请求体不超过 48 MB;multipart 上传仅 1 个 file,不超过 25 MB。
  • 实时会话:单次最长 60 秒、最多 8 轮,排队中的输入音频不超过 4 MiB;断线后请查询结果,不要自动重连重新生成。

完整限制与错误码见用量限制和错误处理。

全部调用示例#

每个示例都包含 cURL、Python 与 Node.js 三种写法,发送完全相同的请求体,并用同一个 Idempotency-Key 查询结果。

实时会话 · WebSocket#

WS /v1/realtime?model=qwen3.5-omni-flash-realtime-2026-03-15 接口参考

  • 需要准备单声道 PCM16 音频文件 audio.pcm(可用示例中的 ffmpeg 命令转换)
  • 单次会话最多 60 秒。断线后先查询原会话状态,不会自动重连并重新生成。
// npm install ws
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
// ffmpeg -i your-audio.wav -ac 1 -ar 16000 -f s16le audio.pcm
// node realtime.mjs
import WebSocket from 'ws';
import { readFileSync } from 'node:fs';
import { randomUUID } from 'node:crypto';
const key = process.env.TOKENTOSEA_API_KEY;
const requestKey = randomUUID();
const taskId = randomUUID().replaceAll('-', '');
const kind = "session";
const init = {
  "type": "session.update",
  "session": {
    "modalities": [
      "text"
    ],
    "instructions": "Reply briefly to the spoken greeting."
  }
};
const ws = new WebSocket("wss://api.tokentosea.com/v1/realtime?model=qwen3.5-omni-flash-realtime-2026-03-15", {
  headers: { Authorization: 'Bearer ' + key, 'Idempotency-Key': requestKey }
});
let finishing = false;
const send = value => {
  if (ws.readyState !== WebSocket.OPEN || value.type === 'session.finish' && finishing) return;
  if (value.type === 'session.finish') finishing = true;
  ws.send(JSON.stringify({...value,...(value.type ? {event_id:'example-'+randomUUID()} : {})}));
};
let started = false;
async function produce() {
  if (started) return; started = true;
  if (kind === 'tts-session') {
    send({type:'input_text_buffer.append', text:""});
    send({type:'input_text_buffer.commit'});
    send({type:'session.finish'}); return;
  }
  const audio = readFileSync('audio.pcm'), step = 3200;
  for (let i = 0; i < audio.length && ws.readyState === WebSocket.OPEN; i += step) {
    const part = audio.subarray(i, i + step);
    if (kind === 'inference') ws.send(part);
    else send({type:'input_audio_buffer.append', audio:part.toString('base64')});
    await new Promise(resolve => setTimeout(resolve,100));
  }
  if (kind === 'inference') send({header:{action:'finish-task',task_id:taskId,streaming:'duplex'},payload:{input:{}}});
  else send({type:kind === 'translate-auto' ? 'session.finish' : 'input_audio_buffer.commit'});
}
ws.on('open',()=>send(init));
ws.on('message',raw=>{
  const event = JSON.parse(raw.toString()), type = event.type ?? event.header?.event;
  console.log(event);
  if (type === 'session.updated' || type === 'task-started') void produce();
  if (type === 'input_audio_buffer.committed' && kind === 'session') send({type:'response.create'});
  if (type === 'response.done') {
    if (['tts-session','translate-commit'].includes(kind)) send({type:'session.finish'});
    else if (kind !== 'translate-auto') ws.close();
  }
  if (['session.finished','task-finished','error','task-failed'].includes(type) || type === 'conversation.item.input_audio_transcription.completed' && kind === 'asr-session') ws.close();
});
const timer = setTimeout(()=>ws.close(),60000);
ws.on('close',async()=>{
  clearTimeout(timer);
  const result = await fetch('https://api.tokentosea.com/v1/results/'+requestKey,{headers:{Authorization:'Bearer '+key}}).then(r=>r.json());
  console.log('Result / billing status:',result);
  // 如仍在结算或处理中,继续 GET 同一地址;不要自动重新连接生成。
});
ws.on('error',error=>console.error(error.message));

在控制台测试#

登录后可在 模型测试 页面直接调用 qwen3.5-omni-flash-realtime-2026-03-15,查看返回结果、token 用量与实际扣费。网页调用同样从账户余额扣费。

    输入关键词搜索全部文档与模型。