大家好,我是 Florian,12 年产品开发经验,目前专注 AI Agents & Workflows 构建。
工作中经常需要做PPT,一份 PPT 做完,后面经常还要讲很多遍。内部培训要讲,给客户介绍要讲,换一批人又得重新讲。录成视频虽然省事,但对方看到一半有问题,没办法直接追问;接一个普通的 AI 客服,它又不知道观众正在看第几页,回答很容易脱离当前内容。所以我一直想试一件事:能不能给 PPT 配一个 AI 讲解员,让它按页讲内容,观众中途可以打断提问,回答完以后还能接着原来的位置继续讲。
最近看到魔珐星云黑客松里的 PPT 智能讲解系统和 PPTalk,我发现这个想法已经有了比较完整的实现基础。它提供数字人的实时渲染、说话和交互能力,剩下要做的,是把 PPT 页面、讲解词、资料问答和打断续讲接进同一套流程里。
这篇文章就以一份真实 PPT 为例,看看这套方案怎么搭、哪些能力可以直接使用、哪些部分仍然需要自己开发,以及它究竟适不适合企业里的培训、产品介绍和重复讲解场景。
这套应用要补齐 8 个环节
魔珐星云 SDK 负责数字人的渲染、说话和状态切换。PPT 解析、页面控制和资料问答要在应用里补上。
第一步:创建数字人应用
登录魔珐星云控制台,在“应用管理—驱动应用”里创建应用,选择形象、场景、音色和表演风格。这里还要确定横屏或竖屏,网页里的数字人容器要使用相同的比例。
创建应用时,可以选择预览模式(横屏/竖屏)

同时,根据自己的诉求,可以选择不同国家的语言、音色
创建后进入 App 密钥页面,保存 App ID 和 App Secret,后面连接 SDK 时要用。
第二步:先跑通官方 Demo
官方 JS Demo 已经接好了数字人、LLM 和 ASR,可以直接拿来搭第一版。电脑准备好 Node.js 16 以上版本和 pnpm,然后运行:
git clone https://github.com/publicize0828/XmovLiteAvatarJSDemocd XmovLiteAvatarJSDemopnpm installpnpm run dev
打开 http://localhost:5173,在配置面板填写三组信息:
- Avatar:魔珐星云的
App ID / App Secret - LLM:模型和 API Key;使用 Coze 时还要填写 Bot ID
- ASR:选择腾讯云、讯飞或 xmovASR,再填写对应密钥
先用文字输入发一个问题,确认数字人能加载并播报模型回答,再测试语音输入。到这里跑通的是“输入 → LLM → 数字人口播”,还没有接入 PPT。
第三步:把 PPT 整理成应用能读取的资料
官方 Demo 没有内置 PPT 上传和解析。第一版可以把每一页导出成图片,放进项目的 public/slides/,再把页面文字和演讲者备注整理到 slides.json。
[ { "slide": 1, "image": "/slides/01.png", "title": "这一页的标题", "content": "页面上的正文和图表说明", "notes": "演讲者备注", "narration": "数字人实际播报的讲解词" }]
页数不多时,手动整理反而方便检查。需要批量处理大量文件,再增加 PPT/PDF 解析和图片转换服务。这一段是应用侧的工作,魔珐星云不会自动完成。
第四步:增加 PPT 展示和翻页控制
在 Demo 里增加一个 SlideViewer 组件,一边显示当前页图片,一边保留数字人。页面控制器需要记住当前页、讲解状态和被打断前的位置:
const presentation = { currentSlide: 0, mode: "presenting", // presenting / listening / answering / paused resumeSlide: 0, autoPlay: true}
点击上一页或下一页时,同时更新图片和 currentSlide。自动讲解时,等数字人的播报结束回调触发,再进入下一页,不要用固定时长控制翻页。
魔珐星云还提供了 widget_slideshow 事件,可以返回图片 URL 和页码。SDK 不会替你渲染 PPT,使用这条路线时,要在 proxyWidget 里写好页面展示逻辑。
第五步:提前生成每一页的讲解词
逐页内容相对固定,我会先生成讲解词并保存到 narration,播放时直接读取。这样翻页更稳,发布前也能逐页检查。
请根据下面这页 PPT 写一段口语化讲解。页面标题:{{title}}页面正文:{{content}}演讲者备注:{{notes}}要求:- 先说本页结论,再解释图表或细节;- 控制在 120—180 个汉字;- 不补充资料中没有的数字和承诺;- 不逐行朗读页面文字。
120—180 个汉字是我给这次演示设置的检查点,可以按内容调整。涉及价格、参数和政策时,讲解词需要人工复核。
第六步:让 AI 根据 PPT 回答
观众提问时,模型要收到当前页码、当前页内容和相关资料。内容较短的 PPT 可以直接带上全部逐页文本;资料很长时,先检索相关页面,再把命中的内容交给模型。
你是一名 PPT 讲解员。当前页码:{{current_slide}}当前页内容:{{current_content}}相关资料:{{retrieved_slides}}用户问题:{{question}}只根据相关资料回答。资料没有答案时,直接说“这份 PPT 没有提供相关信息”。回答尽量简短;引用其他页面时,说明页码。
官方 Demo 的 LLM 接入在 src/services/llm.ts,主要业务状态在 src/stores/app.ts。PPT 上下文和问答模式可以从这两个文件接入。
第七步:接好打断和续讲
观众按下“提问”后,应用先把 currentSlide 保存到 resumeSlide,清空还没送出的讲解队列,再调用 interactiveidle() 停止当前播报。语音识别结束后让数字人切到 think(),模型返回答案,再交给 speak()。
官方 Demo 的 ActionManager 已经负责分句和播报队列,继续沿用它,不要连续直接调用多次 speak()。官方文档也要求两次完整播报之间先切回 interactive_idle,等语音状态回调确认上一段结束,再发送下一段。
回答结束后显示“继续讲解”和“留在本页”。选择继续时,从 resumeSlide 恢复;选择留在本页时,保留页面并等待下一个问题。
第八步:构建并部署
本地测试完成后运行:
pnpm run buildpnpm run preview
构建结果会出现在 dist 目录。把它部署到 Web 服务后,要确保页面使用 HTTPS,官方文档注明部分方法不支持普通 HTTP。
开发阶段可以在本地配置密钥。公开上线时,不要把 LLM 和 ASR 的 Key 写进前端代码;通过服务端代理请求,魔珐星云的正式鉴权方式也要与官方确认。
发布前按这张表验收
我会故意问一个 PPT 里没有答案的问题。如果 AI 顺手编了一段,这个版本就不适合讲产品参数、培训规则和政策内容。
这类 PPT 更适合增加 AI 讲解员
这套方案更适合需要反复讲解的资料,例如员工培训、产品介绍、课程资料和展厅大屏。观众经常问相似的问题,资料范围又比较清楚,做成交互式讲解才有实际价值。
一次性汇报没必要增加这套配置。合同、财务决策和未公开资料也要谨慎处理。
成本和商业授权
魔珐星云当前按积分计费。官方定价页显示,基础音色实时驱动消耗 0.5 积分/分钟,Pro 音色为 2 积分/分钟;开发者调试默认共 3 路并发。用于商业场景前,还要确认书面授权和最终报价。
做完以后,我会重点看两件事:观众能不能顺畅打断,AI 能不能守住 PPT 的资料范围。数字人好不好看一眼就能判断,这两项才决定它能不能真的替人接住重复讲解。
如果你有一份能自己讲、还能回答问题的 PPT,你会先拿它做什么?
体验地址:https://www.xingyun3d.com/login-register
新用户福利:新用户注册可以填写魔珐星云的邀请码:[JMZAQFXSRT]可免费获取1000积分