Qwen-Audio-Realtime-Plus
复制成功!
Realtime-Chatting
概述
Realtime-Chatting
千问实时语音大模型 是一款登顶全球权威评测的下一代实时双工语音大模型,它在全球权威第三方评测平台 Artificial Analysis Speech-to-Speech子项中取得综合排名第一。千问实时语音大模型 兼顾了模型智商与双工对话节奏,在保持流畅、自然的实时交互体验的同时,语音推理能力不打折扣;并通过并行推理和全向流式等工程优化,将端到端响应时延控制在低水平,实现"又快又聪明"的对话体验。标准版更注重高质量的回复结果。
输入
音频文本
输出
音频文本
功能
定价
- 输入:音频¥40/M tokens
- 输入:文本¥5/M tokens
- 输出:文本¥40/M tokens
- 输出:文本+音频(输出的文本不计费)¥150/M tokens
速率限制与上下文
- 最大输入4.09K
- 最大输出4.09K
- RPM每分钟请求数60
- TPM每分钟 Token 数100K
- 最大输入(思考模式)4.09K
- 最大输出(思考模式)4.09K
- 上下文8.19K
API 参考
获取 API Key复制成功!
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
import asyncio
import base64
import json
import os
import pyaudio
import websockets
API_KEY = os.environ["DASHSCOPE_API_KEY"]
URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-audio-3.0-realtime-plus"
pya = pyaudio.PyAudio()
mic = pya.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True)
spk = pya.open(format=pyaudio.paInt16, channels=1, rate=24000, output=True)
async def main():
headers = {"Authorization": f"Bearer {API_KEY}"}
async with websockets.connect(URL, additional_headers=headers) as ws:
await ws.send(json.dumps({
"type": "session.update",
"session": {
"modalities": ["text", "audio"],
"voice": "longanqian",
"turn_detection": {
"type": "server_vad",
"threshold": 0.5,
"silence_duration_ms": 500
}
}
}))
async def send_audio():
while True:
data = await asyncio.to_thread(mic.read, 3200, False)
await ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": base64.b64encode(data).decode()
}))
await asyncio.sleep(0.02)
async def recv_events():
async for msg in ws:
event = json.loads(msg)
t = event["type"]
if t == "response.audio.delta":
audio = base64.b64decode(event["delta"])
await asyncio.to_thread(spk.write, audio)
elif t == "conversation.item.input_audio_transcription.completed":
print(f"[You] {event['transcript']}")
elif t == "response.audio_transcript.done":
print(f"[AI] {event['transcript']}")
elif t == "error":
print(f"[Error] {event['error']['message']}")
await asyncio.gather(send_audio(), recv_events())
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
mic.close()
spk.close()
pya.terminate()
print("\nSession ended.")