
下班之后的展厅往往是最安静也最可惜的时候——灯光还亮着展品还在原地却没有讲解员给晚到的观众讲一句“这件藏品背后的故事”。很多展厅不是不想延长开放而是人力成本、排班和现场安全管理撑不住。这个问题的解法其实可以换一个思路把“人”换成“AI具身讲解员”让它直接走进你自己的3D展厅里即使现场空无一人线上观众随时进来都有一位不会累、不请假的虚拟讲解员带着看展、回答问题。这篇文章就围绕我做过的一个项目展开讲讲怎么从0到1搭出这套系统涉及哪些核心技术点以及实操时最容易踩的坑。这套东西适合谁来参考如果你是展馆运营、数字文旅团队、科技策展人或者是一个想用AI做点新玩意的独立开发者这篇内容可以帮你少走不少弯路。它不只聊概念更偏向实际操作——3D场景怎么准备AI大脑怎么接讲解员如何在展厅里导航漫游语音交互怎么不掉链子我都会拆开讲清楚。1. 项目全貌给展厅装一个“下班也能值班”的具身讲解员1.1 这里的“具身”到底指什么很多人一听到“具身智能”第一反应就是人形机器人、机械臂、底盘小车。这类实物机器人确实是具身智能的重要方向但放到展厅场景里我做的并不是一台物理机器人而是在3D数字空间里的“具身智能体”。所谓的“具身”核心在于让AI不只是一个聊天框而是以一个可见的、有位置、有朝向、能在场景里自由移动的角色形态存在。它可以在展厅里沿路走到展柜前转身面向展品抬起手指向局部细节然后用语音讲解。这个过程同时涉及空间感知、路径规划、动作控制和对话决策已经具备典型的具身智能特征。为什么强调“虚拟具身”而不是直接上实体机器人原因很直接实体机器人在展厅闭馆后仍有安全巡检、充电、机械磨损、保险责任等问题而且一台机器人只能服务物理现场的人。而3D展厅的AI具身讲解员可以同时服务任意数量的线上访客部署成本低也不需要担心它撞到展品或没电趴窝。它解决的核心问题是“展馆非高峰时段无人讲解”的空白。1.2 系统需求与功能边界动手之前我先梳理了这套系统需要做什么不做什么。边界想清楚后面才不会失控。模块具体功能不做的事3D展厅可漫游的数字空间还原主要展区、展柜、灯光氛围一开始不做超高精度的艺术级渲染具身代理能寻路、移动、转身、朝目标展品聚拢不做复杂的肢体动作先保证移动自然AI大脑能按展线顺序讲解也能回答观众随机提问不追求100%准确但要有拒绝和兜底语音链路讲解词TTY语音播报观众可语音提问先不要做多人实时通话只做单用户会话这个边界非常重要。很多项目卡住不是技术不行而是想一口吃成胖子既要动作捕捉级动画又要大模型满嘴跑火车最后什么都没做好。我最终确定的最小闭环是一个能自动行走、能说能听、能针对展品内容回答问题、支持多人在线访问的3D展厅讲解系统。2. 三大技术支柱三维场景、智能体大脑、交互链路整套系统不是单一技术堆出来的而是三块独立能力拼在一起三维场景负责“在哪”具身导航负责“怎么过去”AI大脑负责“到了说什么、答什么”。2.1 三维展厅从实景到数字孪生的几种做法先解决“3D展厅从哪里来”的问题。我试过几条路线各有优劣手工建模用Blender或3ds Max按图纸搭白模精度可控但速度慢还原真实展馆需要大量时间。实景扫描重建用手机环绕拍摄 云端重建服务比如Polycam、Luma AI或者本地跑COLMAP生成稀疏点云再用3D高斯溅射生成可交互的模型。这个方法对于展项密集的空间很友好能快速得到“像照片一样”的场景。倾斜摄影/激光雷达更适合大范围园区或者建筑外立面展厅室内场景精度反而不如近景摄影测量。我在最终方案里采用了“手工白模 重点展品照片重建”的混合路线。手工白模保证建筑轮廓和动线准确重点展区用3D高斯溅射做高保真还原这样既能控制体量又能让核心展品有“照片级”质感。Web端统一使用glTF/GLB格式因为Three.js原生支持压缩好贴图后加载压力小。有一个容易忽略的点展厅场景不是游戏场景你不需要面面俱到地建模。观众在意的是“走过去、能看清、氛围对”所以灯光和展柜要比地面细节重要得多。我花在调展厅暖光色温上的时间比建模本身还多。2.2 具身让讲解员在展厅里“走起来”数字场景里让AI代理动起来听起来简单实际牵扯到几个核心问题寻路、碰撞和视线。先说导航。如果只是让AI“瞬移”到展品旁边视觉上会很假而且少了“带着观众逛展”的节奏感。正确做法是先把展厅的地面数据烘焙成导航网格NavMeshAI代理在地面上走路径遇到墙和展柜能自动绕开。Three.js生态里可以用recast-navigation这个库或者是Unity的NavMesh方案。路径计算一般用A*算法在导航网格上找路找到后还要做路径平滑不然角色走路会像折线。再说“面向展品”这个细节。AI讲解员到了展柜前不能傻站着它需要转身面向展品并且根据展品大小调整停靠距离。我用的方法是在展品周围预先放置“讲解停靠点”每个停靠点包含坐标和朝向角。AI代理到达停靠点后做一段平滑旋转把视线朝向锁定到展品中心。这样观众看到的画面就是“讲解员走过去、停下来、转个身、开始介绍”非常自然。最后是视线和触发判断。AI不能隔着墙看到展品所以我会在展厅空间里做射线检测只有站在停靠点、且与展品之间没有遮挡时才触发讲解。这个细节看起来小但实战中能避免不少尴尬——比如刚才还在讲A展品下一秒AI隔着一堵墙“看到”了B展品立刻跑题。2.3 大脑与大模型讲解内容从哪来、怎么答“具身”给了AI身体大模型给了它灵魂。在讲解这件事上我用到的是“知识库 大模型生成”的组合。具体分工是这样的展品档案每个展品准备一份结构化的知识卡包括名称、年代、材质、尺寸、历史背景、故事轶事、典型问题。这是第一手的可信资料。向量检索RAG把知识卡切块后向量化入库观众问“这件瓷器为什么是青色的”系统先检索到相关展品片段再把片段交给大模型组织语言。大模型对话负责把检索到的资料组织成口语化的讲解同时配合讲解员的人设。讲解员不能像一个论文机器它要有亲和力偶尔幽默但涉及不确定信息时要主动说“这部分资料里没有提到”。在提示词里我固定了讲解员的“职业身份”不虚构展品信息、不评价其他展区、回答尽量控制在90秒以内。同时预留了一个内部指令接口——当大模型输出“参观路线调整”的结构化指令时前端可以解析并让AI代理去下一个展位。3. 实操复盘从0到1搭一个可用的3D展厅AI讲解员这一部分我用自己项目的真实路径来讲。下面所有步骤都是可以复现的但具体参数需要根据你的展厅大小和内容量调整。3.1 核心架构与部署形态先画一张系统结构图在心里用户打开网页加载3D场景AI讲解员作为场景内的角色出现用户可以选择“跟随模式”或“自由探索”语音或文字输入问题后前端把音频转文字发给后端后端组合“用户问题 展品上下文 讲解员身份提示词”请求大模型API返回的结果一部分成为语音讲解一部分成为移动控制指令前端执行移动并把文字和音频同时渲染给用户。后端我用的是Python FastAPI负责四件事会话管理、RAG检索、大模型调用、结构化指令解析。前端用Three.js加载3D场景语音部分用Web Audio API播放流式音频语音识别先用浏览器内置的Web Speech API过渡后续再换成云端ASR服务提高准确率。3.2 后端AI服务的搭建细节讲解服务的第一版我写了这样一个核心接口app.post(/api/chat) async def chat(payload: ChatRequest): # 1. 根据用户当前位置找到附近的展品 nearby get_nearby_exhibit(payload.position) # 2. 从知识库检索相关展品资料 docs vector_store.search(payload.question, top_k3) # 3. 组装提示词 system_prompt build_prompt( exhibitnearby, context_docsdocs, identity你是展厅的金牌讲解员语气自然亲切不编造信息。 ) # 4. 调用大模型 result llm.chat(system_prompt, payload.question) # 5. 从结果里解析出是否含移动指令 move_cmd extract_move_command(result) return {answer: result.text, move: move_cmd}向量库我用了轻量方案Chroma直接把展品知识卡按段落写入。没有用特别复杂的工程重点在“检索召回准确”我会把“展品名称”“常见问题”“展品故事”分别建立索引这样观众就算问法不标准也能召回正确内容。3.3 前端3D与讲解员接入Three.js加载3D展厅模型后讲解员本身其实是一个带绑定动画的GLB模型头顶上额外挂了一个跟随的摄像机。观众进入后自动切换到“讲解员视角”跟在AI身后走这样最有沉浸感。为了让讲解员“认识路”我把展厅地面预先烘焙成Recast导航网格。烘焙前一定要清掉所有展柜和墙体的底部轮廓否则导航网格会被切得支离破碎。导航路径规划出来后我会在每一帧更新位置并对路径做一点偏移插值让走路不是一条精确的直线而是带一点自然摇晃。讲解触发我设计成“双条件”距离小于3米 面向角度小于45度。两个条件都满足后AI开始讲解并在屏幕上显示对应的展品介绍卡片。观众随时可以打断提问这在大模型时代变得非常简单——只要在语音采集时做一个音量端点检测听到提问就暂停当前讲解进入问答模式。3.4 联调顺序与部署经验联调时别一次把所有功能全上。我建议按这个顺序先跑通“文字问答”观众打字问展品AI正确回答。再接入“语音播放”确认讲解音频能顺滑播放不卡顿。然后接“语音识别”测试口音、环境噪声下能不能转对文字。最后上“具身移动”让AI讲解员能在导航网格上走到展品前。每一步都稳定了再往后走排查难度会低很多。部署时我用Docker把后端打包前端用静态站点托管再加一层Nginx转发API。大模型API Key放在后端环境变量里前端的请求只到我们自己后端不直接暴露给用户。上线第一版跑在2核4G的云服务器上完全可以支撑小几十人同时在线。4. 避坑手册我踩过的5个坑和排查方法这个项目做了几个星期最大的收获其实不在功能实现而是那些让人崩溃又最后恍然大悟的坑。整理五个高频问题给后来者提个醒。4.1 讲解员在门口“原地转圈”这是导航问题上最经典的现象AI代理不断尝试走向展品但路径规划总找不到可行的路线。原因大多是导航网格没有覆盖AI代理的起始位置或者起始点被某个展柜底座挡住了。排查方式把导航网格可视化打开看看AI代理出生点是否在绿色可走区域内。不在的话把起始位置稍微挪到安全区或者重新烘焙网格把包围盒扩大一点。千万不要手动去拖AI的位置会有物理穿透的隐患。4.2 AI回答“超纲”讲出来跟展品没关系大模型很容易犯一个毛病用户问“这把椅子是哪年设计的”它自动跟聊到“这把椅子在现代家具史上的地位”甚至开始推荐类似风格的产品。这听起来很聪明但不符合讲解规范。我最后是靠三层约束解决的RAG强约束回答只能基于检索回来的资料系统提示语写了“如果你不知道直接说不知道”。上下文限制每一轮对话只带上当前展品和上一轮的问题不带全局记忆防止话题越滚越远。后置校验大模型输出后后端用一个小模型跑一遍“相关性评分”低于阈值就忽略改用预设的通用回复。三层下来基本看不见“跑题式讲解”了。4.3 语音延迟导致“迟钝感”最早接入TTS时讲解员要先等大模型全文生成完再去合成语音最后才开始播报。一来一去整段延迟超过5秒观众体验很差感觉像在对一个反应迟钝的机器。改进方案是“流式输出 分段TTS”。我让大模型按句子流式返回每返回一句话就立刻调用TTS合成前端收一句播一句。整体听起来虽然还有轻微延迟但观众会觉得是“讲解员在看展品酝酿措辞”而不是系统卡死了。如果还想更顺滑可以提前预合成最常用的开场白和欢迎语缓存下来进入展厅第一秒就能开口。4.4 移动端一进展厅就崩溃3D场景对手机来说负担很重尤其是带高斯溅射重建的展品模型动不动几十万顶点加载后手机直接掉帧到幻灯片。后来做了几件事展品模型用Draco压缩顶点数压到原来的三分之一。动态调整LOD近看高模远看低模。加载时先显示展厅外壳展品模型异步延迟加载。纹理全部压缩到2K以内并且使用BaseColor/AO法线等PBR贴图。这一套下来中端安卓机也能稳定在30帧以上。对于展厅类项目“能跑”比“好看”重要先保证范围覆盖。4.5 多用户同场景时的状态不同步最初我做了最简单的方案每个用户本地各自模拟AI讲解员位置互不干扰。结果很快发现如果观众走到某个展品附近本地触发了讲解但另一个视角看AI还在往前走状态全乱套了。改进思路是后端用一个“权威状态”统一维护AI讲解员的当前位置、当前展品、当前讲解状态。前端每秒钟上报一次用户位置后端返回讲解员的最新状态前端做位置插值。这样所有用户看到的AI动作虽然有一两百毫秒延迟但保持全局一致。多人实时同步如果要更精细还可以引入房间协议不过对一般线上展厅来说权威状态方案已经足够了。5. 从演示到落地扩展方向与运营心得5.1 把虚拟讲解员“接入”真实展厅虚拟世界里跑通了很多人会问下一步能不能接回现实。目前可以做两种轻度落地第一种是AR增强观众在物理展厅里举起手机AI讲解员以虚拟形象浮现在展品前边说边指示——这只需要在现有3D场景上叠加一个真实设备的位姿跟踪就能实现。第二种是投影引导在展柜旁边的墙面上投射AI讲解员的形象当观众靠近时自动播放讲解内容相当于把线下的“人声感应广播”升级为“有角色、有动作的虚拟讲解员”。5.2 让讲解员记住观众讲解员如果对所有观众都讲同一套词时间长了就没意思了。我后来给系统加了一个很轻的“观众画像”允许观众在进入时选兴趣标签历史、艺术、科技、亲子再记录他们停留超过30秒的展品。之后AI讲解员在路过对应展品时会多说一句“刚才您在青花瓷前看了好久这件展品的釉色工艺我再补充一点”。效果非常好观众会明显感觉到被照顾了。这个功能不难本质就是一个用户session里保存兴趣向量每轮对话组装prompt时带上。但它对体验的提升远远大于我问过的任何技术参数。5.3 内容持续更新的工作流一套讲解系统最怕内容过期。展厅换展、展品调整是常态所以我搭了一条“半自动内容更新”的工作流运营人员只需要在后台更新展品知识卡系统自动切分、向量化、重新生成讲解词初稿再由人工审核一遍审核通过后点击发布。整个过程从原来的“写稿—对照—录入—测试”四步压缩到“提交资料—AI拟稿—人工确认”三步。线下讲解员最头疼的反复背词在这里变成了策划和审核。最后再说一点我自己的体会。这套项目能跑起来不靠某一个大模型而是靠“3D场景、具身导航、AI对话”三块的合理配合。每一块单独拎出来都不算新鲜但把它们揉进一个“下班后也能值班的展厅讲解员”里就有了一种新的生产力。对于想尝试的人我建议从最简版本开始先用一个房间、三件展品、一个AI对话接口跑通“走到展品前、面朝展品、开口讲解”这个闭环再去追求复杂场景和炫酷特效。走通一次之后你会发现真正困难的不再是技术而是怎么让这个数字讲解员更像一个“人”。