通过阅读本文,您可以了解如何通过AICallKit SDK实时获取到用户侧讲话字幕,及智能体回答字幕。
使用说明
本示例主要旨在帮助您在不含UI集成的情况下,如何利用API实现该功能。
您需要提前集成AICallkit SDK。如何集成,请参见Android集成SDK、iOS集成SDK、Web集成SDK。
实时字幕效果预览
用户侧实时字幕 用户输入的内容经过智能体识别后,实时显示在UI界面上。 | 智能体侧实时字幕 大模型生成的内容将实时显示在UI界面上。 |
该功能以及UI界面均在含UI集成方案中内置。含UI集成方案详情,请参见含UI集成方案。
实现实时字幕功能
实时字幕在通话开始后,用户侧的讲话内容将通过onUserSubtitleNotify
进行返回,而智能体的回答内容则通过onVoiceAgentSubtitleNotify
进行返回。
onUserSubtitleNotify详情
用户在讲话过程中,智能体识别结果的通知将会多次返回。在实时字幕场景中,直接渲染文本内容到UI界面中即可;在非实时场景的对话式聊天中,应在isSentenceEnd=true
时,将最终的文本内容渲染到用户界面中。
状态值 | 说明 |
text | 被智能体识别出的提问文本,每一次返回都是当前句子的完整结果。 |
isSentenceEnd | 当前文本是否为这句话的最终结果,为true时表示当前讲话句子已经结束,接下来智能体会回答你的问题 |
sentenceId | 当前text属于的句子ID,每一次提问后ID会累加 |
voiceprintResult | 当前声纹降噪识别结果反馈,有以下取值结果: 0:没开启声纹降噪 1:开启了,还未注册 2:开启了,识别到主讲人 3:开启了,没识别到主讲人,在此状态下,智能体接下来不会回答 说明 Web端暂未支持声纹识别。 |
例如,用户在讲话“今天天气怎么样”的过程中,可能得到的回调结果如下:
text="今天" isSentenceEnd=false sentenceId=1
text="今天天气" isSentenceEnd=false sentenceId=1
text="今天天气怎么样?" isSentenceEnd=true sentenceId=1
onVoiceAgentSubtitleNotify详情
智能体回答结果的过程中,回答内容将被拆分为多次通知。客户端需要将这些回答的文本进行合并,并对合并后的文本进行拆字渲染,以便在UI界面中展示。
状态值 | 说明 |
text | 智能体回答的文本 |
isSentenceEnd | 当前文本是否为此次回答的最后一句,为true时表示当前回答完毕,智能体状态也会切换为聆听中 |
userAsrSentenceId | 用户侧提问的句子ID |
例如,针对用户刚才的提问,智能体回答“今天的天气晴朗明媚,气温适中,非常适合外出活动。”,可能回调的结果如下:
text="今天的天气晴朗明媚," isSentenceEnd=false userAsrSentenceId=1
text="气温适中,非常适合外出活动。" isSentenceEnd=false userAsrSentenceId=1
text="" isSentenceEnd=true userAsrSentenceId=1
示例代码
Android
// 给引擎添加设置回调
mARTCAICallEngine.setEngineCallback(mCallEngineCallbackWrapper);
// 回调处理(仅示例相关的回调操作)
ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallbackWrapper = new ARTCAICallEngine.IARTCAICallEngineCallback() {
@Override
public void onUserAsrSubtitleNotify(String text, boolean isSentenceEnd, int sentenceId, VoicePrintStatusCode voicePrintStatusCode) {
// 同步ASR识别用户的话
}
@Override
public void onAIAgentSubtitleNotify(String text, boolean end, int userAsrSentenceId) {
// 同步智能体回应的话
}
}
iOS
// 给引擎添加设置回调
self.engine.delegate = self
func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int, voiceprintResult: ARTCAICallVoiceprintResult) {
// 用户提问被智能体识别结果的通知
}
func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int) {
// 智能体回答结果通知
}
Web
// 给引擎添加回调
engine.on('userSubtitleNotify', (subtitle) => {
// 用户提问被智能体识别结果的通知
console.log('AICallUserSubtitleNotify', subtitle.text, subtitle.end, subtitle.sentenceId);
});
engine.on('agentSubtitleNotify', (subtitle) => {
// 智能体回答结果通知
console.log('AICallAgentSubtitleNotify', subtitle.text, subtitle.end, subtitle.sentenceId);
});