原生JS+SSML实战:低门槛构建带情绪动作的AI陪伴智能体
针对AI应用缺乏情绪价值的痛点,本文提供一份原生JS接入魔珐星云SDK的实战指南,详解如何利用SSML与动作指令控制数字人,低门槛构建陪伴型智能体。
本文分享如何利用原生 JS 集成魔珐星云 SDK,通过 proxyWidget 机制拦截大模型下发的图片指令,实现「左侧数字人+右侧商品图」的多模态分栏联动,打造高拟真电商导购终端。
在智慧零售(如女装供应链展厅、线下商超)场景中,一个合格的 AI 导购不仅需要具备流畅的语音解答能力,更需要极强的“多模态展演”能力。传统的智能屏幕通常只能全屏显示数字人,当提及某款具体商品时,无法直观地展示商品细节或参数。
为了实现真正的业务闭环,我们需要构建一种**“双栏分屏”**的交互 UI:左侧为具身数字人负责实时互动讲解,右侧为业务组件区,能够根据大模型的语义决策,实时同步弹出对应的商品详情图或促销海报。
魔珐星云不仅提供了底层的 3D 渲染引擎,还提供了一套连接业务系统的数据拦截协议——proxyWidget 代理机制。
在默认情况下,当云端大脑(大模型)下发一张图片或视频时,SDK 会使用内置的默认弹窗进行渲染。通过 proxyWidget,开发者可以在前端主动拦截 widget_slideshow(PPT/组图推送)、widget_pic(图片推送)等事件,阻止 SDK 默认行为,转而将获取到的图片 URL 渲染到开发者自定义的右侧商品面板中。这实现了 3D 表达层与 2D 业务数据层的完美解耦。
在构建导购大屏的 JS 执行流时,有两个极易被忽视的工程体验痛点需要解决:
1. 浏览器自动播放限制(黑屏问题):在 Web 环境下,若无用户物理点击交互,3D 资产加载完成后可能卡在首帧之前。我们通过在资源加载达 100% 后立刻下发一个无声指令 avatar.speak(" "),强制打破浏览器限制,唤醒首帧画面。 2. 高频打断冲突:当导购正在长篇大论介绍商品时,顾客若插话提问,系统必须立刻中断当前播报。我们需要维护一个 isSpeaking 状态标识,在发送新指令前先调用 avatar.interactiveidle() 强行挂起当前动作,并预留 150ms 左右的缓冲期,确保底层的动画状态机平滑归位后再执行下一次 speak。
以下为一个开箱即用的原生 HTML/JS 单页面应用实战源码。该 Demo 演示了如何初始化引擎、拦截后台商品推送指令,并实现带有状态校验的智能打断。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>魔珐星云 | 具身智能零售终端</title>
<script src="https://media.xingyun3d.com/xingyun3d/general/litesdk/xmovAvatar@latest.js"></script>
<style>
/* 核心分栏布局 */
.retail-workspace { display: flex; gap: 20px; width: 100%; max-width: 1000px; height: 500px; }
.stage-panel { flex: 2; background: #000; border-radius: 12px; position: relative; }
.product-panel { flex: 1; border: 2px dashed #e2e8f0; border-radius: 12px; padding: 20px; text-align: center; }
#sdk { width: 100%; height: 100%; }
.product-img { max-width: 100%; display: none; margin-top: 20px; border-radius: 8px; }
</style>
</head>
<body>
<div class="retail-workspace">
<!-- 左侧:数字人具身舞台 -->
<div class="stage-panel">
<div id="sdk"></div>
</div>
<!-- 右侧:多模态商品展示区 -->
<div class="product-panel">
<div id="empty-state">等待系统推送商品详情...</div>
<img src="" id="product-img" class="product-img" alt="商品图">
</div>
</div>
<div style="margin-top: 20px;">
<button onclick="startSystem()">1. 激活智能导购</button>
<button onclick="mockAgentPushProduct()">2. 模拟大模型推送商品图</button>
<button onclick="handleCustomerAsk()">3. 模拟顾客打断提问</button>
</div>
<script>
let avatar = null;
let isSpeaking = false; // 全局播报状态标识
async function startSystem() {
// 1. 初始化数字人核心架构
avatar = new XmovAvatar({
containerId: '#sdk',
appId: '您的APP_ID',
appSecret: '您的APP_SECRET',
gatewayServer: 'https://nebula-agent.xingyun3d.com/user/v1/ttsa/session',
hardwareAcceleration: 'prefer-hardware',
// 监听发声状态,用于精准控制打断逻辑
onVoiceStateChange: (status) => {
isSpeaking = (status === 'start');
},
// 2. 核心联动:接管业务渲染组件
proxyWidget: {
"widget_slideshow": (data) => {
console.log("拦截到云端大模型下发的图片指令:", data);
// 隐藏空状态,渲染真实商品图至右侧 DOM
document.getElementById('empty-state').style.display = 'none';
const img = document.getElementById('product-img');
img.src = data.url;
img.style.display = 'block';
}
}
});
// 加载 3D 资产
await avatar.init();
// 强制解除浏览器自动播放限制,唤醒首帧画面
avatar.speak(" ", true, true);
}
// 测试函数:模拟云端大模型在特定逻辑下下发图片指令
function mockAgentPushProduct() {
if(!avatar) return;
// 驱动数字人进行商品话术播报
avatar.speak("这款是我们春季主推款,特别适合门店走量,您可以看下右侧的面料细节图。", true, true);
// 模拟大模型触发 widget_slideshow 事件,联动右侧业务屏幕
setTimeout(() => {
const mockData = { url: "https://images.unsplash.com/photo-1515886657613-9f3515b0c78f?auto=format&fit=crop&w=400&q=80" };
const img = document.getElementById('product-img');
img.src = mockData.url;
img.style.display = 'block';
document.getElementById('empty-state').style.display = 'none';
}, 1000);
}
// 测试函数:智能打断算法
async function handleCustomerAsk() {
if (!avatar) return;
// 若导购正在说话,必须先将其挂起至待机状态
if (isSpeaking) {
avatar.interactiveidle();
await new Promise(r => setTimeout(r, 150)); // 预留底层状态流转缓冲期
}
// 响应顾客的新问题
avatar.speak("好的,这款起批量是50件,今天下单即可发货。", true, true);
}
// 页面卸载时安全释放资源,防止云端并发并发数被持续占用
window.addEventListener('beforeunload', () => { if (avatar) avatar.destroy(); });
</script>
</body>
</html>在智慧零售场景中,具备强交互属性的具身大屏正逐步替代传统的静态宣导屏幕。通过原生 JS 与魔珐星云 proxyWidget 的结合,开发者仅需数十行代码,即可实现 3D 数字人行为与外部业务面板的帧级协同。这种对底层渲染能力与上层业务逻辑的精妙解耦,大幅降低了多模态展演终端的开发复杂度,为实体商业的智能化升级提供了极具参考价值的工程范式。
魔珐星云,不止是数字人,让 AI 从会思考,走向能表达、会交流。