智能语音对话模块

百度搭载业界领先的需求理解、对话控制及底层的自然语言处理、知识挖掘等核心技术,为开发者提供了丰富的预置技能,一键获取即可拥对话能力

1.整体介绍

2. 主要功能对应数资及脚本

脚本或dll Prefab 说明 功能示意图
VoiceCheck 语音助手能力封装脚本(单例)
Hotfix.Standard.UI.VoiceInteractionWindow PC,Mobile ,VR VoiceInteractionPanel.prefab 语音助手面板

3.客户端接口

3.1 语音助手模块

组件:Baidu.Meta.MCK.SpeechAsistant

接口 功能
OpenWindow 打开语音助手

3.2 智能语音对话模块

组件:Baidu.Meta.MCK.AIChat

脚本 功能
Baidu.Meta.MCK.AIChat.Protocol.IAIChatService 智能对话服务,用于创建各种能力会话
Baidu.Meta.MCK.AIChat.Protocol.IAsrStandardSession 短语音识别会话,用于一次性识别一段语音内容
Baidu.Meta.MCK.AIChat.Protocol.IAsrRealtimeSession 实时语音识别会话
Baidu.Meta.MCK.AIChat.Protocol.ITtsSession 语音合成会话
Baidu.Meta.MCK.AIChat.Protocol.ISmartChatSession 智能聊天会话,支持对UNIT、文心一言、文心一格等多种对话后集能力进行编排

3.3 语音唤醒模块

组件:Baidu.Meta.MCK.Wakeup

脚本 功能
Baidu.Meta.MCK.Wakeup.Protocol.IWakeupService 语音唤醒服务

4.智能对话服务调用方式

智能对话服务可以通过ServiceManager.Get获取IAIChatService实例使用,用于创建各种独立能力会话
接口清单:

接口 说明
NewAsrStandardSession 创建短语音识别会话
NewAsrRealtimeSession 创建实时语音识别会话
NewTtsSession 创建语音合成会话
NewUnitChatSession 创建UNIT对话会话
NewSmartChatSession 创建智能聊天会话

会话公共属性:

属性 说明
OnResult 会话结果回调

会话公共接口:

接口 说明
Start 开始会话,会话开始前无法进行操作
Stop 结束会话,会话结束后无法继续操作

4.1 短语音识别会话

通过IAIChatService.NewAsrStandardSession获取IAsrStandardSession实例使用
接口清单:

接口 说明
Asr 请求短语音识别,在同一个会话实例中,在前一次识别结束(完成/取消)前无法发起下一次请求
CancelAsr 取消前一次识别

识别结果字段:

字段 说明
Result 识别结果文字内容
EndOfSentence 当前句子是否结束,短语音识别必定为true
EndOfAsr 本次识别是否结束,短语音识别你定位true

短语音识别使用范例

var session = ServiceManager.Get<IAsrStandardSession>().NewAsrStandardSession();
session.OnResult += result =>
{
    if (result.Error != null)
    {
        // 识别错误
    }
    else
    {
        // 识别完成
        var asrResult = result.Data.Result;
    }
};

// 开始会话
session.Start();

// 识别
byte[] data = ...;
session.Asr(data, data.Length);

// 取消识别
session.CancelAsr();

// 结束会话
session.Stop();

4.2 实时语音识别会话

通过IAIChatService.NewAsrStandardSession获取IAsrRealtimeSession实例使用

属性:

属性 说明
Lmid 自训练模型ID,选填

接口清单:

接口 说明
WriteAudioData 写入音频数据,20-200ms,建议160ms
FinishAudio 停止识别

识别结果字段:

字段 说明
Result 当前识别结果文字内容
EndOfSentence 当前句子是否结束
EndOfAsr 本次识别是否结束

实时语音识别使用范例

var session = ServiceManager.Get<IAsrStandardSession>().NewAsrRealtimeSession();
session.Lmid = xxx;
session.OnResult += result =>
{
    if (result.Error != null)
    {
        // 识别错误
    }
    else
    {
        // 识别成功
        var asrResult = result.Data.Result; // 识别内容
        var endOfSentence = result.Data.EndOfSentence; // 是否为一句话结束
        var endOfAsr = result.Data.EndOfAsr; // 是否为本次识别结束
    }
};

// 开始会话
session.Start();

// 识别
session.WriteAudioData(data, data.Length);
session.WriteAudioData(data, data.Length);
session.WriteAudioData(data, data.Length);
...

// 停止识别
session.FinishAudio();

// 结束会话
session.Stop();

4.3 语音合成会话

通过IAIChatService.NewTtsSession获取ITtsSession实例使用
接口清单:

接口 说明
Tts 请求语音合成,在同一个会话实例中,在前一次合成结束(完成/取消)前无法发起下一次请求
CancelTts 取消前一次合成

识别结果字段:

字段 说明
Data 分片合成结果
Index 分片序号,为负表示为最后一个分片

实时语音识别使用范例

var session = ServiceManager.Get<IAsrStandardSession>().NewTtsSession();
session.OnResult += result =>
{
    if (result.Error != null)
    {
        // 合成错误
    }
    else
    {
        // 识别成功
        var ttsResult = result.Data.Data; // 分片合成内容
        var index = result.Data.Index; // 分片序号
        
        if (index < 0) {
            // 合成完成
        }
    }
};

// 开始会话
session.Start();

// 合成
string text = ...;
session.Tts(text, TtsPronouncer.DUXIAOLU, 5, 5, 5, TtsFormat.MP3, true);

// 取消合成
session.CancelTts();

// 结束会话
session.Stop();

4.4 智能聊天会话

通过IAIChatService.NewSmartChatSession获取ISmartChatSession实例使用
属性:

属性 说明
SkillId 技能ID,必填
SessionId 内部会话ID,选填
CustomUrl 自定义对话接口URL,可以根据业务定制,选填

接口清单:

接口 说明
TextChat 请求对话,在同一个会话实例中,在前一次对话结束(完成/取消)前无法发起下一次请求
CancelChat 取消前一次对话

识别结果字段:

字段 说明
TextResult 文字对话结果
ImageResult 作图对话结果

实时语音识别使用范例

var session = ServiceManager.Get<IAsrStandardSession>().NewSmartChatSession();
session.SkillId = xxx;
session.OnResult += result =>
{
    if (result.Error != null)
    {
        // 对话错误
    }
    else
    {
        // 对话成功
        if (result.Data.ImageResult != null) {
            // 作图
            var url = result.Data.ImageResult.Url; // 图片URL
            var taskId = result.Data.ImageResult.TaskId; // 作图任务ID
        } else if (result.Data.TextResult != null) {
            // 文字对话结果
            var answer = result.Data.TextResult.Answer;
        }
    }
};

// 开始会话
session.Start();

// 对话
string text = ...;
string extra = ...; // 业务额外字段,按需选填
session.TextChat(text, extra);

// 取消对话
session.CancelChat();

// 结束会话
session.Stop();

4.5 语音唤醒服务

通过ServiceManager.Get获取IWakeupService实例使用,仅支持移动平台(Android、iOS),PC使用相关接口不会有作用(回调唤醒出错)

接口清单:

接口 说明
Init 初始化,设置语音唤醒appid
Start 开始语音唤醒,同时只能有一个语音唤醒实例启动,重复启动无效,通过委托回调事件
Stop 停止语音唤醒,开始对话
EnableExternalAudioRecord 设置语音唤醒是否使用外部管理的音频采集数据,不开启可能造成音频采集冲突
WritePcm 向语音唤醒实例写入采集到的音频数据,音频格式为单声道,采样率16000Hz,采样格式为16bit整型

委托回调清单:

委托 说明
OnWakeupStart 语音唤醒启动
OnWakeupSuccess 语音唤醒成功
OnWakeupSuccess 语音唤醒出错
OnWakeupStop 语音唤醒停止
地图和导航模块播放器模块