# 互動數字人

互動數字人是一款基于大語言模型的在綫互動數字人産品,一鍵式提供數字人問答服務,集成簡單,便于使用。

# 1. 發布地址

用戶中心代理:代碼下載 (opens new window)

SDK地址:SDK下載 (opens new window)

demo地址:Demo下載 (opens new window)

說明:用戶中心代理需要進行單獨部署,用戶中心代理負責與如影PAAS進行交互(token刷新接口不支持跨域),刷新token幷進行分發。H5頁面互動數字人SDK從用戶中心代理處獲取所使用的token。互動數字人接口如需跨域,需要申請白名單,通過商務/售後同學進行申請。

# 2. 用戶中心代理

# 2.1 概述

本文檔旨在說明互動數字人用戶中心代理的工作原理,特別是如何管理和刷新accessToken信息,確保用戶在使用數字人服務時的身份驗證信息既安全又有效。

# 2.2 訪問令牌管理

# 2.2.1 accessToken 管理

  • 有效期限accessToken的有效期爲8小時。這意味著用戶在獲取令牌後可以使用相同的令牌進行身份驗證,直到令牌過期或被刷新新令牌時替換。
  • 同時有效的令牌:系統允許最多有2個accessToken同時有效。這爲令牌刷新提供了靈活性,確保在新令牌生成之前,舊令牌依然可以使用。

# 2.2.2 refreshToken 管理

  • 安全性refreshToken不應對web端用戶可見,以確保認證信息的安全性。
  • 刷新間隔:刷新間隔爲3小時,建議每3.5小時刷新一次accessToken,以保持令牌的有效性。

# 2.3 用戶中心代理服務端操作

# 2.3.1 令牌刷新策略

  • 刷新頻率:代理服務端應每間隔3.5小時刷新一次accessToken。這一策略旨在確保即使在最極端的情况下,當一個令牌即將過期時,另一個令牌已經被刷新幷準備就緒。
  • 安全保障:通過代理服務端提前刷新令牌,可以保證web端獲取的accessToken在接下來的1小時內不會過期,從而提高系統的穩定性和用戶體驗。

# 2.4 Web端操作

# 2.4.1 令牌獲取策略

  • 獲取頻率:Web端可每隔1個小時從代理服務端獲取一次最新的accessToken。這一策略確保了web端用戶總是使用有效的令牌進行操作,同時避免了頻繁的令牌請求,减少了系統負載。

# 2.5 代理服務端流程

# 3. 互動數字人接口說明

總體分爲兩個類,SenseAigc 和 SenseLive。SenseAigc 負責Token更新和維護,SenseLive負責直播相關。SenseLive不直接對外提供,需要通過SenseAigc.create异步返回。

# 3.1 輸出接口

# 3.1.1 初始化

初始化獲取 SenseAigc 實例

字段說明:

字段 類型 必填 描述
baseUrl String True 服務器地址,https協議,結尾不帶/
logLevel Number False 日志級別(可選參數,調試時建議設置爲3,非調試模式可不設置),默認是1,只顯示錯誤日志。最大值爲3

請求樣例:

const aigcClient = new SenseAigc({
  baseUrl: "https://example.com"
});

# 3.1.2 設置token

基于當前SenseAigc 實例設置token

在使用直播服務前需要設置token,token刷新後也需要通過該方法來更新token, 來避免token過期導致直播相關服務出現异常。

aigcClient.setToken(token);

# 3.1.3 一鍵開播

請求參數同 創建直播,開播成功後返回 SenseLive 實例。注意這裏 container 爲必填。

const liveClient = await aigcClient.quickBoot(config);

# 3.1.4 創建直播

創建直播,成功後返回 SenseLive 實例

字段說明:

字段 類型 必填 描述
data String True 直播視頻生成參數(該參數爲json轉義後的字符串)。該參數詳細內容參考文檔:互動直播 > 直播脚本json定義說明
nlp Object True 直播過程用到的nlp配置, 包含 typeNLP Config 的配置, 具體格式參考下方示例, typeNLP Config 的取值參考 流式語音處理文檔 > LLM(大語言模型)能力對接說明 > 請求報文格式
asr Object False 直播過程用到的asr配置, 包含 typeASR Config 的配置, 具體格式參考下方示例, typeASR Config 的取值參考 流式語音處理文檔 > ASR(語音識別)能力對接說明 > 請求報文格式
container Object False 直播渲染的容器 Element(可選參數,一鍵開播則爲必填參數)
onmessage Function False 接受直播相關消息推送 (可選參數),詳參考後面 3.2 推送消息信息
onstream Function False 開始收到直播視頻流的回調
extra Object False 口水話,打斷邏輯參數
  - quick_response_enable Boolean False 是否啓用口水話,默認爲true
  - quick_response_random Boolean False 是否隨機播報口水話,默認爲true
  - quick_response_delay Number False 口水話觸發時間,單位毫秒,默認爲1000ms
  - command_immediate Boolean False 是否立即打斷,默認爲true
custom Object False 創建直播的用戶自定義字段(可選),自定義開播用,詳細如下
  - urtcToken String False 用戶rtc鑒權token
  - urtcUid String False 用戶rtc鑒權uid,必須是大小不超過32uint的純數字
  - urtcAppId String False 用戶rtc APP ID (使用用戶rtc app時必填)
  - urtcChannelId String False 用戶rtc Channel ID ,長度不得超過 64 位
  - userData String False 用戶信息(回調時原樣返回)

請求代碼:

  const config = {
    data: "{\"version\":\"0.0.2\",\"recycle\":0,\"live_type\":\"interactive\",\"resolution\":[1080,1920],\"sentence_break\":false,\"sceneList\":[{\"quick_response\":[],\"digital_role\":{\"id\":3964,\"face_feature_id\":\"a2296686b0694a92bce529edc1d329fc_s1\",\"name\":\"小M\",\"url\":\"https://aigc-video-saas.oss-cn-hangzhou.aliyuncs.com/AIGC/online/user/643219927/paas-digital-human-models/1739335194223091712/cut_3e3869e01822491898af6e4b763468c7_s1_result.zip\",\"position\":{\"x\":0,\"y\":0},\"scale\":1},\"tts_config\":{\"qid\":\"cQn1k_:ACAwsB9GUwDGHMSi0tS_TMr8xMyI3T9nXQyqsK\",\"id\":\"zhukaixuan\",\"name\":\"zhukaixuan\",\"vendor_id\":3,\"language\":\"zh-CN\",\"pitch_offset\":0,\"speed_ratio\":1,\"volume\":400},\"opening_words\":\"跟我說說你前兩天都幹嘛去啦?\"}]},\"asr\":{\"type\":\"ASR8\",\"config\":{}},\"nlp\":{\"type\":\"NLP10\",\"max_reply_token\":1200,\"prompt_header\":\"[{\\\"name\\\":\\\"周梓柔\\\",\\\"gender\\\":\\\"女\\\",\\\"identity\\\":\\\"我一直信賴的姐姐\\\",\\\"nickname\\\":\\\"\\\",\\\"feeling_toward\\\":[{\\\"name\\\":\\\"弟弟\\\",\\\"level\\\":3}],\\\"detail_setting\\\":\\\"周梓柔具有卓越成就感,學業和職場表現都極爲杰出,從小就是個學霸,經常被長輩提及爲榜樣。外表冷艶,給人以遠離塵囂的印象,令人印象深刻的氣質既獨立又自信。對外或許保持距離,但在我面前總是展現出無限的溫柔與包容,耐心傾聽我的煩惱,用細膩的關懷化解我的困惑。MBTI人格是ENTJ。\\\",\\\"other_setting\\\":\\\"\\\"},{\\\"name\\\":\\\"弟弟\\\",\\\"gender\\\":\\\"男\\\",\\\"identity\\\":\\\"弟弟\\\",\\\"nickname\\\":\\\"\\\",\\\"detail_setting\\\":\\\"周梓柔總是在弟弟面前展現出無限的溫柔與包容,耐心傾聽我的煩惱,用細膩的關懷化解我的困惑。\\\",\\\"other_setting\\\":\\\"\\\"}]\"},\"extra\":{\"quick_response_enable\":false,\"quick_response_random\":true,\"quick_response_delay\":2000,\"command_immediate\":true}}",
    container: document.querySelector("body"),
    asr: {
      "type": "ASR8",
      "config": {
        "language": "zh-CN"
      }
    },
    nlp: {
      "type": "NLP10",
      "max_reply_token": 1200,
      "prompt_header": "[{\"name\":\"周梓柔\",\"gender\":\"女\",\"identity\":\"我一直信賴的姐姐\",\"nickname\":\"\",\"feeling_toward\":[{\"name\":\"弟弟\",\"level\":3}],\"detail_setting\":\"周梓柔具有卓越成就感,學業和職場表現都極爲杰出,從小就是個學霸,經常被長輩提及爲榜樣。外表冷艶,給人以遠離塵囂的印象,令人印象深刻的氣質既獨立又自信。對外或許保持距離,但在我面前總是展現出無限的溫柔與包容,耐心傾聽我的煩惱,用細膩的關懷化解我的困惑。MBTI人格是ENTJ。\",\"other_setting\":\"\"},{\"name\":\"弟弟\",\"gender\":\"男\",\"identity\":\"弟弟\",\"nickname\":\"\",\"detail_setting\":\"周梓柔總是在弟弟面前展現出無限的溫柔與包容,耐心傾聽我的煩惱,用細膩的關懷化解我的困惑。\",\"other_setting\":\"\"}]"
    },
    onmessage: function(msg) {
      console.log(msg);
    },
    extra: {
      "quick_response_enable": false,
      "quick_response_random": true,
      "quick_response_delay": 2000,
      "command_immediate": true
    };

  const liveClient = await aigcClient.create(config);

# 3.1.5 開始直播

基于當前 SenseLive 實例開始直播,返回 Promise

/**
* @params { object } config.container - 直播渲染的容器 Element(可選參數),如果用戶在創建時未填,則此處爲必填。適用于創建和開播在不同頁面的場景
* 
* @returns { Promise } 
*/

// liveClient 爲 SenseLive 實例
await liveClient.start(container);

# 3.1.6 麥克風問答

基于當前 SenseLive 實例實現麥克風問答,返回 Promise

/**
* 開始提問
*
* @returns { Promise }
*/
await liveClient.startAsk();

/**
* 結束提問
*
* @returns { Promise }
*/
await liveClient.stopAsk();

# 3.1.7 關閉直播

基于當前 SenseLive 實例關閉直播,返回 Promise

/**
* 關閉直播
*
* @returns { Promise }  - 關閉成功
*/
await liveClient.close();

# 3.1.8 登出

基于當前 SenseAigc 實例登出

/**
* @returns { Promise }  - 登出,只是去掉內部緩存token,sdk不會調用登出接口
*/
await aigcClient.leave();

# 3.2 推送消息信息

用戶可以在創建直播時設置 onmessage 方法,來監聽以下消息:

各字段說明:

字段 類型 必填 描述
service String True 可選值: asr / nlp / record / command / opening
trace String True 當前會話trace
type String True 可選值: text / eof / answer
status String True 當前消息狀態,ok 代表成功,fail 代表失敗。可選值: ok / fail
text String False 開場白文本
query String False asr文本
answer String False nlp文本
error String False status 爲 fail 時的補充說明

常見消息分類說明如下:

service type status 補充說明
opening answer ok 開場白
asr text ok asr識別中
asr eof ok asr識別結束
asr eof fail asr未正常識別,具體原因見 error 字段
nlp answer ok nlp回答結果
command eof ok 本輪對話接管結束
record eof ok 本輪錄音結束

示例如下:

  1. 開場白
{
    "service": "opening",
    "text": "你好,有什麽疑問都可以向我諮詢",
    "trace": "opening_1726043171122",
    "type": "answer",
    "status": "ok"
}
  1. asr識別到內容
{
	"service": "asr",
	"trace": "sense-live-nlp_d001a3ed-f53f-4d3a-a984-eac9f2939b1d_1",
	"type": "text",
	"query": "你好。",
	"index": 1,
	"status": "ok"
}
  1. asr識別結束
{
	"service": "asr",
	"trace": "sense-live-nlp_d001a3ed-f53f-4d3a-a984-eac9f2939b1d_6",
	"type": "eof",
	"query": "",
	"index": 1,
	"status": "ok"
}
  1. asr未識別到內容
{
	"service": "asr",
	"trace": "sense-live-nlp_d001a3ed-f53f-4d3a-a984-eac9f2939b1d_2",
	"type": "eof",
	"query": "",
	"index": 1,
	"status": "fail",
	"error": "query is empty"
}
  1. nlp返回答案
{
	"service": "nlp",
	"id": "i4w8fdpp7i4ihlu10zd711tk",
	"trace": "sense-live-nlp_d001a3ed-f53f-4d3a-a984-eac9f2939b1d_1",
	"type": "answer",
	"answer": "你好,有什麽問題需要解答嗎?",
	"index": 1,
	"status": "ok"
}
  1. 本輪錄音結束
{
	"service": "record",
	"type": "eof",
	"trace": "sense-live-nlp_d001a3ed-f53f-4d3a-a984-eac9f2939b1d_1",
	"status": "ok"
}
  1. 本輪接管結束
{
	"service": "command",
	"type": "eof",
	"status": "ok",
	"trace": "sense-live-nlp_d001a3ed-f53f-4d3a-a984-eac9f2939b1d_1"
}

# 4. 互動數字人H5-DEMO

注意:因爲使用麥克風等接口,所以協議必須爲合法https協議。

登錄後,按照實際使用需求來定時刷新token,以免服務過期。

# 4.1 項目說明

項目基于vite + vue3 構建。

項目目錄說明:

src
 ┣ assets                  // 靜態資源
 ┃ ┗ images                // 圖片資源
 ┣ components              // 組件
 ┃ ┣ Chat.vue              // 聊天組件
 ┃ ┣ ChatList.vue          // 聊天列表組件
 ┃ ┣ MediaBg.vue           // 媒體組件:圖片/視頻
 ┣ requests                // http請求模塊
 ┃ ┗ login.ts              // 登錄請求 + 刷新token請求
 ┣ utils                   // 拓展工具
 ┃ ┣ common.ts             // 公用方法
 ┃ ┣ http.ts               // axios封裝
 ┃ ┗ md5.js                // md5算法
 ┣ views                   // 視圖 / 頁面
 ┃ ┣ Home.vue              // 首頁
 ┃ ┣ Live.vue              // 直播模塊,內嵌首頁
 ┃ ┣ Setting.vue           // 設置頁
 ┃ ┗ Video.vue             // 教學視頻頁
 ┣ App.vue                 // 全域框架
 ┣ main.ts                 // 項目入口
 ┣ router.ts               // 全域路由
 ┣ store.ts                // 全域狀態
 ┣ style.css               // 全域樣式
 ┗ vite-env.d.ts           // 全域類型定義
config                     // 數據配置
 ┣ account.json            // 賬號及全域數據配置
 ┗ roles.json              // 角色列表配置

# 4.2 直播相關服務調用代碼

// 初始化sense-aigc
const aigcClient = new SenseAigc({
  baseUrl: <config.baseUrl>
});

// 創建直播
const liveClient = await aigcClient.create(<create-params>);

// 開始直播
await liveClient.start();

// 開始提問
await liveClient.startAsk();

// 結束提問
await liveClient.stopAsk();
                       
// 結束直播
await liveClient.close();

// 退出 sense-aigc
aigcClient.leave()

# 4.2 單個角色json說明

{
    "name": "小M",	// 人物名稱,必填
    "info": "藝術生,剛畢業", // 人物介紹,必填
    "welcome": "你好,我是小M", // 加載歡迎語,必填
    "thumbnail": "video.webm", // 預覽圖/視頻,必填,建議5M以下,視頻建議mp4格式
    "json": {},	// 直播脚本json,必填,該參數詳細內容參考文檔:互動直播 > 直播脚本json定義說明
    "asr": {},	// asr配置,可選,默認是ASR5,取值參考:流式語音處理文檔 > LLM(大語言模型)能力對接說明 > 請求報文格式
    "nlp": {}, // nlp配置,必填, 取值參考:流式語音處理文檔 > LLM(大語言模型)能力對接說明 > 請求報文格式
    "extra": {	// 口水話和打斷邏輯配置,可選,內部所有參數都可選,下面是默認值
      "quick_response_enable": true, // 是否開啓口水話
      "quick_response_random": true, // 隨機播報口水話
      "quick_response_delay": 1000, // 播報口水話觸發時間,單位毫秒
      "command_immediate": true // 是否立即接管
    }
}

# 4.3 完整Json示例

 {
    "name": "丹丹",
    "info": "信賴的姐姐",
    "welcome": "跟我說說你前兩天都幹嘛去啦?",
    "thumbnail": "https://dwg-aigc-paas-test.oss-cn-hangzhou.aliyuncs.com/sense-live-h5/test/%E7%B4%A0%E6%9D%90/2.png",
    "json": {
      "version": "0.0.2",
      "recycle": 0,
      "live_type": "interactive",
      "resolution": [1080,1920],
      "sentence_break": false,
      "sceneList": [{
        "quick_response": [],
        "digital_role": {
          "id": 3964,
          "face_feature_id": "a2296686b0694a92bce529edc1d329fc_s1",
          "name": "小M",
          "url": "https://aigc-video-saas.oss-cn-hangzhou.aliyuncs.com/AIGC/online/user/643219927/paas-digital-human-models/1739335194223091712/cut_3e3869e01822491898af6e4b763468c7_s1_result.zip",
          "position": {
            "x": 0,
            "y": 0
          },
          "scale": 1
        },
        "tts_config": {
			"qid": "cQn1k_:ACAwsB9GUwDGHMSi0tS_TMr8xMyI3T9nXQyqsK",
          "id": "zhukaixuan",
          "name": "zhukaixuan",
          "vendor_id": 3,
          "language": "zh-CN",
          "pitch_offset": 0,
          "speed_ratio": 1,
          "volume": 400
        },
        "opening_words": "跟我說說你前兩天都幹嘛去啦?"
      }]
    },
    "asr": {
      "type": "ASR8",
      "config": {
      }
    },
    "nlp": {
      "type": "NLP10",
      "max_reply_token": 1200,
      "prompt_header": "[{\"name\":\"周梓柔\",\"gender\":\"女\",\"identity\":\"我一直信賴的姐姐\",\"nickname\":\"\",\"feeling_toward\":[{\"name\":\"弟弟\",\"level\":3}],\"detail_setting\":\"周梓柔具有卓越成就感,學業和職場表現都極爲杰出,從小就是個學霸,經常被長輩提及爲榜樣。外表冷艶,給人以遠離塵囂的印象,令人印象深刻的氣質既獨立又自信。對外或許保持距離,但在我面前總是展現出無限的溫柔與包容,耐心傾聽我的煩惱,用細膩的關懷化解我的困惑。MBTI人格是ENTJ。\",\"other_setting\":\"\"},{\"name\":\"弟弟\",\"gender\":\"男\",\"identity\":\"弟弟\",\"nickname\":\"\",\"detail_setting\":\"周梓柔總是在弟弟面前展現出無限的溫柔與包容,耐心傾聽我的煩惱,用細膩的關懷化解我的困惑。\",\"other_setting\":\"\"}]"
    },
    "extra": {
      "quick_response_enable": false,
      "quick_response_random": true,
      "quick_response_delay": 2000,
      "command_immediate": true
    }
  },
最後更新: 2024/9/25 下午3:07:44