智能语音对话模块
更新时间:2024-10-09
百度搭载业界领先的需求理解、对话控制及底层的自然语言处理、知识挖掘等核心技术,为开发者提供了丰富的预置技能,一键获取即可拥对话能力
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
| 接口 | 说明 |
|---|---|
| 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
接口清单:
| 接口 | 说明 |
|---|---|
| Init | 初始化,设置语音唤醒appid |
| Start | 开始语音唤醒,同时只能有一个语音唤醒实例启动,重复启动无效,通过委托回调事件 |
| Stop | 停止语音唤醒,开始对话 |
| EnableExternalAudioRecord | 设置语音唤醒是否使用外部管理的音频采集数据,不开启可能造成音频采集冲突 |
| WritePcm | 向语音唤醒实例写入采集到的音频数据,音频格式为单声道,采样率16000Hz,采样格式为16bit整型 |
委托回调清单:
| 委托 | 说明 |
|---|---|
| OnWakeupStart | 语音唤醒启动 |
| OnWakeupSuccess | 语音唤醒成功 |
| OnWakeupSuccess | 语音唤醒出错 |
| OnWakeupStop | 语音唤醒停止 |
