Source: https://ailoot.ai/models/vi/qwen-audio-3-0-realtime-plus/
Canonical: https://ailoot.ai/models/vi/qwen-audio-3-0-realtime-plus/
Language: vi

# qwen-audio-3.0-realtime-plus

[Markdown](https://ailoot.ai/models/vi/qwen-audio-3-0-realtime-plus/index.md) · [JSON](https://ailoot.ai/models/vi/qwen-audio-3-0-realtime-plus/facts.json)

## [qwen-audio-3.0-realtime-plus](https://ailoot.ai/models/vi/qwen-audio-3-0-realtime-plus/)

Mô hình hội thoại giọng nói trực tiếp, nhận giọng nói và văn bản, trả lời bằng giọng nói hoặc văn bản. Được thiết kế cho nhịp giao tiếp tự nhiên và khả năng tương tác với công cụ.

- [**Ailoot · Giọng nói thời gian thực** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` `qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/vi/qwen-audio-3-0-realtime-plus/#method-0)

Về mô hình

Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.

Qwen-Audio-3.0-Realtime-Plus là mô hình của Alibaba dành cho hội thoại giọng nói trực tiếp. Mô hình nhận giọng nói và văn bản, trả về âm thanh và văn bản, đồng thời hỗ trợ trò chuyện hai chiều với việc trao đổi lượt lời tự nhiên. Âm thanh có thể được gửi và nhận từng phần, nên tương tác diễn ra ngay trong quá trình trò chuyện.

#### Khi người đối thoại đã nói hết ý

Có một số cách xác định ranh giới lượt lời: dựa trên hoạt động âm thanh, mức độ hoàn chỉnh về ý nghĩa hoặc điều khiển tường minh. Ở phía nhà sản xuất, chế độ được chọn trước khi gửi âm thanh đầu tiên; muốn đổi sau khi cuộc trò chuyện đã bắt đầu cần tạo kết nối mới. Khả năng hỗ trợ cách điều khiển này phụ thuộc vào phương thức được chọn. Chế độ ngữ nghĩa xét đến khoảng dừng và những từ đệm: một thoáng ngập ngừng không nhất thiết có nghĩa người dùng đã nói hết ý. Lời nói mới của người dùng có thể ngắt câu trả lời đang được tạo để cuộc trò chuyện tiếp tục theo lượt lời tiếp theo. Trong chế độ ngữ nghĩa, có thể định hướng nhận dạng theo mẫu giọng của người đối thoại đã chọn, giúp giảm ảnh hưởng từ giọng người khác và tiếng ồn nền.

Chỉ dẫn xác định vai trò của trợ lý và phong cách giao tiếp. Cách thể hiện giọng nói có thể xét đến sắc thái, tốc độ và cảm xúc; phiên bản 3.0 có năm giọng hệ thống và các giọng tạo theo mẫu lời nói. Mô hình hỗ trợ 11 ngôn ngữ, gồm tiếng Nga, cùng những biến thể phương ngữ tiếng Trung do nhà sản xuất nêu. Ở phía nhà sản xuất, giọng được đặt trong lần cập nhật cài đặt phiên đầu tiên; việc gửi giọng mới sau đó trong cùng cuộc trò chuyện sẽ bị bỏ qua. Các cài đặt này đòi hỏi phương thức truy cập được chọn có hỗ trợ.

#### Công cụ và lịch sử trò chuyện

Mô hình hỗ trợ gọi hàm. Mô hình tạo ra hành động cần thực hiện, ứng dụng kết nối thực thi rồi trả kết quả vào hội thoại. Nhờ đó, có thể xây dựng cuộc trò chuyện dựa trên dữ liệu thực tế và tiếp tục sau thao tác đã hoàn thành. Trợ lý giọng nói có thể sử dụng kết quả công cụ trong khi vẫn giữ ngữ cảnh cuộc trò chuyện. Các khả năng của nhà sản xuất còn gồm tìm kiếm web tích hợp, nếu phương thức đã chọn cung cấp tính năng này. Không thể đồng thời bật tìm kiếm web và gọi hàm trong cùng một phiên.

Theo mặc định, lịch sử chứa 20 lượt trò chuyện; phạm vi cho phép từ một đến 50. Giới hạn âm thanh tích lũy là 300 giây; các phần lịch sử cũ bị xóa khi vượt giới hạn. Đây là giới hạn khác với thời lượng của một lượt lời riêng lẻ: lịch sử xác định những tư liệu trước đó còn được sử dụng khi tiếp tục hội thoại.

#### Ngữ cảnh văn bản và âm thanh

Dung lượng ngữ cảnh chính thức là 40 960 token. Độ dài đầu vào tối đa là 16 384 token, đầu ra là 8192; các giới hạn đầu vào và đầu ra tương tự cũng được nêu cho chế độ suy luận, với giới hạn riêng của chuỗi suy luận là 1024 token.

Âm thanh truyền luồng dùng PCM đơn kênh, biểu diễn 16 bit: đầu vào 16 kHz, đầu ra 24 kHz. Dữ liệu văn bản và âm thanh thuộc cùng một cuộc trò chuyện. Đầu vào hình ảnh và đầu ra ảnh chưa được công bố cho mô hình cụ thể này; chuyên môn của nó là lời nói, văn bản và tương tác bằng giọng nói.

**Ailoot · Giọng nói thời gian thực** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` `qwen-audio-3.0-realtime-plus`

[`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/vi/#m=qwen-audio-3.0-realtime-plus&route=Core&caller=qwen-audio-3.0-realtime-plus&fmt=realtime)

Alibaba /`qwen-audio-3.0-realtime-plus`

### Bắt đầu

Mô hình hội thoại giọng nói trực tiếp, nhận giọng nói và văn bản, trả lời bằng giọng nói hoặc văn bản. Được thiết kế cho nhịp giao tiếp tự nhiên và khả năng tương tác với công cụ.

Đầu vào được chấp nhận

Văn bản · Âm thanh

Kết quả

Văn bản · Âm thanh

### Có trên Ailoot · đầu vào & phương thức

**Ailoot · Giọng nói thời gian thực** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus`

Đầu vào

`text`, `audio`

Đầu ra

`text`, `audio`

Định dạng đầu ra

các sự kiện phiên

| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
| --- | --- | --- | --- | --- |
| Trường`query.model` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn qwen-audio-3.0-realtime-plus | Mặc định— |
| Trường`session.input_audio_format` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn pcm16, pcm | Mặc định— |
| Trường`session.output_audio_format` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn pcm16, pcm | Mặc định— |
| Trường`session.instructions` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Giới hạn áp dụng cho: chính sách phiên đã chọn | Mặc định— |
| Trường`session.max_history_turns` | Loại`integer` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 Giới hạn áp dụng cho: chính sách phiên đã chọn | Mặc định— |
| Trường`input_audio_buffer.append.audio` | Loại`base64_string` | Yêu cầuBắt buộc | Giá trị & giới hạn Nội dung đầu vào: PCM16 đơn kênh; đầu vào 16 kHz, đầu ra 24 kHz; độ dài byte không rỗng và chẵn | Mặc định— |

Tổ hợp tư liệu đầu vào

**realtime\_text\_audio**

Tham số phương thức và vòng đời

| Tham số | Hợp đồng |
| --- | --- |
| Tham số`material_types` | Hợp đồngtext, audio |
| Tham số`required` | Hợp đồngnull |
| Tham số`optional_controls` | Hợp đồngnull |
| Tham số`content_type` | Hợp đồngWebSocket |

Vòng đời: `exact retained published method`

Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.

### Bảng giá

#### Mức phí phương thức Ailoot

Đầu vào

0,0008 US$ */ 1K*

Đầu ra

0,0064 US$ */ 1K*

Đầu vào

0,0048 US$ *mỗi phút âm thanh*

Đầu ra

0,018 US$ *mỗi phút âm thanh đầu ra*

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. [Cách hoạt động của cơ chế tạm giữ và quyết toán →](https://ailoot.ai/docs/vi/billing/reserve/)

### Ví dụ yêu cầu

#### Ailoot · Giọng nói thời gian thực

Python WebSocket · văn bảnPython WebSocket · âm thanh

```python
# Install the documented client once: python3 -m pip install websockets
import base64, json, os, time, wave
from pathlib import Path
from websockets.sync.client import connect

key = os.environ.get("AILOOT_API_KEY", "")
if not key.strip():
    raise SystemExit("Set your AILOOT_API_KEY before connecting")
file = Path(os.environ.get("AILOOT_TEXT_FILE", ""))
if not file.is_file(): raise SystemExit("Set AILOOT_TEXT_FILE to your actual UTF-8 material")
material = file.read_text(encoding="utf-8")
if not material.strip(): raise SystemExit("Text material must not be empty")
out = Path("realtime-results")
out.mkdir(exist_ok=True)
audio, texts, complete = {}, {}, []
current_response = None
pending = False
deadline = time.monotonic() + 570  # Local client bound; lower server/session limits still apply.

def receive(ws, log):
    global current_response, pending
    left = deadline - time.monotonic()
    if left <= 0:
        raise TimeoutError("Client session limit; preserve IDs and partial results, do not replay")
    event = json.loads(ws.recv(timeout=min(60, left)))
    log.write(json.dumps(event, ensure_ascii=False) + "\n")
    log.flush()
    kind = event.get("type")
    if kind == "error":
        raise RuntimeError(json.dumps(event, ensure_ascii=False))
    if kind == "response.created":
        current_response = event["response"]["id"]
    if kind in {"response.audio.delta", "response.output_audio.delta", "response.text.delta", "response.output_text.delta", "response.audio_transcript.delta", "response.output_audio_transcript.delta", "response.text.done", "response.audio_transcript.done"}:
        identity = (event["response_id"], event["item_id"], event["output_index"], event["content_index"])
        if kind in {"response.audio.delta", "response.output_audio.delta"}:
            raw = base64.b64decode(event["delta"], validate=True)
            if len(raw) % 2: raise ValueError("Output PCM16 chunk must have an even byte length")
            audio.setdefault(identity, bytearray()).extend(raw)
        elif kind.endswith(".done"):
            texts[identity] = event.get("text", event.get("transcript", ""))
        else:
            texts[identity] = texts.get(identity, "") + event["delta"]
            print(event["delta"], end="", flush=True)
    if kind == "response.done":
        response = event["response"]
        complete.append(response)
        if current_response is None: current_response = response["id"]
        if response["id"] == current_response: pending = False
    return event

def wait_for(ws, log, kind):
    while True:
        event = receive(ws, log)
        if event.get("type") == kind: return event

def send(ws, event):
    ws.send(json.dumps(event, ensure_ascii=False))

try:
    # One exact model query; no reconnect/retry loop and no provider credentials.
    with connect("wss://api.ailoot.ai/v1/realtime?model=qwen-audio-3.0-realtime-plus", additional_headers={"Authorization": "Bearer " + key}) as ws:
        with (out / "events.jsonl").open("w", encoding="utf-8") as log:
            wait_for(ws, log, "session.created")
            send(ws, {"type":"session.update", "session":{"modalities":["audio","text"], "input_audio_format":"pcm", "output_audio_format":"pcm", "turn_detection":None}})
            wait_for(ws, log, "session.updated")
            send(ws, {"type":"conversation.item.create", "item":{"type":"message", "role":"user", "content":[{"type":"input_text", "text":material}]}})
            send(ws, {"type":"response.create"})
            pending = True
            try:
                while pending: receive(ws, log)
            except KeyboardInterrupt:
                # Cancel the actual current inference, then preserve its returned status.
                send(ws, {"type":"response.cancel"})
                while pending: receive(ws, log)
    if not complete or complete[-1].get("status") != "completed":
        raise RuntimeError("Response did not complete normally; inspect saved events and status")
finally:
    manifest = {"responses":complete, "parts":[]}
    for number, identity in enumerate(dict.fromkeys(list(audio) + list(texts))):
        record = {"response_id":identity[0], "item_id":identity[1], "output_index":identity[2], "content_index":identity[3]}
        if identity in audio:
            raw = bytes(audio[identity])
            pcm_file = out / ("audio-" + str(number) + ".pcm")
            wav_file = out / ("audio-" + str(number) + ".wav")
            pcm_file.write_bytes(raw)
            with wave.open(str(wav_file), "wb") as wav:
                wav.setnchannels(1); wav.setsampwidth(2); wav.setframerate(24000); wav.writeframes(raw)
            record.update({"pcm":str(pcm_file), "wav":str(wav_file), "sample_rate_hz":24000})
        if identity in texts:
            text_file = out / ("text-" + str(number) + ".txt")
            text_file.write_text(texts[identity], encoding="utf-8")
            record["text"] = str(text_file)
        manifest["parts"].append(record)
    (out / "results.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
    print("\nSaved every received event and result in", out)
```

```python
# Install the documented client once: python3 -m pip install websockets
import base64, json, os, time, wave
from pathlib import Path
from websockets.sync.client import connect

key = os.environ.get("AILOOT_API_KEY", "")
if not key.strip():
    raise SystemExit("Set your AILOOT_API_KEY before connecting")
file = Path(os.environ.get("AILOOT_AUDIO_FILE", ""))
if not file.is_file(): raise SystemExit("Set AILOOT_AUDIO_FILE to your raw PCM16 mono 16-kHz recording")
material = file.read_bytes()
if not material or len(material) % 2 or material.startswith(b"RIFF"):
    raise SystemExit("Use nonempty signed little-endian PCM16 mono 16-kHz bytes, not a WAV header")
out = Path("realtime-results")
out.mkdir(exist_ok=True)
audio, texts, complete = {}, {}, []
current_response = None
pending = False
deadline = time.monotonic() + 570  # Local client bound; lower server/session limits still apply.

def receive(ws, log):
    global current_response, pending
    left = deadline - time.monotonic()
    if left <= 0:
        raise TimeoutError("Client session limit; preserve IDs and partial results, do not replay")
    event = json.loads(ws.recv(timeout=min(60, left)))
    log.write(json.dumps(event, ensure_ascii=False) + "\n")
    log.flush()
    kind = event.get("type")
    if kind == "error":
        raise RuntimeError(json.dumps(event, ensure_ascii=False))
    if kind == "response.created":
        current_response = event["response"]["id"]
    if kind in {"response.audio.delta", "response.output_audio.delta", "response.text.delta", "response.output_text.delta", "response.audio_transcript.delta", "response.output_audio_transcript.delta", "response.text.done", "response.audio_transcript.done"}:
        identity = (event["response_id"], event["item_id"], event["output_index"], event["content_index"])
        if kind in {"response.audio.delta", "response.output_audio.delta"}:
            raw = base64.b64decode(event["delta"], validate=True)
            if len(raw) % 2: raise ValueError("Output PCM16 chunk must have an even byte length")
            audio.setdefault(identity, bytearray()).extend(raw)
        elif kind.endswith(".done"):
            texts[identity] = event.get("text", event.get("transcript", ""))
        else:
            texts[identity] = texts.get(identity, "") + event["delta"]
            print(event["delta"], end="", flush=True)
    if kind == "response.done":
        response = event["response"]
        complete.append(response)
        if current_response is None: current_response = response["id"]
        if response["id"] == current_response: pending = False
    return event

def wait_for(ws, log, kind):
    while True:
        event = receive(ws, log)
        if event.get("type") == kind: return event

def send(ws, event):
    ws.send(json.dumps(event, ensure_ascii=False))

try:
    # One exact model query; no reconnect/retry loop and no provider credentials.
    with connect("wss://api.ailoot.ai/v1/realtime?model=qwen-audio-3.0-realtime-plus", additional_headers={"Authorization": "Bearer " + key}) as ws:
        with (out / "events.jsonl").open("w", encoding="utf-8") as log:
            wait_for(ws, log, "session.created")
            send(ws, {"type":"session.update", "session":{"modalities":["audio","text"], "input_audio_format":"pcm", "output_audio_format":"pcm", "turn_detection":None}})
            wait_for(ws, log, "session.updated")
            for offset in range(0, len(material), 640):
                send(ws, {"type":"input_audio_buffer.append", "audio":base64.b64encode(material[offset:offset+640]).decode("ascii")})
                time.sleep(0.02)
            send(ws, {"type":"input_audio_buffer.commit"})
            wait_for(ws, log, "input_audio_buffer.committed")
            send(ws, {"type":"response.create"})
            pending = True
            try:
                while pending: receive(ws, log)
            except KeyboardInterrupt:
                # Cancel the actual current inference, then preserve its returned status.
                send(ws, {"type":"response.cancel"})
                while pending: receive(ws, log)
    if not complete or complete[-1].get("status") != "completed":
        raise RuntimeError("Response did not complete normally; inspect saved events and status")
finally:
    manifest = {"responses":complete, "parts":[]}
    for number, identity in enumerate(dict.fromkeys(list(audio) + list(texts))):
        record = {"response_id":identity[0], "item_id":identity[1], "output_index":identity[2], "content_index":identity[3]}
        if identity in audio:
            raw = bytes(audio[identity])
            pcm_file = out / ("audio-" + str(number) + ".pcm")
            wav_file = out / ("audio-" + str(number) + ".wav")
            pcm_file.write_bytes(raw)
            with wave.open(str(wav_file), "wb") as wav:
                wav.setnchannels(1); wav.setsampwidth(2); wav.setframerate(24000); wav.writeframes(raw)
            record.update({"pcm":str(pcm_file), "wav":str(wav_file), "sample_rate_hz":24000})
        if identity in texts:
            text_file = out / ("text-" + str(number) + ".txt")
            text_file.write_text(texts[identity], encoding="utf-8")
            record["text"] = str(text_file)
        manifest["parts"].append(record)
    (out / "results.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
    print("\nSaved every received event and result in", out)
```

### Nhận và lưu kết quả

#### Ailoot · Giọng nói thời gian thực

các sự kiện phiên

##### Lưu tất cả kết quả đã hoàn tất

Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.

Ghép mọi phần âm thanh tăng dần được trả về và kết quả văn bản/sự kiện cho từng ID phản hồi thực tế.

##### Nếu cần kiểm tra phản hồi gốc

Giữ lại các ID phiên/phản hồi/sự kiện thực tế và bằng chứng xác nhận.

Lỗi và bước tiếp theo

| Phản hồi | Điều kiện | Bước tiếp theo |
| --- | --- | --- |
| Phản hồi426 · `invalid_request_error` | Điều kiệnKhông nâng cấp kết nối WebSocket | Bước tiếp theoDùng ứng dụng khách WebSocket với Upgrade: websocket. |

### Bí danh

#### Bí danh mô hình

**Ailoot** [`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/vi/#m=qwen-audio-3.0-realtime-plus&route=Core&caller=qwen-audio-3.0-realtime-plus&fmt=realtime)

#### Bí danh đường dẫn phương thức

Dùng các đường dẫn phương thức hiển thị ở trên.

#### ID gọi liên quan

[`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/vi/#m=qwen-audio-3.0-realtime-plus&route=Core&caller=qwen-audio-3.0-realtime-plus&fmt=realtime)

FAQ · qwen-audio-3.0-realtime-plus

Có những đầu vào và kết quả nào?

`GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` · `qwen-audio-3.0-realtime-plus`: `text`, `audio` → `text`, `audio`

Áp dụng những giới hạn nào?

`GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` · `qwen-audio-3.0-realtime-plus`: `session.max_history_turns.minimum`: `1`

Kết nối Ailoot với Claude Code, OpenCode, Hermes hoặc ứng dụng của bạn.

## Công ty và danh mục dự án của công ty

Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.

## Mua token với giá ưu đãi.

Ưu đãi thuê bao cho nhu cầu thường xuyên. Mã khuyến mãi giảm đến 50% khi mua token.

Thuê bao

Chọn gói ưu đãi cho các yêu cầu thường xuyên của bạn.

Mã giảm đến 50%

Nhập mã khi mua. Giá được tính lại theo chương trình đang áp dụng.

Chi phí trong lịch sử

Mô hình, token và số tiền được lưu cho mỗi yêu cầu.

[Chọn gói thuê bao](https://ailoot.ai/docs/vi/billing/subscriptions/) · [Xem giá mô hình](https://ailoot.ai/models/vi/)

## Kết nối API vào sản phẩm bạn đang bán.

SaaS, ứng dụng và bot — theo đề nghị giao kết chính thức và thỏa thuận cấp phép Ailoot. Muốn bán lại, hãy yêu cầu giấy phép bán lại.

Ứng dụng thương mại

Tích hợp tạo văn bản, ảnh, video và âm thanh vào các tính năng trả phí của dịch vụ.

Giấy phép bán lại

Gửi mô tả dự án và cách cung cấp quyền truy cập. Yêu cầu điều khoản sử dụng và bán lại bằng văn bản.

Tài liệu trên website

Đề nghị giao kết, thỏa thuận cấp phép và chính sách xử lý dữ liệu có sẵn trước khi kết nối.

[Yêu cầu giấy phép bán lại](mailto:support@ailoot.ai) · [Đề nghị giao kết và thỏa thuận cấp phép](https://ailoot.ai/legal/offer?lang=vi)

## Ailoot · Công ty và danh mục dự án của công ty





Ailoot dựa trên kinh nghiệm vận hành tích lũy, cơ sở khách hàng lớn, dịch vụ ổn định và việc kiểm soát KPI liên tục.





Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.





Ailoot áp dụng kinh nghiệm vận hành này để cung cấp quyền truy cập API vào các tính năng AI trong sản phẩm của khách hàng, tác tử, ứng dụng và quy trình tự động hóa.
