实时字幕

通过阅读本文,您可以了解如何通过AICallKit SDK实时获取到用户侧讲话字幕,及智能体回答字幕。

使用说明

  • 本示例主要旨在帮助您在不含UI集成的情况下,如何利用API实现该功能。

  • 您需要提前集成AICallkit SDK。如何集成,请参见Android集成SDKiOS集成SDKWeb集成SDK

实时字幕效果预览

用户侧实时字幕

用户输入的内容经过智能体识别后,实时显示在UI界面上。

lQDPKeLM6OXzFGHNCMjNBDiwmvXWuI7zQ84HVy-x3Np4AA_1080_2248

智能体侧实时字幕

大模型生成的内容将实时显示在UI界面上。

lQDPJyB9LXbMhGHNCMjNBDiw5kh8C3S6jikHVy-y6E6YAA_1080_2248

说明

该功能以及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);
});