一个程序员在博物馆做了一件事:让千年前的陶俑开口说话

上个月周末,我去本地博物馆逛了一圈。展厅里有一组唐三彩,玻璃柜前面立着一块展板,上面写着三百字的说明。我站在那看了两分钟,旁边的游客走过来,扫了一眼展板,走了。

我当时想:如果这组唐三彩能"开口说话",告诉你它从哪里来、怎么被发掘出来、身上那些颜色在一千多年前是什么样子——那体验完全不一样。

这个念头让我做了一个项目:用大模型+星云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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐