AIsaAIsaStudio English 打开 AIsa Studio

NVIDIA 员工用 Nemotron 语音智能体打造会吐槽的万圣节 MonsterHouse

原标题:nemotron-halloween

NVIDIA 员工分享其为万圣节搭建的 MonsterHouse:一个能听懂敲门访客、用暴躁海盗船口吻对话的车库门角色,由 Nemotron 语音智能体(Voice Agent)在单工作站上驱动。链路包括 Nemotron 3 ASR 识别语音、Nemotron 3.5 Bolt E4B 4GB(4-bit 量化)生成回复,搭配数千条多轮对话训练的 LoRA 适配器塑造性格;Magpie TTS Zeroshot 用 3-10 秒参考样本合成带七种情绪的语音;Audio2Face-3D 在 Unreal Engine 5 中驱动口型,Nemotron 3 Nano Omni、YOLO 与 ByteTrack 提供访客服装识别和计数。实测中位延迟为语音结束到出声 1.70 秒,缓存回复 0.72 秒;系统运行在 RTX PRO 6000 Blackwell Max-Q 加 RTX PRO …

为什么值得看

作者完整拆解了从语音识别、本地小模型对话到口型动画的全链路做法和延迟数据,可迁移到类似的实时角色项目。

阅读原文 ↗10月31日 AI 日报

本页的摘要、推荐理由与解读出自 AIsa Studio 的 AI 风向智能体,原文版权归原作者所有。

深度解读

发生了什么

NVIDIA 员工在 Hugging Face 博客上介绍了自己为万圣节打造的互动装置 MonsterHouse:一扇会说话、会抱怨的车库门。它以暴躁海盗船转世为背景设定,倾听上门讨糖的孩子并作出回应,听到「please」会软化,听到「thank you」则给出温暖告别。整套系统基于 NVIDIA Nemotron Voice Agent,在一台工作站上运行。

关键细节

系统由五个环节组成:

  • 听:Nemotron 3 ASR(流式英文模型)把访客语音转为文本;
  • 想:Nemotron 3.5 Bolt E4B 4GB,一个面向本地对话智能体的开源小模型,负责生成回复,并用 LoRA 适配器注入性格;
  • 说:Magpie TTS Zeroshot 用一段短参考音频合成语音,支持七种情绪,由 LLM 输出的情绪标签决定语气;
  • 演:Audio2Face-3D 把干净语音转为 Maya 建模、导入 Unreal Engine 5 的嘴部动画;
  • 看:Nemotron 3 Nano Omni 描述访客服装,YOLO 与 ByteTrack 负责计数和跟踪。

作者比较了十余个模型后选定 Bolt E4B,称其占用资源小于 Qwen3 30B-A3B 等候选。为了塑造性格,他用一个本地智能体和大模型生成并评审了 5000 多段多轮对话,训练出各候选模型的 LoRA。作者注明自己在 NVIDIA 工作,因此在模型公开发布前就能测试。

性能上,Bolt Q4 加 TTS 的语音结束到出声中位延迟为 1.70 秒,使用缓存回应可降至 0.72 秒。管道会先释放可朗读文本再等整句生成完毕,并用预置的问候语和糖果笑话覆盖常见情形。算力分配上,语言与语音管线跑在 RTX PRO 6000 Blackwell Max-Q 上,Unreal 与 Audio2Face-3D 跑在 RTX PRO 4000 Blackwell 上,以保证动画帧率稳定。

为什么重要

这个项目展示了开源 Nemotron 语音智能体栈在单台工作站上跑通「听—想—说—演—看」全流程的可行性,可作为类似互动角色的参考路径。作者总结了可复用的实践经验:对话状态放在应用层而非依赖模型记忆;提示词不够时训练 LoRA;用缓存文本库和录音库节省生成与合成时间,算力受限时甚至可以只靠 ASR 加缓存音频运行。文中也坦承尚未完成的部分:真实访客、夜间光照下的检测测试,以及自动发糖,都还没有验证。

对谁有影响

对想在本地部署语音交互智能体、互动角色或展陈装置的开发者最有参考价值;文中给出的从语音管线起步、逐步加模型、声音和脸的搭建路径,以及 build.nvidia.com 和 Hugging Face 上的模型入口,都可直接照做。

全文翻译

以下翻译只覆盖原文的前一部分,其余内容请看下方原文。

利用 NVIDIA Nemotron 开源模型打造鬼屋

或者更准确地说……

哇!快滚出我的草坪!

BlogThumbnail

TL;DR(太长不看): MonsterHouse 是我为万圣节制作的一个交互式投影项目。它会倾听前来讨糖的孩子,用一位脾气暴躁的老海盗船的声音回答他们,而当访客们记得礼貌时,它的语气也会变得柔和。它基于 NVIDIA Nemotron Voice Agent 构建,使用了 NVIDIA 的 Nemotron ASR、Nemotron 3.5 Bolt E4B 4GB、Magpie TTS Zeroshot 和 Audio2Face-3D,并且运行在一台工作站上。

我希望在万圣节来我家拜访的孩子们能以一种有趣且独特的方式互动。房子将掌握主导权并发放糖果,但比起恐怖,它更多是脾气暴躁。不知何故,我的解决方案是给车库门装上嘴巴,并教会它抱怨。

于是有了 MonsterHouse:一个脾气暴躁的老建筑,有着海盗故事、火焰般的咧嘴笑,以及对“请”字有着可疑的弱点。NVIDIA Nemotron Voice Agent 提供了对话基础。Nemotron Speech 负责聆听,Bolt E4B 是大脑,NVIDIA Magpie TTS Zeroshot 提供实时语音,而 NVIDIA Audio2Face-3D 则让木制嘴巴动起来。

Monster House 的工作原理

充满木屑的笑容

嘴巴是最先完成的。我想象着木制车库门的木板分裂成锯齿状的嘴唇,每当他张开那被诅咒的嘴巴时,地狱的烈火就会照亮车道。他需要看起来古老、富有表现力,并对访客的存在感到轻微的不悦。

fireMouth一个有很多话要说的房子的几种表情。

创建自定义动画 rig 是构建过程中劳动密集型的部分之一。经过一番折腾使其屈服后,我可以导出面部表情形状,供 Audio2Face-3D 后续进行动画处理。角色 SkelMesh 是在 Autodesk Maya 中构建的,然后导出到 Unreal Engine,并在门后添加了虚拟火焰和特效。由于没有眼睛、眉毛和眨眼动作,他是一个出奇地节省资源的怪物。

当所有关于构建角色的荒谬工作正在进行时,NVIDIA 构建了 Nemotron Voice Agent。原本被认为是构建中最困难的部分,现在变得相当有趣、迭代式且容易上手。我开箱即用地拥有了聆听、对话和语音的基础。房子已经有了一张嘴。现在他终于有东西可以抱怨了。

教导无礼行为

房子需要一个与其性格一样古怪的过去,所以我构思了一个背景故事:这座房子是由一艘沉没海盗船的木材建造的,被其暴风雨般的过去所困扰。这些航海相关的抱怨现在有了理由。这就是那艘船,转世成为房地产,对此并不完全满意。

表演需要一个指南,一条从问候到道别的路径,沿途提供糖果。起初,房子会用诸如“我很忙地在发牢骚,去打扰邻居吧!”之类的言论打发访客。但坚持会让他的防线崩溃。“请”字可以立即突破防线,而“谢谢”则能赢得温暖的告别。一旦访客说服了他,我希望他能保持被说服的状态。没人想和同一个车库门谈判两次。

这正是 Voice Agent 真正发光的地方。你可以选择任何你喜欢的 LLM。因为我想让系统离网运行且完全独立,所以我拥有内存和计算预算。

这个角色不仅仅需要一个说“要脾气暴躁”的提示。它必须遵循主对话流程,回应访客实际说的话,跟踪遭遇状态,并为管道的其余部分留出足够的计算资源。

在测试了十几种模型后,我选择了 Bolt E4B 来提供实时对话。这是一个专为本地对话代理和交互角色设计的小型开源语言模型,这非常符合一扇会说话的车库门的定位。我使用 4-bit 量化版本(名称中的“4GB”指代此意)作为默认响应模型,并提供 BF16 检查点 用于比较。

如果到现在还不明显的话,我在 NVIDIA 工作,因此我能够在 Bolt E4B 公开发布之前对其进行测试,发现它是一个不错的选择,与其他领跑者——Qwen3 30B-A3B 和 Qwen 3.6 35B-A3B 相比,它具有更小的 footprint(占用空间)。

它在 Nemotron Voice Agent 管道内工作,将访客所说的内容转化为下一个适当不情愿的回复。

Bolt 提供了对话基础。我的提示词、应用逻辑以及在数千个审查过的示例对话上训练的 LoRA 适配器将其塑造成了这艘特定的固执之船。

创建一个包含超过 5000 轮多轮对话的数据集意味着我可以为我认为足够好的每个模型训练 LoRA。有些训练大约需要一小时,有些则需要几个小时。一个本地代理运行了一切并基准测试结果。这个代理和一个非常大的 LLM 最初创建并评判了这个数据集。这发生在夜间或我从事日常工作的时候。

放置好 LoRA 后,我会检查回复的连贯性、时机和语调,对模型和适配器进行质量、重复性和速度的基准测试,然后听取表演效果。房子最终应该让步,但不能变成快乐的礼宾服务。一点阻力是魅力的一部分。与车库门无休止的争论则不是。

值得等待的声音

image两个捷径,两个输出。 authored text 跳过新的对话生成,saved audio 跳过合成。清晰的语音单独驱动动画,与观众效果分离。

如果一个鬼屋抱怨得太慢,就会失去权威感。管道会在整个答案完成之前释放可说的文本,这样房子可以在句子的其余部分还在路上时就开始说话。准备好的问候语和糖果笑话涵盖了熟悉的遭遇:文本库节省了语言模型的工作,缓存的录音节省了语音合成。即使是古老的老顽固也从排练中受益。

median end-of-speech-to-audio with Bolt Q4 & TTS = 1.70 seconds
median end-of-speech-to-audio cached responses = 0.72 seconds
(note: speech-end detection currently waits for 300 ms of silence )

NVIDIA Magpie TTS Zeroshot 将文本转化为英式英语。它的零样本语音条件使用简短的参考样本而不是训练过的声音;我提供的是脾气暴躁的海盗角色样本。房子有七种情绪,从脾气暴躁和威胁到 amused(被逗乐)和 delighted(欣喜),情绪标签由提示模板决定并由 LLM 提供,从而决定每行台词的演绎方式。由于每种情绪都需要不同的 3-10 秒语音样本,我在 UI 的工具选项卡上添加了一个“Sample your Voice”(采样你的声音)模块。然后我可以用我最快乐的海盗或最愤怒的海盗声音朗读并录制一行示例文本。当“Go”(开始)时,Bolt E4B 决定说什么,Magpie 则将那些文本转化为带有适当喜悦或绝望的语音。

接下来是 Audio2Face-3D 和我在 Epic 的 Unreal Engine 中创建的 3D 角色场景。默认模型权重最适合干净的男性或女性中性声音,不要太深也不要太高(根据你的用例选择合适的性别化模型)。我希望房子有一个非常低沉和恶魔般的声音,带有回声和混响。在这种情况下,由于我的语音样本没有那种戏剧性的厚重感,这实际上是一个好处。Audio2Face-3D 从样本中获取清晰的语音,第二个音频流添加可调节的实时人声效果并通过扬声器播放。

为了保持一切顺利运行,我将工作分配到一对 GPU 上:语言和语音模型管道运行在 NVIDIA RTX PRO 6000 Blackwell Max-Q 上,而 Unreal Engine 图形和 Audio2Face-3D 运行在 NVIDIA RTX PRO 4000 Blackwell 上。问题不在于内存,而在于计算能力。我希望无论代理管道正在做什么处理,都能保持动画帧率一致。

语音、动画和效果必须同时到达。一个令人信服的怪物不仅仅需要一个快速的回答;它需要听起来像是抱怨来自建筑物本身。在我的案例中,确实如此。同步音频交付的调整是可用的。我发现我可以设置它们然后忘记它们。(100ms 补偿了 Audio2Face-3D 的缓冲)

怪物有一个控制台

在某处,“让房子说话”需要一个充满控件的界面。我可以试听缓存的行,调整开场情绪,跟随对话,改变语音处理方式并调整嘴部动画。选项卡涵盖对话、模型选择、录音、提示词、性能监控和摄像头 feed,还有一个音板和自定义对话字段让我把话语塞进他的嘴里。还有模型加载控件和 Unreal Engine 连接指示器,因为有时候怪物不是在生闷气。他是断开了连接。

imageMonsterHouse 控制台,带有音板、自定义行、开场情绪和对话流程。

火焰和光芒也加入了演出。可编辑的规则将视觉线索与演绎联系起来:实时线索以语音开始,而录制的表演可以遵循保存的时间线。我可以在不重建场景的情况下指导情绪的变化。

Live 模式运行讨糖角色。Demo 模式说服房子解释他自己。Microphone 模式让我通过 hou

查看原文

Building a Haunted House with NVIDIA Nemotron Open Models

Or rather…

Boo! Now Get Off My Lawn!

BlogThumbnail

TL;DR: MonsterHouse is an interactive projection I created for Halloween. He listens to trick-or-treaters, answers in the voice of a grumpy old pirate ship and softens when visitors remember their manners. He is built on the NVIDIA Nemotron Voice Agent with NVIDIA Nemotron ASR, Nemotron 3.5 Bolt E4B 4GB, Magpie TTS Zeroshot and Audio2Face-3D, and he runs on a single workstation.

I wanted the kids visiting my house at Halloween to interact in a fun and unique way. The house was going to be in charge and giving out the treats, but more grumpy than scary. Somehow, my solution was to give the garage door a mouth and teach him to complain.

That became MonsterHouse: a grumpy old building with pirate stories, a fiery grin and a suspicious weakness for “please.” NVIDIA Nemotron Voice Agent supplies the conversation foundation. Nemotron Speech does the listening, Bolt E4B is the brain, NVIDIA Magpie TTS Zeroshot is the live voice, and NVIDIA Audio2Face-3D makes the wooden mouth talk.

How Monster House works

A grin full of splinters

The mouth came first. I imagined the wooden garage door boards splitting into jagged lips, with the burning flames of hell illuminating the driveway from beyond whenever he opened his cursed mouth. He needed to look ancient, expressive and mildly offended by the existence of visitors.

fireMouthA few expressions from a house with plenty to say.

Creating a custom animation rig was one of the more labor intensive parts of the build. After bashing it into submission, I could export the facial expression shapes that Audio2Face-3D could later animate. The character SkelMesh was built in Autodesk Maya then exported into Unreal Engine where virtual fire and effects were added behind the door. With no eyes, no eyebrows and no blinking, he’s a surprisingly economical monster.

While all the nonsense of building the character was going on, NVIDIA built the Nemotron Voice Agent. What was supposed to be the hard part of the build now became rather fun, iterative and easy. I had a foundation for listening, conversation and speech right out of the box. The house already had a mouth. Now he could finally find something to complain about.

Teaching bad manners

The house needed a past as cantankerous as its personality so I devised a backstory that the house had been built from the timbers of a sunken pirate ship, haunted by its stormy past. The nautical complaints now had a reason. This was the ship, reincarnated as real estate and not entirely pleased about it.

The performance needed a guide, a path to follow from greeting to goodbye while providing treats along the way. First, the house would brush visitors off with remarks like “I’m busy grumbling, go bother the neighbors!” But persistence would wear him down. A “Please” could break through immediately, and “thank you” earned a warm farewell. Once a visitor won him over, I wanted him to stay won over. Nobody wants to negotiate with the same garage door twice.

Here is where the Voice Agent really shines. You can choose any LLM you like. Because I wanted the system to be off-grid and completely self-contained, I had a memory and compute budget.

The character needs more than a prompt that says “be grumpy.” It had to follow a master conversation flow, respond to what visitors actually said, track encounter state, and leave enough compute for the rest of the pipeline.

After testing more than a dozen models, I landed on Bolt E4B to supply the live dialogue. It is an open small language model purpose-built for local conversational agents and interactive characters, which is a fair description of a talking garage door. I use the 4-bit quantized release (the “4GB” in its name) as the default response model, with the BF16 checkpoint available for comparison.

If it’s not obvious by now, I work at NVIDIA and due to this I was able to test Bolt E4B before its public release and found it to be a solid choice, with a smaller footprint than other frontrunners- Qwen3 30B-A3B and Qwen 3.6 35B-A3B.

It works inside the Nemotron Voice Agent pipeline, turning what visitors say into the next suitably reluctant reply.

Bolt provides the conversational foundation. My prompts, application logic and LoRA adapter trained on thousands of reviewed example conversations shape it into this particular stubborn ship.

Creating a dataset of over 5000 multi-turn conversations meant I could train LoRAs for each model I felt good enough to be an option. Some took about an hour to train, some took a couple. A local agent ran everything and benchmarked the results. That agent and a very large LLM created and judged the dataset to begin with. This happened at night or while I was doing the day job.

With the LoRA in place I check the replies for continuity, timing and tone, benchmark models and adapters for quality, repetition and speed, and then listen to the performance. The house should give in eventually, without turning into a cheerful concierge. A little resistance is part of the charm. An endless argument with a garage door is not.

A voice worth waiting for

imageTwo shortcuts, two outputs. Authored text skips fresh dialogue generation, and saved audio skips synthesis. Clean speech drives the animation separately from the audience effects.

A haunted house loses authority if he takes too long to complain. The pipeline releases speakable text before an entire answer is finished, so the house can start talking while the rest of the sentence is still on its way. Prepared greetings and candy jokes cover familiar encounters: the text bank saves language-model work, and cached recordings save speech synthesis. Even an ancient grump benefits from rehearsing.

median end-of-speech-to-audio with Bolt Q4 & TTS = 1.70 seconds
median end-of-speech-to-audio cached responses = 0.72 seconds
(note: speech-end detection currently waits for 300 ms of silence )

NVIDIA Magpie TTS Zeroshot turns text into the Queen’s English. Its zero-shot voice conditioning uses a short reference sample instead of a trained voice; mine supplies the grumpy pirate character. The house has seven moods, from grumpy and menacing to amused and delighted, and emotion tags dictated by the prompt template and provided by the LLM choose how each line is delivered. Since each emotion requires a different 3-10 second voice sample I added a “Sample your Voice” block on the UI’s tool tab. I could then read and record a sample line of text in my best happy pirate or angry pirate voice. When it’s “Go” time, Bolt E4B decides what to say, and Magpie turns that text into speech with the proper delight or despair.

Next down the pipe is Audio2Face-3D and the 3d character scene I created in Epic’s Unreal Engine. The default model weights work best with a clean neutral male or female voice, not too deep, not too high (choose the appropriate gendered model for your use case). I wanted the house to have a very deep and demonic voice with echo and chamber. In this case, since my voice samples don’t have that theatrical heft, it’s actually a benefit. Audio2Face-3D gets clean speech from the samples and a second audio stream adds adjustable real-time vocal effects that play out the speakers.

To keep everything running smoothly, I split the work to a pair of GPUs: the language and voice model pipeline runs on an NVIDIA RTX PRO 6000 Blackwell Max-Q, and Unreal Engine graphics with Audio2Face-3D runs on an NVIDIA RTX PRO 4000 Blackwell. Memory isn’t the issue, compute is. I want to keep animation at a consistent frame rate regardless of what processing the agent pipeline is doing.

Voice, animation and effects have to land together. A convincing monster needs more than a fast answer; it needs to sound as though the complaint belongs to the building. In my case, he does. Tweaks to sync audio delivery are available. I’ve found I could set them and forget them. (100ms compensates for the Audio2Face-3D buffering)

The monster has a control desk

Somewhere along the way, “make the house talk” required an interface full of controls. I can audition cached lines, adjust the opening mood, follow the conversation, change the voice treatment and tune the mouth animation. Tabs cover conversations, model selection, recordings, prompts, performance monitoring and camera feeds, and a soundboard and custom dialogue field let me put words in his mouth. There are also model-loading controls and an Unreal Engine connection indicator, because sometimes the monster is not sulking. He is disconnected.

imageThe MonsterHouse control desk, with the soundboard, custom lines, opening mood and conversation flow.

The fire and glow have joined the act. Editable rules tie visual cues to delivery: live cues begin with speech, while recorded performances can follow a saved timeline. I can direct a change of mood without rebuilding the scene.

Live mode runs the trick-or-treat character. Demo mode persuades The house to explain himself. Microphone mode lets me speak through the house directly, bypassing recognition, dialogue generation and speech synthesis. My clean voice drives the mouth; the audience hears the treated version. The house considers this possession. I consider it a useful fallback.

The next knock at the door

NVIDIA Nemotron 3 Nano Omni is a VLM that gives the house visual context. As an optional observer, it interprets camera images and describes visible costumes so the character has something specific to react to. Not looking to reinvent every wheel, I chose the popular object detection and tracking models YOLO and ByteTrack to count and track people currently in view. Keeping those jobs separate lets the house notice a group without asking Omni to narrate every frame.

For a suitably ridiculous test, I gave Omni a video of five costumed sheep at the door. Its saved analysis identified the pirate, vampire, witch, pumpkin and ghost outfits. That is the sort of visual context I want the house to use. Apparently even livestock have more elaborate Halloween plans than I do.

imageFive very woolly trick-or-treaters in a synthetic test replay. Costume labels come from the saved Omni analysis; boxes and track IDs are illustrative.

The sheep are a synthetic test, not evidence of a successful Halloween night. Real driveway groups, costumes and night lighting still need testing. Detection does trigger automatic greetings, but I fear trendy costume identification and suitably witty retorts may need some post training. Since the house has no eyes, he calls his visitor awareness echolocation. I am letting him have that one.

There is more to do: the animation can always improve, complete performance testing needs real visitors, and candy will one day be provided automatically. I have not yet reached the original goal of leaving him to run Halloween while I head off with my family to see the other neighborhood ghouls. But that is still the point of all this. One day a child will meet a grumpy old house, try a little kindness and discover that the old timber has a soft spot. And gives out candy bars.

Build your own unreasonable character

The MonsterHouse code itself is not packaged for release, but every NVIDIA model it uses is available today, and the NVIDIA Nemotron Voice Agent gets you most of the way. This is the path I would follow.

  1. Start with the voice pipeline. Clone the NVIDIA Nemotron Voice Agent and run the Generic Assistant example. You get a cascaded pipeline with Nemotron Speech ASR, an LLM and Magpie TTS, plus voice activity detection and end-of-utterance handling, so your character knows when to talk.
  2. Make Bolt E4B the brain. The Voice Agent includes Bolt E4B profiles for cloud, server and single-GPU deployments. You can try the model first on build.nvidia.com.Try conversational mode for short, speech-ready replies, and disable reasoning for simpler exchanges.
  3. Give it a personality. Start with a system prompt and a few connected example dialogues. Keep conversation state, such as who has already said please, in your application instead of asking the model to remember it. When prompting is not enough, train a LoRA adapter; NVIDIA NeMo AutoModel has a LoRA recipe for Bolt E4B.
  4. Give it a voice. Magpie TTS Multilingual is the Voice Agent default. For a custom character, Magpie TTS Zeroshot works from a short reference sample. Try it on build.nvidia.com, and request access to run it yourself. [CONFIRM: access path and link] Use only voices you have permission to use.
  5. Give it a face. NVIDIA Audio2Face-3D turns speech into facial animation for your character. Feed it clean speech and add effects afterward.
  6. Optional: give it eyes. The Voice Agent’s Nemotron Omni Assistant Subagents example adds live webcam understanding with Nemotron 3 Nano Omni. Pair it with a lightweight people tracker if you need counts.

A cached response bank and saved audio for your most common lines will make even a slow monster feel quick. In fact, if you happen to be limited by computing power, there is no reason why you can’t have a Live version that just uses Nemotron 3 ASR, a python conversation router, with all cached audio. You can use the Bolt E4B and Magpie pipeline to generate 100s of responses offline, then use the cache for the show. I’ll be doing this for the interactive pumpkins.

Resources

原文版权归 Hugging Face Blog 及原作者所有,本站转载仅供阅读。如需删除,请联系 support@aisa.one。