大屏数字人讲解 — 场景设计与核心流程
1. 场景概述
场景:领导或客户到访参观控制室/中控室大屏时,由 3D 数字人替代人工讲解员进行全程讲解。
核心理念:采用混合模式——以预设脚本为主线自动推进讲解,同时允许参观者随时打断提问,数字人回答问题后自动回到主线继续推进。
分层定位:大屏讲解功能不依赖 Dify Agent。Unity 端具备完整的本地指令识别和脚本控制能力,形成产品闭环。Dify Agent 是可插拔的增值能力层——需要部署 Dify 时才启用,提供 QA 问答、ChatBI、设备控制等复杂场景支持。
2. 系统角色与分工
| 角色 | 负责 | 产出 |
|---|---|---|
| 数字孪生产品团队 | 脚本编排引擎产品化 + Unity 端本地指令识别(菜单跳转 + 讲解控制指令) | 可视化脚本编辑器 + 脚本执行器(Unity 端)+ 本地指令识别模型(灌菜单+讲解指令上下文) |
| 实施人员 | 使用编排引擎为具体项目配置脚本 + 配置项目菜单树 | 项目的讲解脚本(含话术 + 大屏联动指令)+ 菜单数据 |
| AI 团队(本团队) | Dify Agent 大屏端技能(QA 问答/ChatBI/设备控制),可选部署 | Agent 技能定义 + 与 Unity 端的对接接口 |
| 内容提供方(客户/售前) | 提供讲解话术、公司介绍、案例数据 | 话术文稿、常见 QA 对 |
3. 整体架构与组件关系
分层原则
大屏讲解功能遵循分层设计:Unity 端构成功能底座,Dify Agent 是可选增值层。
无论是否接入 Dify Agent,Unity 端都具备完整的讲解功能闭环。
核心设计决策
决策 1:菜单识别与宏观意图分类——两个维度,不能合并
| 维度 | 归属 | 上下文粒度 | 判断方式 |
|---|---|---|---|
| 本地指令识别(菜单跳转 + 讲解控制) | Unity 端 | 项目菜单树 + 讲解指令集 | 14B 本地模型灌上下文做匹配,~700ms |
| 宏观意图分类 | Dify Agent | 业务领域:QA / ChatBI / 设备控制 | LLM 语义理解+推理+检索 |
两者的上下文维度和粒度完全不同,强行合并不合理。
决策 2:串行流程
ASR 文本先由 Unity 本地识别,命中则直接执行;未命中且 Dify Agent 可用时,转发给 Agent。
决策 3:pause/resume 归属
| 操作 | 触发方 | 执行方 |
|---|---|---|
| pause | Unity 在转发文本给 Agent 时自行暂停(不需要 Agent 发 pause 指令) | Unity |
| Agent 回答完成 | Agent 通知 Unity "答完了" | Agent → Unity |
| resume | 用户语音指令"继续讲解"/"下一段" → Unity 本地识别触发 | Unity |
决策 4:Dify Agent 可选
- 有 Agent:Unity 本地未命中时转发给 Agent,Agent 回答复杂问题
- 无 Agent:Unity 本地未命中时直接忽略,脚本继续推进,功能不受影响
整体架构
数据流说明
有 Agent 时:
无 Agent 时:
4. 脚本结构定义
脚本执行器理解的最小单位是讲解段(Segment),一个脚本由多个 Segment 组成。
脚本 = [
Segment 1: { 类型: "讲解", 话术: "...", 大屏动作: "切换到公司介绍页", 时长: 30s },
Segment 2: { 类型: "漫游", 话术: "...", 大屏动作: "开始3D漫游", 时长: 60s },
Segment 3: { 类型: "讲解", 话术: "...", 大屏动作: "切换到机电数据页", 时长: 40s },
...
]每个 Segment 包含:
- 话术文本:数字人要说的话(TTS 输入)
- 大屏联动指令:切换页面、播放漫游、展示数据等
- 预计时长(可选):用于超时判断
- 关联 QA 标签(可选):如果该段涉及的话题有常见问题,打上标签便于打断后关联回答
5. 核心流程详解
5.1 脚本启动
5.2 正常推进
脚本执行器按 Segment 数组顺序播放:
两条推进规则:
- 自动推进:上一段话术播完 → 自动播下一段(讲解连贯)
- 间隔等待:可在相邻 Segment 间插入"等待 3-5 秒",模拟人工讲解员的自然停顿
5.3 语音指令识别与转发
Unity 端本地识别的指令集
Unity 端 14B 本地模型灌入两种上下文,识别两类指令:
① 菜单跳转指令
- 示例:"切换到机电数据页""看看能耗数据""打开智慧运维"
- 行为:页面跳转,脚本不中断
- 驱动方式:灌入完整项目菜单树
② 讲解控制指令
- 示例:
- 开始讲解:"带我们看看吧""介绍一下""开始参观"(自然语义匹配,非死板关键词)
- 暂停:"暂停一下""等一下"
- 继续:"继续""继续讲解""接着讲"
- 下一段:"下一段""下一个"
- 结束:"先到这儿吧""结束"
- 行为:控制脚本执行器的播放/暂停/跳转
- 驱动方式:将讲解控制指令集加入模型上下文
③ 其他(未命中以上两类)
- 有 Agent → 自动暂停脚本,转发文本给 Dify Agent
- 无 Agent → 忽略,脚本继续推进
处理逻辑
参观者说话
↓
VAD 检测到有效语音 → 按需启动 ASR
↓
ASR 文本
↓
Unity 本地指令识别(14B 模型,灌菜单+讲解双上下文,~700ms)
↓
├── 命中菜单跳转 → Unity 执行页面跳转,脚本不中断 ✓
│
├── 命中讲解控制 → Unity 执行暂停/继续/下一段等 ✓
│
└── 未命中 → 判定为复杂场景
│
├── 有 Agent → 自动暂停脚本 → 转发给 Dify Agent
│ ├── QA 提问 → 知识库检索回答
│ ├── 数据查询 → ChatBI 查询/仪表盘召回
│ ├── 设备控制 → 静默执行或适当时机告知
│ └── 无意图/闲聊 → 忽略
│ ↓
│ Agent 回答完毕 → 发 answerDone 通知 Unity
│ Unity 收到通知但不自动 resume
│ 等待用户说"继续"/"下一段" 触发 resume
│
└── 无 Agent → 忽略,脚本继续推进意图分类参考(Agent 内)
| 用户意图 | 路由到 | 行为 |
|---|---|---|
| 讲解相关提问 | QA 问答 | 检索知识库 → 生成回答 → answerDone |
| 数据查询 | ChatBI | 查数据/召回仪表盘 → 回答 → answerDone |
| 设备控制 | 设备控制 | 静默执行或适当时机告知 |
| 无意图/闲聊 | — | 忽略 |
5.4 回答/查询处理(有 Agent 时)
Unity 未命中本地指令后,自动暂停脚本并将文本转发给 Dify Agent。Dify Agent 内部进行宏观意图分类并路由到对应的子技能(QA 问答、ChatBI、设备控制等,具体子技能列表待后续定义)。
Agent 回答完毕后发送 answerDone 通知给 Unity,Unity 收到通知但不自动 resume,等待用户语音指令"继续"/"下一段"触发 resume。
回答/查询的范围:
- 项目知识库:该项目的面积、系统配置、节能率等具体数据
- 公司知识库:公司介绍、产品线、案例等通用信息
- 实时数据:能耗趋势、设备状态、故障统计等 IoT/工单数据
- 仪表盘召回:预置的数据看板/仪表盘切换
5.5 回主线逻辑
控制权归属
| 步骤 | 谁负责 |
|---|---|
| ① 转发文本给 Agent 时自动暂停脚本 | Unity(自触发) |
| ② Agent 回答问题 | Agent |
| ③ Agent 答完后通知 Unity | Agent → Unity(answerDone) |
| ④ 用户说"继续""下一段"来触发 resume | Unity(本地识别) |
| ⑤ 执行 resume(跳下一段) | Unity |
跳段策略
为什么跳下一段而不是断点续播?
- 如果参观者问"你们节能率多少?",Agent 回答已包含相关内容,再回到被打断的那句话重复讲很奇怪
- 跳下一段更接近人工讲解员的自然行为:回答问题 → "好那继续往下看"
边界情况处理:
| 情况 | 处理 |
|---|---|
| 所有段都已讲完 | Agent 答完后 Unity 收到 answerDone,但无下一段可跳 → 进入自由问答收尾 |
| 用户不说"继续"(场景变化/离开) | Unity 持续等待,超时(如 5 分钟无交互)自动结束讲解模式 |
| Agent 回答期间用户再次提问 | 嵌套提问:新提问覆盖原流程,Agent 重新处理 |
5.6 完整流程图示
6. 待对齐事项
🟡 待对齐
- 设备控制技能(大屏版):需要基于大屏页面设计有哪些设备可控制、控制方式,目前尚未开始
- 趣味互动场景:科技馆 2C 竖屏场景需要,当前可暂不纳入设计,后续按需接入
✅ 已决策
| 决策 | 结论 |
|---|---|
| 本地指令 vs 宏观意图 | 两个维度,上下文粒度不同,不能合并 |
| 串行还是并行 | 串行。并行需中断 Dify 流程,不支持 |
| 是否需要独立打断检测层 | 不需要。Unity 本地指令识别 + Dify Agent 宏观分类两段串行即可 |
| pause 由谁触发 | Unity 端自行管理:转发文本给 Agent 时自动暂停;用户语音"暂停"指令也会触发 |
| Agent 回答完成后的行为 | Agent 发 answerDone 通知 Unity,Unity 不自动 resume |
| resume 由谁触发 | 用户语音指令"继续""下一段" → Unity 本地识别触发 |
| Agent 是否为必备项 | 否。Unity 本地讲解闭环绕开 Agent 可独立运行 |
| Unity 本地指令范围 | 菜单跳转 + 讲解控制(开始/暂停/继续/下一段/结束) |
