通过语音 Node.js SDK 调用 Qwen-Audio-Realtime,配置会话、收发音频、处理转写和工具调用。
安装 SDK
需要 Node.js 18 或以上版本。下载 SDK 0.1.0 安装包后,在项目目录运行:
npm install ./dashscope-sdk-nodejs-0.1.0.tgz
快速开始
在控制台获取 API Key,并配置为环境变量 DASHSCOPE_API_KEY。
下载示例音频,保存为 input.mp3,并转换为 16 kHz、16-bit、单声道 PCM:
ffmpeg -i input.mp3 -f s16le -ac 1 -ar 16000 input.pcm
将以下示例保存为 example.mjs,运行 node example.mjs。
import { readFileSync, writeFileSync } from 'node:fs'
import { setTimeout as sleep } from 'node:timers/promises'
import { RealtimeClient } from 'dashscope-sdk-nodejs/realtime'
const pcm = readFileSync('input.pcm')
const client = new RealtimeClient({
apiKey: process.env.DASHSCOPE_API_KEY,
workspaceId: process.env.DASHSCOPE_WORKSPACE_ID,
baseUrl: 'dashscope-intl.aliyuncs.com',
model: 'qwen-audio-3.1-realtime-plus',
voice: 'longanqian_v3.1',
turnDetection: null,
inputTranscription: { language: 'zh' },
})
const audio = []
function fail(err) {
console.error(err.code, err.message)
process.exitCode = 1
client.close()
}
const timer = setTimeout(() => fail(new Error('Response timed out')), 60000)
client.on('close', () => clearTimeout(timer))
client.on('error', fail)
client.on('audio', chunk => audio.push(chunk))
client.on('inputTranscript', ({ transcript }) => console.log('User:', transcript))
client.on('outputTranscript', ({ transcript }) => console.log('Assistant:', transcript))
client.once('sessionUpdated', () => {
;(async () => {
for (let offset = 0; offset < pcm.length; offset += 3200) {
client.appendAudio(pcm.subarray(offset, offset + 3200))
await sleep(100)
}
client.commit()
client.createResponse()
})().catch(fail)
})
client.once('responseDone', event => {
if (event.response?.status !== 'completed') {
fail(new Error('Response status: ' + event.response?.status))
return
}
writeFileSync('output.pcm', Buffer.concat(audio))
client.close()
})
try {
await client.connect()
} catch (err) {
fail(err)
}
接口参考
构造参数
RealtimeClient 的构造参数如下。
参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
|
| 否 | API Key。默认读取 |
|
| 否 | 业务空间 ID。默认读取 |
|
| 否 | 服务域名,设置为 |
|
| 是 | 模型 ID。 |
|
| 否 | 音色 ID。省略时使用服务端默认音色。 |
|
| 否 | 系统指令,设置角色、风格等。 |
|
| 否 | 默认 |
|
| 否 | 输出模态,默认 |
|
| 否 | 历史轮数,范围 |
|
| 否 | 工具定义;应用执行工具并校验参数。 |
|
| 否 | 输入音频转写配置,如 |
|
| 否 | 扩展会话参数,如 |
|
| 否 | 建连超时(ms),默认 |
主要方法
方法 | 返回值 | 说明 |
|---|---|---|
|
| 建立连接并发送会话配置,通过 |
|
| 更新会话参数,通过 |
|
| 发送 16 kHz、16-bit、单声道 PCM 音频。 |
|
| 手动模式下提交音频缓冲区。 |
|
| 清空尚未提交的音频缓冲区。 |
|
| 请求模型生成响应。 |
|
| 取消当前响应,保留会话。 |
|
| 添加对话历史或工具结果; |
|
| 提交工具结果字符串; |
|
| 删除指定对话项。 |
|
| 查询对话项,结果通过 |
|
| 发送原始客户端事件。 |
|
| 关闭会话和 WebSocket 连接。 |
回调事件
通过 on(event, listener) 注册回调;完整事件字段见服务端事件。
事件 | 负载 | 说明 |
|---|---|---|
|
| 连接已建立、初始配置已发送。 |
|
| 会话创建或配置确认。 |
|
| 音频二进制块,可多次触发。 |
|
| 输出音频转写的增量文本。 |
|
| 输出音频的完整转写。 |
|
| 纯文本模态的增量或完整文本。 |
|
|
|
|
| 输入音频的最终转写。 |
|
| 检测到用户语音开始或停止。 |
|
| 响应开始或结束。检查 |
|
| 完整工具调用参数;由应用解析并校验 |
|
| 环境音当前或最终转写,不写入会话上下文。 |
|
| 原始服务端 JSON 消息。 |
|
| 连接或服务端错误。 |
|
| 底层连接关闭通知。 |