最近AI圈的大事可谓是一件接一件,前有国产黑马 DeepSeek,现在又有一夜刷屏的 Manus,科技圈的故事可谓是一浪接一浪!
当大模型和对话式语音 AI 智能体结合,会擦出什么样的火花?
网易云信对话式语音 AI 智能体带给你答案!
Ta 可以成为应用内专治午夜“孤独症”的赛博知己,情绪价值拉满!
当用户说【今天好累】,Ta能陪用户一起吐槽、给用户加油打气!
当用户说【这个事儿没做好】,Ta能冷静分析,给用户力量与安全!
Ta 既可以是用户的“满级社交搭子”,更可以是随用户需求 72 变的理想“男友”!
当然,Ta 还可以出现在多种互动场景中,比如 AI 口语教练、企业会议智能助手、电商咨询导购、心理咨询诊前助理等。
本文将通过简单的几行代码实现 AI 智能体在虚拟角色互动、情感陪伴场景下的 Web 端接入示例。
前期准备
-
网易云信后台创建账号和应用,获取 appkey。
-
通过网易云信服务端接口获取加入RTC 房间的 token。
项目集成
1. NPM 引入需要的库
创建一个新项目,在终端 cd 到项目目录下,执行 npm install 下载 RTC SDK 到本地。
"dependencies": {..."nertc-web-sdk": "^5.6.50",...}
2.引入依赖,进行 SDK 初始化和事件监听。
import NERTC from "nertc-web-sdk/NERTC"const client = NERTC.createClient({appkey: "4727023efa9******3b32e819bd5b",})// 监听 stream-added 事件,订阅 AI 数字人的远端流client.on("stream-added", e => {const remoteStream = e.streamclient.subscribe(remoteStream, { audio: true, video: false })client.startAsrCaptions("AUTO")})// 监听 stream-subscribed,订阅到 AI 数字人后调用 play()client.on("stream-subscribed", e => {const remoteStream = e.streamif (e.mediaType === "audio") {const div = document.getElementById("remote-container")remoteStream.play(div, { audio: true, video: false })}})// 字幕回调client.on("asr-captions", (data) => {data.forEach(item => {const { srcUid, text, isFinal } = item;...})})
3. 用户加入房间
初始化之后,调用 join 和 initLocalStream 方法加入到房间初始化本地流。
await client.join({channelName: this.channelName,uid: this.uid,// 调试模式下可设置为 null。正式上线前设置为相应的 tokentoken: null})await this.initLocalStream()...async initLocalStream() {const localStream = NERTC.createStream({audio: true,video: false,})localStream.setAudioProfile("music_standard")await localStream.init()await client.publish(localStream)}
4.开启实时字幕
调用 startAsrCaptions 方法开启实时字幕
await client.startAsrCaptions("AUTO")
5.关闭实时字幕
调用 stopAsrCaptions 方法关闭实时字幕
await client.stopAsrCaptions()
6.AI 数字人加入房间
通过请求服务端接口:https://doc.yunxin.163.com/nertc/server-apis/jQzOTE2NTc?platform=server 让数字人加入到当前 RTC 房间,cname 传用户加入房间时候传的 cname。
try {const result = await axios.post("https://rtc-ai.netease.im/ai/task/create",{cname: this.channelName,appkey: this.appkey,taskType: 7,data: {asr: {asrVendor: 1,},llm: {llmVendor: 5,role: 14,},tts: {ttsVendor: 6}},},{headers: {AppKey: this.appkey,Cname: this.channelName,Uid: 10000,Token: "",},},)// 这里缓存下加入房间之后的房间 cid taskId,后续调用接口让 AI 虚拟人离开房间要用到这个参数this.cid = result.data.cidthis.taskId = result.data.result.taskId} catch (error) {console.log(error)}
7. AI 数字人离开房间
通过请求服务端接口:https://doc.yunxin.163.com/nertc/server-apis/jQzOTE2NTc?platform=server 让数字人离开当前 RTC 房间,cid taskId 传之前加入房间时缓存的值。
-
try {await axios.post("https://rtc-ai.netease.im/ai/task/close",{cname: this.channelName,appkey: this.appkey,taskType: 7,taskId: this.taskId,cid: this.cid,},{headers: {AppKey: this.appkey,Cname: this.channelName,Uid: 10000,Token: "",},},)} catch (error) {console.log(error)}
8.用户离开房间
调用 leave 方法离开房间
await client.leave()

300

被折叠的 条评论
为什么被折叠?



