通過閱讀本文,您可以瞭解如何通過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 | Vad的反饋結果,如果有開啟了聲紋降噪(EnableVoicePrint)或者AIVad(VadLevel大於0),有以下取值結果: 0:沒開啟聲紋降噪Vad,且關閉AIVad。 1:已開啟聲紋降噪Vad,但還未完成聲紋註冊。 2:已開啟聲紋降噪Vad,識別到主講人。 3:已開啟聲紋降噪Vad,沒識別到主講人,在此狀態下,智能體不會回答。 4:開啟AIVad,識別到主講人。 5:開啟AIVad,但沒識別到主講人,在此狀態下,智能體不會回答。 說明 僅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, voiceprintResult) => {
// 使用者提問被智能體識別結果的通知
console.log('AICallUserSubtitleNotify', subtitle.text, subtitle.end, subtitle.sentenceId, voiceprintResult);
});
engine.on('agentSubtitleNotify', (subtitle) => {
// 智能體回答結果通知
console.log('AICallAgentSubtitleNotify', subtitle.text, subtitle.end, subtitle.sentenceId);
});
