- 在状态管理中新增当前语言和可用语言列表字段 - 为提示文本添加多语言输入框生成功能 - 实现根据当前语言自动更新提示文本显示 - 重构重启对话逻辑为独立函数并添加重试机制 - 将提示文本多语言配置保存到本地存储
华为交互数字人前端
项目说明:本项目是华为交互数字人 HwICSUiSdk 标准集成项目的定制化开发版本,专为安特威公司打造,由江苏云上企数字科技有限公司研发。
功能说明
核心功能
-
SDK 初始化与销毁
- 初始化:配置服务器地址、机器人ID等参数
- 销毁:释放资源,清理数字人实例
-
对话控制
- 开始对话:启动数字人交互会话
- 停止对话:结束当前会话
- 对话保活:自动保持对话活跃,防止超时断开
-
语音交互
- 语音自动唤醒:无需点击,语音唤醒数字人(唤醒词:"云笙云笙")
- 开始说话:启动语音识别,用户语音输入
- 停止说话:结束语音识别
-
字幕样式设置
- 支持设置容器、提示文字、消息、热点问题标题、热点问题列表的样式
- 包括字体大小、颜色、粗细、行高、背景颜色、透明度、圆角、内边距
- 样式设置自动保存到本地存储,刷新页面后自动恢复
- 支持重置为默认样式
-
字幕容器控制
- 拖拽字幕容器到任意位置
- 调整字幕容器大小
- 位置和尺寸自动记忆,刷新页面后自动恢复
-
多语言支持
- 支持中文和英文语音切换
- 根据后端配置自动加载可用语言列表
-
面板管理
- 所有弹出面板支持拖拽到任意位置
- 面板默认居中显示
- 自适应高度(除字幕样式面板外)
-
其他控制
- 全屏显示:支持数字人全屏模式
- 查看日志:显示 SDK 事件和调试信息
唤醒词
| 唤醒词 | 说明 |
|---|---|
| 云笙云笙 | 主唤醒词 |
| 谢谢再见 | 结束对话 |
| 稍等一下 | 打断/等待 |
快速开始
1. 环境要求
- Node.js 14+
- 现代浏览器(Chrome、Firefox、Edge、Safari 最新版本)
- 支持 WebRTC 和 WebSocket
- 需要麦克风权限(用于语音交互)
2. 启动前端服务
cd frontend
npm install
npm start
前端服务将在 https://localhost:8080 启动(使用自签名证书)。
3. 配置后端服务
确保后端服务已启动:
cd backend/server
npm install
npm start
后端服务应在 http://localhost:3001 运行。
4. 使用流程
- 打开浏览器访问
https://localhost:8080 - 点击页面上的 "⚙️ 连接配置" 按钮
- 点击 "🔑 获取" 按钮获取授权码
- 点击 "初始化 SDK" 开始使用
目录结构
frontend/
├── index.html # 主页面
├── server.js # HTTPS 服务器(开发环境)
├── package.json # 依赖配置
├── styles/
│ └── main.css # 自定义样式
├── scripts/
│ ├── main.js # 主逻辑代码
│ └── api.js # 前端 API 调用模块
├── hwICSUiSdk/ # SDK 目录
│ ├── HwICSUiSdk.esm.js # ESM 模块入口
│ ├── HwICSUiSdk.js # UMD 模块入口
│ ├── HwICSUiSdk.d.ts # TypeScript 类型定义
│ ├── HwICSUiSdk.css # SDK 样式
│ ├── wasmData.js # WASM 虚拟机数据
│ ├── modelData.js # 唤醒词模型数据
│ └── images/ # SDK 图片资源
└── cert/ # SSL 证书(开发用)
├── localhost.pem
└── localhost-key.pem
配置选项
SDK 配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| ENABLE_CAPTION | boolean | true | 启用字幕显示 |
| ENABLE_CHAT_BTN | boolean | true | 启用聊天按钮 |
| ENABLE_HOT_ISSUES | boolean | true | 启用热点问题 |
| SHOW_LANGUAGE_UI | boolean | false | 显示语言切换UI |
| ENABLE_DEVICE_SETTING | boolean | false | 启用设备设置 |
| ENABLE_NETWORK_CHECK | boolean | false | 启用网络检查 |
| AUTO_PLAY_REMOTE_VIDEO | boolean | true | 自动播放远程视频 |
| DEFAULT_MUTE_REMOTE_AUDIO | boolean | false | 默认静音远程音频 |
| ENABLE_LOCAL_WAKEUP | boolean | true | 启用本地语音唤醒 |
| USE_WORKER_WAKEUP | boolean | false | 使用Worker线程运行唤醒模块 |
事件监听
SDK 提供了丰富的事件回调:
| 事件 | 说明 |
|---|---|
| ERROR | 错误事件 |
| JOB_INFO_CHANGE | 任务信息变更 |
| SPEAKING_START | 数字人开始说话 |
| SPEAKING_STOP | 数字人停止说话 |
| SPEECH_RECOGNIZED | 语音识别结果 |
| SEMANTIC_RECOGNIZED | 语义识别结果 |
| ENTER_SLEEP | 进入休眠状态 |
| ENTER_ACTIVE | 进入激活状态 |
| JOB_END | 任务结束 |
调试技巧
-
查看日志面板
- 点击工具栏的 "📜" 按钮打开日志面板
- 可查看 SDK 事件和调试信息
-
调整日志级别 在控制台中执行:
HwICSUiSdk.setLogLevel('debug'); // debug | info | warn | error | none -
浏览器开发者工具
- 使用 Network 面板监控 WebSocket 连接
- 使用 Console 面板查看控制台日志
注意事项
-
HTTPS 要求
- WebRTC 功能必须使用 HTTPS 环境
- 开发环境使用自签名证书,浏览器可能需要授权
-
浏览器权限
- 首次使用需要授权麦克风权限
-
唤醒词
- 语音唤醒需要先初始化 SDK
- 对着麦克风说"云笙云笙"即可唤醒数字人
-
样式保存
- 字幕样式和容器位置会自动保存到浏览器本地存储
生产部署
构建
# 前端为纯静态文件,可直接部署到任意 Web 服务器
Nginx 配置示例
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
root /path/to/frontend;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://backend-server:3001;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
location /hwICSUiSdk/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
唤醒模型更新
模型文件位置
hwICSUiSdk/wasmData.js- WASM 虚拟机数据hwICSUiSdk/modelData.js- 唤醒词模型数据
更新步骤
- 获取新的模型文件
- 替换
wasmData.js和modelData.js - 刷新页面,查看日志确认模型加载成功
常见问题
| 问题 | 解决方案 |
|---|---|
| 模型加载失败 | 检查文件路径,确认文件完整性 |
| 唤醒无响应 | 确认麦克风权限,查看日志 |
| 模型版本不匹配 | 确保两个文件版本一致 |