You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整认知服务中语音关键词触发后的超时等待时长?

解决方案:调整语音助手关键词触发后的超时等待时长

核心问题分析

你之前设置的SpeechServiceConnection_InitialSilenceTimeoutMs和SpeechServiceConnection_EndSilenceTimeoutMs是针对连续语音识别的属性,在关键词识别阶段设置不会生效;同时你监听的事件不正确,应该监听KeywordRecognized事件(这是关键词被成功识别的专属触发点),而非SessionStarted/Stopped等事件。

正确配置与流程

1. 监听正确的触发事件

关键词识别成功后,会触发KeywordRecognized事件,你需要在这个事件回调里切换到连续识别,并设置超时参数。

2. 针对连续识别阶段设置超时

切换到连续识别前,给SpeechRecognizer设置初始静音超时(即等待用户下达指令的最长时间),这个设置才会生效。

3. 完整代码示例

// 初始化语音配置与识别器
var speechConfig = SpeechConfig.FromSubscription("你的订阅密钥", "你的区域");
var recognizer = new SpeechRecognizer(speechConfig);

// 加载自定义关键词模型(需提前训练生成)
var keywordModel = KeywordRecognitionModel.FromFile("你的关键词模型.table");

// 注册关键词识别成功事件
recognizer.KeywordRecognized += async (sender, args) =>
{
    // 停止关键词识别
    await recognizer.StopKeywordRecognitionAsync();

    // 设置连续识别的初始静音超时为15秒(等待用户指令的最长时间)
    recognizer.Properties.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "15000");
    // 可选:设置结束静音超时(用户说完指令后,等待多久结束识别)
    recognizer.Properties.SetProperty(PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs, "5000");

    // 注册连续识别的结果事件
    recognizer.Recognized += (recogSender, recogArgs) =>
    {
        if (recogArgs.Result.Reason == ResultReason.RecognizedSpeech)
        {
            Console.WriteLine($"识别到指令:{recogArgs.Result.Text}");
            // 处理完指令后,重新启动关键词识别,等待下一次触发
            recognizer.StartKeywordRecognitionAsync(keywordModel);
        }
    };

    // 注册连续识别取消/超时事件
    recognizer.Canceled += (cancelSender, cancelArgs) =>
    {
        if (cancelArgs.Reason == CancellationReason.EndOfStream)
        {
            Console.WriteLine("等待指令超时,重新监听关键词");
        }
        // 超时或取消后,重新启动关键词识别
        recognizer.StartKeywordRecognitionAsync(keywordModel);
    };

    // 启动连续识别,等待用户下达指令
    await recognizer.StartContinuousRecognitionAsync();
};

// 启动关键词识别,进入监听状态
await recognizer.StartKeywordRecognitionAsync(keywordModel);

关键说明

  • 关键词识别阶段的超时由模型本身或SpeechServiceConnection_KeywordDetectionSilenceTimeoutMs控制,但你核心需求是关键词触发后等待用户指令,因此重点是连续识别阶段的InitialSilenceTimeoutMs设置。
  • 必须在启动连续识别之前设置超时属性,否则不会生效。
  • 处理完指令或超时后,记得重新启动关键词识别,回到监听状态。

内容的提问来源于stack exchange,提问作者Phineas Phred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:45:10