让文物开口说话:具身交互智能博物馆讲解员带你穿越千年历史
一个程序员在博物馆做了一件事:让千年前的陶俑开口说话
上个月周末,我去本地博物馆逛了一圈。展厅里有一组唐三彩,玻璃柜前面立着一块展板,上面写着三百字的说明。我站在那看了两分钟,旁边的游客走过来,扫了一眼展板,走了。
我当时想:如果这组唐三彩能"开口说话",告诉你它从哪里来、怎么被发掘出来、身上那些颜色在一千多年前是什么样子——那体验完全不一样。
这个念头让我做了一个项目:用大模型+星云SDK,给博物馆做了一个数字讲解员。

为什么不是语音导览器
博物馆不是没有语音导览。你租一个讲解器,走到哪按哪个编号,听一段录音。但那是"录音",不是"讲解"。
第一,它是单向的。你没法问"这个纹饰代表什么"或者"和隔壁展厅那个有什么区别"。你只能听它预设好的内容。
第二,它是碎片化的。每个编号讲一段,但文物之间的关联、整个展览的脉络,录音导览讲不了。
第三,它没有"人"的感觉。博物馆是一个需要沉浸感的空间,一个冰冷的机器声音和一块展板,在体验上没有本质区别。
具身交互智能在博物馆场景中的价值,是把"信息展示"变成"面对面讲解"——一个有形象、有声音、能对话的讲解员,站在展厅里,随时准备回答你的问题。
技术方案
大模型选了DeepSeek。原因是历史知识的准确性和表达的文学性需要兼顾。你问它"这件青铜器上的饕餮纹有什么含义",它需要给出准确的考古学解释,同时语言不能太干巴巴——毕竟是博物馆,需要一些叙事感和画面感。
Agent层做了一个比较有意思的设计:每个展厅有一个"知识图谱",包含文物的基本信息、历史背景、关联文物、发掘故事等。Agent根据观众的问题,从知识图谱中检索相关内容,再交给大模型组织成自然语言。
交互层用星云SDK。博物馆的终端是一台55寸的大屏,放在展厅的角落里。数字人站在屏幕中,背景是展厅的实景照片。
// 博物馆数字讲解员 - 星云SDK
const sdk = new XmovAvatar({
containerId: "#museum-guide",
appId: MUSEUM_APP_ID,
appSecret: MUSEUM_APP_SECRET,
gatewayServer: "https://nebula-agent.xingyun3d.com/user/v1/ttsa/session",
onMessage: (msg) => {
if (msg.type === "voice_state_change") {
const state = msg.state || msg;
if (state === "idle") {
// 讲解完毕,回到"等待提问"状态
showIdleAnimation();
}
}
},
proxyWidget: {
// 展示文物细节图
"widget_pic": (data) => {
if (data.image) {
const detail = document.getElementById("artifact-detail");
detail.src = data.image;
detail.style.display = "block";
}
},
// 字幕:博物馆场景需要典雅风格
"subtitle_on": (data) => {
const sub = document.getElementById("museum-subtitle");
sub.innerText = data.text;
sub.style.fontFamily = "'Noto Serif SC', serif";
sub.style.color = "#d4a574";
sub.style.display = "block";
return false;
},
"subtitle_off": () => {
document.getElementById("museum-subtitle").style.display = "none";
return false;
}
}
});
await sdk.init({
onDownloadProgress: (p) => {
if (p < 100) updateProgress(p);
}
});
讲解逻辑:
// 观众提问 → 知识图谱检索 → 大模型组织讲解
async function handleVisitorQuestion(question, currentHall) {
// 从知识图谱中检索相关内容
const context = await searchKnowledgeGraph(question, currentHall);
// 大模型生成讲解词,要求有叙事感
const explanation = await getLLMResponse(question, {
system: `你是一位博学的博物馆讲解员。
你的讲解风格:生动、有画面感,善于讲故事和细节。
当前展厅:${currentHall.name}
相关背景:${context}`,
style: "narrative"
});
// 同步展示文物细节图
const relatedImage = context.primaryImage;
if (relatedImage) {
showArtifactDetail(relatedImage);
}
// 播报
const sentences = splitSentences(explanation);
sentences.forEach((s, i) => {
sdk.speak(s, i === 0, i === sentences.length - 1);
});
}
观众可以随时打断,比如讲解员在说青铜器的铸造工艺,观众突然问"那它是怎么被发掘出来的":
function onVisitorInterrupt(newQuestion) {
sdk.interactiveidle();
// 等idle后处理新问题
pendingQuestion = newQuestion;
}
一个让我感动的瞬间
项目部署后,我在博物馆蹲了两天观察用户。
大部分人的反应是好奇——走到大屏前,看到数字人,先愣了一下,然后试探性地问一个问题。数字人回答之后,他们会露出"哦,还真能聊"的表情,然后开始连续提问。
有一个画面让我印象很深。一个大概十岁的小男孩,站在屏幕前问数字人:"这个陶俑为什么在笑?"数字人给他讲了陶俑的表情含义,讲了唐代的丧葬文化,讲着讲着,小男孩突然说:"那它活着的时候是不是也很开心?"
那一刻我觉得,技术做到这里,已经不只是"信息传递"了。它在激发好奇心,在建立人和历史之间的情感连接。
关于具身交互智能的一些感受
这个项目让我对具身交互智能有了一些不太一样的理解。
在大多数商业场景中,具身交互智能的价值是"效率"——更快响应、更低成本、更广覆盖。但在博物馆这个场景里,它的价值是"连接"——连接人和知识、人和历史、人和故事。
一个有形象的讲解员,和一个文本框或者语音导览器,在"连接感"上的差距是巨大的。不是因为AI知道得更多了,而是因为它的表达方式更接近"人"了。
星云SDK在这个项目中做的事情,就是让AI的表达从文字变成了声音、表情和动作。当数字人在讲一件文物的故事时,它的语气会有起伏,表情会有变化,这些细节加在一起,构成了"听一个人讲故事"的沉浸感。
如果你也对文化领域的AI应用感兴趣,可以去星云官网看看SDK。用几行代码就能跑一个Demo出来,然后想想:你的城市博物馆里,哪件文物最需要一个能开口说话的讲解员?
暂时无法在飞书文档外展示此内容
官网地址:https://xingyun3d.com/?utm_campaign=daily&utm_source=juzhen
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)