全部產品
Search
文件中心

Alibaba Cloud Model Studio:提升識別準確率

更新時間:Sep 29, 2026

阿里雲百鍊語音辨識提供先行編譯熱詞、即時熱詞和上下文增強三種方式,提升專業術語、產品名稱等特定詞彙的識別準確率。本文介紹三種方式的適用範圍與使用方法。

重要僅主業務空間支援熱詞功能,子業務空間暫不支援。

概述

部分業務詞彙(如產品名、專有名詞、行業術語)不在模型通用詞表中,識別準確率較低。阿里雲百鍊語音辨識提供先行編譯熱詞、即時熱詞和上下文增強三種方式,提升這類詞彙的識別效果。

先行編譯熱詞、即時熱詞與上下文增強區別

自訂熱詞分為先行編譯熱詞和即時熱詞兩種。下表對比三種方式的差異,適用模型和介面不同:

維度

先行編譯熱詞

即時熱詞

上下文增強

原理

預先建立帶權重的詞彙表,模型在解碼時提升匹配機率

請求中直接攜帶帶權重的熱詞,模型在解碼時提升匹配機率

傳入對話歷史或領域語料,模型利用上下文修正識別結果

適用模型

參見支援的模型與地區

參見支援的模型與地區

參見支援的模型與地區

適用情境

詞彙已知且相對穩定,需要跨請求複用同一詞表(如產品名、醫學術語)

臨時性、會話層級的熱詞,無需跨請求複用(如單次會話中的人名、臨時術語)

詞彙隨對話動態變化,或需要通過上下文協助模型理解專有名詞(如會議紀要中的參會人、客服對話中的業務術語)

配置方式

預先建立熱詞列表,調用時傳入列表 ID

請求中直接傳入 vocabulary 索引值對,無需建立列表

每次請求時傳入對話歷史或領域文本。非即時通過 input.messages,即時通過 input.context

前提條件

先行編譯熱詞

預先建立熱詞列表並獲得列表 ID,識別時傳入該 ID。適用於詞彙已知且相對穩定、需要跨請求複用同一詞表的情境(如產品名、醫學術語)。

支援的模型與地區

新加坡

調用以下模型時,請選擇新加坡地區的API Key:

  • 即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime:fun-asr-realtime、fun-asr-realtime-2025-11-07
  • 非即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash:fun-asr-flash-2026-06-15
    • Fun-ASR:fun-asr、fun-asr-2025-11-07、fun-asr-2025-08-25、fun-asr-mtl、fun-asr-mtl-2025-08-25

華北2(北京)

調用以下模型時,請選擇北京地區的API Key:

  • 即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime:fun-asr-realtime、fun-asr-realtime-2025-11-07、fun-asr-realtime-2025-09-15、fun-asr-flash-8k-realtime、fun-asr-flash-8k-realtime-2026-01-28
    • Paraformer:paraformer-realtime-v2、paraformer-realtime-8k-v2
  • 非即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash:fun-asr-flash-2026-06-15
    • Fun-ASR:fun-asr、fun-asr-2025-11-07、fun-asr-2025-08-25、fun-asr-mtl、fun-asr-mtl-2025-08-25
    • Paraformer:paraformer-v2、paraformer-8k-v2

快速開始

工作流程

先建立熱詞列表,再在語音辨識時引用其 ID:

  1. 建立熱詞列表。

    調用建立熱詞列表介面,必須指定 target_model(Java 中為 targetModel),表明該列表所屬的語音辨識模型。

    如已有熱詞列表(可通過查詢所有熱詞列表介面查看),跳過此步。

  2. 調用語音辨識介面並傳入熱詞列表 ID。

    語音辨識使用的模型必須與建立時指定的 target_model(Java 中為 targetModel)一致,否則熱詞不生效。

範例程式碼

完整流程樣本:建立熱詞列表 → 調用語音辨識 → 刪除列表。

說明熱詞管理 API 與語音辨識 API 必須使用同一帳號,否則識別介面無法訪問對應的熱詞列表。

import dashscope
from dashscope.audio.asr import *
import os

# 北京與新加坡地區的 API Key 不同。擷取 API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 未配置環境變數時,將下行替換為:dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# 以下為新加坡地區的配置,調用時請將"{WorkspaceId}"替換為真實的業務空間ID,各地區的配置不同。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# 以下為新加坡地區的配置,調用時請將"{WorkspaceId}"替換為真實的業務空間ID,各地區的配置不同。
dashscope.base_websocket_api_url = 'wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'
prefix = 'testpfx'
target_model = "qwen-audio-3.0-asr-flash-streaming"

my_vocabulary = [
    {"text": "語音實驗室", "weight": 4}
]

service = VocabularyService()
vocabulary_id = service.create_vocabulary(
      prefix=prefix,
      target_model=target_model,
      vocabulary=my_vocabulary)

try:
    if service.query_vocabulary(vocabulary_id)['status'] == 'OK':
        recognition = Recognition(model=target_model,
                              format='wav',
                              sample_rate=16000,
                              callback=None)
        result = recognition.call('{YOUR_AUDIO_FILE}', vocabulary_id=vocabulary_id)
        print(result.output)
finally:
    # 無論識別成功與否都刪除熱詞列表,避免佔用配額
    service.delete_vocabulary(vocabulary_id)
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.vocabulary.Vocabulary;
import com.alibaba.dashscope.audio.asr.vocabulary.VocabularyService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Main {
    // 北京與新加坡地區的 API Key 不同。擷取 API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // 未配置環境變數時,將下行替換為:public static String apiKey = "sk-xxx"
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void main(String[] args) throws NoApiKeyException, InputRequiredException {
        // 以下為新加坡地區的配置,調用時請將"{WorkspaceId}"替換為真實的業務空間ID,各地區的配置不同。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // 以下為新加坡地區的配置,調用時請將"{WorkspaceId}"替換為真實的業務空間ID,各地區的配置不同。
        Constants.baseWebsocketApiUrl = "wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference";

        String targetModel = "qwen-audio-3.0-asr-flash-streaming";

        JsonArray vocabularyJson = new JsonArray();
        List<Hotword> wordList = new ArrayList<>();
        wordList.add(new Hotword("語音實驗室", 4));

        for (Hotword word : wordList) {
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("text", word.text);
            jsonObject.addProperty("weight", word.weight);
            vocabularyJson.add(jsonObject);
        }

        VocabularyService service = new VocabularyService(apiKey);
        Vocabulary vocabulary = service.createVocabulary(targetModel, "testpfx", vocabularyJson);

        try {
            if ("OK".equals(service.queryVocabulary(vocabulary.getVocabularyId()).getStatus())) {
                Recognition recognizer = new Recognition();
                RecognitionParam param =
                        RecognitionParam.builder()
                                .model(targetModel)
                                .apiKey(apiKey)
                                .format("wav")
                                .sampleRate(16000)
                                .vocabularyId(vocabulary.getVocabularyId())
                                .build();

                try {
                    System.out.println("識別結果:" + recognizer.call(param, new File("{YOUR_AUDIO_FILE}")));
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    // 關閉 WebSocket 串連
                    recognizer.getDuplexApi().close(1000, "bye");
                }
            }
        } finally {
            // 無論識別成功與否都刪除熱詞列表,避免佔用配額
            service.deleteVocabulary(vocabulary.getVocabularyId());
        }
        System.exit(0);
    }
}

class Hotword {
    String text;
    int weight;

    public Hotword(String text, int weight) {
        this.text = text;
        this.weight = weight;
    }
}

熱詞格式

熱詞以 JSON 數組提交,數組元素定義單個熱詞及其屬性。

樣本:提升電影名稱的識別率。

[
    {"text": "賽德克巴萊", "weight": 4, "lang": "zh"},
    {"text": "Seediq Bale", "weight": 4, "lang": "en"},
    {"text": "夏洛特煩惱", "weight": 4, "lang": "zh"},
    {"text": "Goodbye Mr. Loser", "weight": 4, "lang": "en"},
    {"text": "闕裡人家", "weight": 4, "lang": "zh"},
    {"text": "Confucius' Family", "weight": 4, "lang": "en"}
]

欄位說明:

欄位

類型

是否必填

說明

text

string

是

熱詞文本,需為實際詞語而非任一字元組合,且語言必須在所選模型的支援範圍內。長度限制參見熱詞文本規範。

weight

int

是

熱詞權重。取值範圍 [1, 5],推薦 4。權重越高,模型越傾向於輸出該詞。使用 Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、Qwen-Audio-3.0-ASR-Flash 系列模型時,還支援 weight=50(超級熱詞),召回率大幅提升,但超級熱詞數量最多不超過 50 個。調優參見調整熱詞權重。

lang

string

否

語言代碼,限定該熱詞作用的語種。語種未知時可省略。

注意:language_hints 是語音辨識介面的參數(非熱詞介面),用於聲明音頻語種。一旦設定,僅匹配 language_hints 所指定語種的熱詞生效,其他語種的熱詞將被忽略。

即時熱詞

即時熱詞在識別請求中直接傳入 vocabulary 索引值對,本質上也是一組帶權重的熱詞(與先行編譯熱詞的詞表內容對應),區別僅在於隨請求內聯傳入、無需預先建立熱詞列表。適用於臨時性、會話層級的熱詞最佳化。

重要即時熱詞僅支援 Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans 和 Qwen-Audio-3.0-ASR-Flash 系列模型。對於這些模型,同時配置先行編譯熱詞和即時熱詞時,系統會合并兩類熱詞;合并後超過 2,000 個時,隨機播放 2,000 個使用。

支援的模型與地區

新加坡

調用以下模型時,請選擇新加坡地區的API Key:

  • 即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
  • 非即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash

華北2(北京)

調用以下模型時,請選擇北京地區的API Key:

  • 即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
  • 非即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash

快速開始

在語音辨識請求的 parameters 中傳入 vocabulary,無需建立熱詞列表。各介面的詳細用法參見語音辨識下的 API 參考。

樣本(非即時語音辨識):

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
     --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
     --header "Content-Type: application/json" \
     --header "X-DashScope-SSE: disable" \
     --data '{
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav"
                        }
                    }
                ]
            }
        ]
    },
    "parameters": {
        "format": "wav",
        "sample_rate": 16000,
        "vocabulary": {"張三": 5, "李四": 5}
    }
}'

樣本使用華北2(北京)地區的 DashScope 網域名稱;也可替換為業務空間專屬網域名稱(形如 https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com,與先行編譯熱詞樣本一致),無需修改其他請求內容。

熱詞格式

即時熱詞以 JSON 對象(索引值對)傳入:鍵為熱詞文本(string),值為熱詞權重(integer)。熱詞文本規範參見熱詞文本規範。

樣本:

{"張三": 5, "李四": 5, "語音實驗室": 50}

權重取值範圍為 [1, 5] 或 50:取 [1, 5] 為普通熱詞,值越大偏好越強;取 50 為超級熱詞,召回率大幅提升,但超級熱詞數量最多不超過 50 個。權重調優參見調整熱詞權重。

熱詞調優與規範

以下熱詞文本規範與調優建議對先行編譯熱詞和即時熱詞均適用。

熱詞文本規範

熱詞文本必須為實際詞語,長度限制如下:

  • 含非 ASCII 字元時:總字元數(漢字、日文假名、韓文諺文、西裡爾字母等非 ASCII 字元與 ASCII 字元合計)不超過 15 個。

    樣本:

    • ✅ "厄洛替尼鹽酸鹽"(7 字元)
    • ✅ "EGFR抑製劑"(7 字元,其中 EGFR 占 4 個 ASCII 字元)
    • ✅ "こんにちは"(5 字元)
    • ✅ "Фенибут Белфарм"(15 字元,含中間空格)
    • ❌ "Клофелин Белмедпрепараты"(24 字元)
  • 純 ASCII 字元時:按空格切分後的片段數不超過 7 個。

    樣本:

    • ✅ "Exothermic reaction" → 2 個片段
    • ✅ "Human immunodeficiency virus type 1" → 5 個片段
    • ❌ "The effect of temperature variations on enzyme activity in biochemical reactions" → 11 個片段

調整熱詞權重

權重控制模型對熱詞的偏好程度,合理設定可在提升目標詞識別率的同時避免誤識別。

權重

效果

適用情境

1~2

輕微偏好

熱詞與常用詞發音相似,需避免過度糾偏

3~4

明顯偏好(推薦)

大多數情境的最佳起始值

5

強制偏好

該詞在音頻中頻繁出現且幾乎不會與其他詞混淆。權重過高可能導致發音相近的其他詞被錯誤識別為熱詞。

建議從 weight=4 起測,根據識別效果逐步調整。

超級熱詞(weight=50):先行編譯熱詞和即時熱詞均支援超級熱詞,但僅 Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、Qwen-Audio-3.0-ASR-Flash 系列模型支援。設為 50 時召回率大幅提升,但超級熱詞數量最多不超過 50 個。

設計建議

  • 按情境分組:為不同業務情境分別組織熱詞(如醫學術語、產品名稱各成一組),便於維護與複用。先行編譯熱詞可為每個情境建立獨立的熱詞列表。
  • 多語種混合(先行編譯熱詞):同一熱詞列表可混入不同語種的熱詞,通過 lang 欄位區分。語音辨識時指定 language_hints 後,僅匹配該語種的熱詞生效。
  • 定期清理(先行編譯熱詞):刪除不再使用的熱詞列表以釋放額度(每帳號上限 10 個)。

熱詞限制與計費

限制項

說明

熱詞列表數量(先行編譯熱詞)

熱詞列表是先行編譯熱詞預先建立的持久化詞表(對應一個 vocabulary_id)。每帳號最多 10 個,所有模型共用。

熱詞數量上限(先行編譯熱詞 / 即時熱詞)

熱詞數量上限取決於語音辨識所用的模型:

  • Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、Qwen-Audio-3.0-ASR-Flash 系列:最多 2000 個。

  • Fun-ASR-Realtime、Fun-ASR-Flash、Fun-ASR 系列主要版本模型:最多 2000 個。

  • Fun-ASR-Realtime、Fun-ASR-Flash、Fun-ASR 系列其他模型、Paraformer 系列:最多 500 個。

其中,先行編譯熱詞按單個熱詞列表計數;即時熱詞按單次請求傳入的熱詞數計數。

超級熱詞數量(先行編譯熱詞 / 即時熱詞)

權重為 50 的超級熱詞最多 50 個。

計費

先行編譯熱詞與即時熱詞均免費。

上下文增強

支援的模型與地區

新加坡

調用以下模型時,請選擇新加坡地區的API Key:

  • 即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime:fun-asr-realtime、fun-asr-realtime-2025-11-07
  • 非即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash:fun-asr-flash-2026-06-15

華北2(北京)

調用以下模型時,請選擇北京地區的API Key:

  • 即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime:fun-asr-realtime、fun-asr-realtime-2025-11-07
  • 非即時語音辨識:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash:fun-asr-flash-2026-06-15

快速開始

上下文增強無需預先建立資源,在語音辨識請求中直接傳入上下文參數即可生效:

  • 非即時語音辨識:在 HTTP 要求的 input.messages 中傳入上下文訊息,置於音頻訊息之前。
  • 即時語音辨識:在 WebSocket run-task 事件的 input.context 中傳入上下文訊息;任務執行中如需更新,發送 continue-task 事件。DashScope SDK 已封裝該協議,通過參數直接傳入即可。

使用情境:通過傳入對話歷史或領域術語作為上下文,可顯著提升專有詞彙(人名、地名、產品術語等)的轉寫準確率。上下文既可以是多輪對話歷史(前幾輪的識別結果與大模型回複),也可以只是一組領域術語或詞表。

重要

  • 訊息條數限制:引擎最多保留最近 5 輪的上下文內容。僅傳入領域術語或詞表時通常只需 1 條訊息,不受此限制影響。超出時,早期訊息會被自動忽略,不會報錯。
  • 文本長度限制:每輪內容相關的文本總長度(同一輪中所有 user 和 assistant 訊息的 text 欄位長度之和)不超過 400 個字元(按字元數計算,每個字元計為 1,包括字母、漢字、數字、空格和標點等)。超出部分會從末尾截斷,不會返回錯誤。多輪上下文中,每輪獨立計算,互不影響。
  • 上下文機制:上下文主要通過詞表匹配方式生效,text 欄位中需包含音頻裡待識別的原詞(如“Kubernetes”、“Bulge Bracket”)。僅傳入語義相關但不包含原詞的描述,糾正效果有限。

非即時語音辨識

通過 input.messages 傳入上下文。其中 user 角色 + input_text 類型用於傳入前幾輪的識別結果或領域相關的詞表,assistant 角色用於傳入前幾輪大模型的回複內容(可選)。上下文訊息置於音頻訊息之前,詳見非即時語音辨識(Qwen-Audio-3.0-ASR-Flash/Fun-ASR-Flash)。

傳入前幾輪的識別結果(user / input_text)和大模型回複(assistant / text)。若只需傳入領域術語或詞表,省略其中的對話歷史(assistant 訊息)即可。

{
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_text",
                        "text": "前輪使用者語音的識別結果"
                    }
                ]
            },
            {
                "role": "assistant",
                "content": [
                    {
                        "type": "text",
                        "text": "前輪大模型的回複內容"
                    }
                ]
            },
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "當前待識別的音頻URL或Base64"
                        }
                    }
                ]
            }
        ]
    },
    "parameters": {}
}

即時語音辨識

即時語音辨識通過 input.context 傳入上下文,音頻通過 WebSocket 二進位幀發送。任務執行中如需更新上下文,發送 continue-task 事件。WebSocket 事件格式詳見Qwen-Audio-ASR-Streaming 用戶端事件 / Fun-ASR-Realtime 用戶端事件,DashScope SDK 參數詳見Qwen-Audio-ASR-Streaming Python SDK / Fun-ASR-Realtime Python SDK(≥ 1.25.23)和Qwen-Audio-ASR-Streaming Java SDK / Fun-ASR-Realtime Java SDK(≥ 2.22.23)。

多輪對話上下文

傳入前幾輪的識別結果(user / input_text)和大模型回複(assistant / text)。若只需傳入領域術語或詞表,省略其中的對話歷史(assistant 訊息)即可。

{
    "header": {
        "action": "run-task",
        "task_id": "2bf83b9a-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "streaming": "duplex"
    },
    "payload": {
        "task_group": "audio",
        "task": "asr",
        "function": "recognition",
        "model": "qwen-audio-3.0-asr-flash-streaming",
        "parameters": {
            "format": "pcm",
            "sample_rate": 16000
        },
        "input": {
            "context": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "input_text",
                            "text": "前輪使用者語音的識別結果"
                        }
                    ]
                },
                {
                    "role": "assistant",
                    "content": [
                        {
                            "type": "text",
                            "text": "前輪大模型的回複內容"
                        }
                    ]
                }
            ]
        }
    }
}
from dashscope.audio.asr import Recognition

recognition = Recognition(
    model='qwen-audio-3.0-asr-flash-streaming',
    format='wav',
    sample_rate=16000,
    callback=None)

context = {
    "context": [
        {
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "前輪使用者語音的識別結果"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "前輪大模型的回複內容"
                }
            ]
        }
    ]
}

result = recognition.call('audio.wav', raw_input=context)
print(result.output)
Map<String, Object> userContent = new HashMap<>();
userContent.put("type", "input_text");
userContent.put("text", "前輪使用者語音的識別結果");

Map<String, Object> assistantContent = new HashMap<>();
assistantContent.put("type", "text");
assistantContent.put("text", "前輪大模型的回複內容");

Map<String, Object> userMessage = new HashMap<>();
userMessage.put("role", "user");
userMessage.put("content", Arrays.asList(userContent));

Map<String, Object> assistantMessage = new HashMap<>();
assistantMessage.put("role", "assistant");
assistantMessage.put("content", Arrays.asList(assistantContent));

Map<String, Object> input = new HashMap<>();
input.put("context", Arrays.asList(userMessage, assistantMessage));

RecognitionParam param = RecognitionParam.builder()
        .model("qwen-audio-3.0-asr-flash-streaming")
        .format("wav")
        .sampleRate(16000)
        .input(input)
        .build();

Recognition recognizer = new Recognition();
System.out.println(recognizer.call(param, new File("audio.wav")));
recognizer.getDuplexApi().close(1000, "bye");

效果樣本

內容相關的 text 欄位內容格式靈活,可以是詞表、自然語言段落或兩者的混合,對無關文本的容錯性極高。

某段音頻正確識別結果應該為“投行圈內部的那些黑話,你瞭解哪些?首先,外資九大投行,Bulge Bracket,BB ...”。

不使用上下文增強

未使用上下文增強時,部分投行公司名稱識別有誤,例如 “Bird Rock” 正確應為 “Bulge Bracket”。

識別結果:“投行圈內部的那些黑話,你瞭解哪些?首先,外資九大投行,Bird Rock,BB ...”

使用上下文增強

使用上下文增強,對投行公司名稱識別正確。

識別結果:“投行圈內部的那些黑話,你瞭解哪些?首先,外資九大投行,Bulge Bracket,BB ...”

上述樣本中,在內容相關的 text 欄位中加入包含“Bulge Bracket”等專業術語的詞表或自然語言段落即可實現增強效果。

API參考

常見問題

Q:設定熱詞後識別效果沒有改善?

依次排查:

  1. 模型是否匹配(先行編譯熱詞):建立熱詞列表時指定的 target_model 必須與語音辨識介面使用的模型一致。兩者不一致時介面不會報錯,識別仍能返回結果,但熱詞不生效;識別結果未命中預期熱詞時應優先排查此項。
  2. 模型是否支援
  3. 權重是否合適:將權重從 4 提到 5 觀察效果。如果出現發音相近的其他詞被誤識別為熱詞,回調到 4。
  4. 熱詞列表狀態(先行編譯熱詞):通過查詢介面確認 status 為 OK。

Q:先行編譯熱詞在即時和非即時語音辨識中的使用方式是否相同?

建立方式相同,調用時存在差異:

  • 即時語音辨識:在 Recognition 或 WebSocket 串連參數中傳入 vocabulary_id。
  • 錄音檔案識別:在 Transcription 請求參數中傳入 vocabulary_id。

兩種情境的 target_model 都必須與實際調用的語音辨識模型一致。即時熱詞無需建立列表和指定 target_model,直接在請求參數中傳入 vocabulary 索引值對即可。對於支援即時熱詞的 Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans 和 Qwen-Audio-3.0-ASR-Flash 系列模型,同時配置先行編譯熱詞和即時熱詞時,系統會合并兩類熱詞;合并後超過 2,000 個時,隨機播放 2,000 個使用。

Q:除了熱詞和上下文增強,還有哪些方式可以提升識別準確率?

還可從以下方向最佳化:

  • 音頻品質:採樣率匹配模型要求(16 kHz 或 8 kHz),降低背景雜訊。
  • 選擇合適的模型:不同情境適用模型不同,詳見語音辨識選型指南。
  • 指定語種:通過 language_hints 聲明音頻語種,可提升單語種情境的準確率。