Skip to content

大屏数字人讲解 — 场景设计与核心流程

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 归属

操作触发方执行方
pauseUnity 在转发文本给 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 答完后通知 UnityAgent → Unity(answerDone)
④ 用户说"继续""下一段"来触发 resumeUnity(本地识别)
⑤ 执行 resume(跳下一段)Unity

跳段策略

为什么跳下一段而不是断点续播?

  • 如果参观者问"你们节能率多少?",Agent 回答已包含相关内容,再回到被打断的那句话重复讲很奇怪
  • 跳下一段更接近人工讲解员的自然行为:回答问题 → "好那继续往下看"

边界情况处理

情况处理
所有段都已讲完Agent 答完后 Unity 收到 answerDone,但无下一段可跳 → 进入自由问答收尾
用户不说"继续"(场景变化/离开)Unity 持续等待,超时(如 5 分钟无交互)自动结束讲解模式
Agent 回答期间用户再次提问嵌套提问:新提问覆盖原流程,Agent 重新处理

5.6 完整流程图示


6. 待对齐事项

🟡 待对齐

  1. 设备控制技能(大屏版):需要基于大屏页面设计有哪些设备可控制、控制方式,目前尚未开始
  2. 趣味互动场景:科技馆 2C 竖屏场景需要,当前可暂不纳入设计,后续按需接入

✅ 已决策

决策结论
本地指令 vs 宏观意图两个维度,上下文粒度不同,不能合并
串行还是并行串行。并行需中断 Dify 流程,不支持
是否需要独立打断检测层不需要。Unity 本地指令识别 + Dify Agent 宏观分类两段串行即可
pause 由谁触发Unity 端自行管理:转发文本给 Agent 时自动暂停;用户语音"暂停"指令也会触发
Agent 回答完成后的行为Agent 发 answerDone 通知 Unity,Unity 不自动 resume
resume 由谁触发用户语音指令"继续""下一段" → Unity 本地识别触发
Agent 是否为必备项否。Unity 本地讲解闭环绕开 Agent 可独立运行
Unity 本地指令范围菜单跳转 + 讲解控制(开始/暂停/继续/下一段/结束)

Released under the Private License.