它不是坏,只是话没说出来:具身智能交互如何翻译猫狗的行为

养宠物的第一年,多半是在"猜"里过的。

半夜在客厅来回狂奔,白天又睡得像块石头;刚擦过的角落又湿了一小块;你伸手过去,它回头就是一口。人第一时间给出的解释总是那几句:故意的、不喜欢我、养不熟。

这些解释大多错,可它们很好理解——我们习惯了听"话",而猫狗没有话。它发出的全是信号:一个转身、一次压低的耳朵、一段忽然变快的尾巴。

我们做「猫狗翻译所」,就是想把这些信号翻译成人能听懂的话。屏幕右边坐着一位做了十年犬猫行为训练、在救助站待过的训练师,设定里她叫小满。左栏是「行为卡匣」:点一下「抽一张行为卡」,卡片从按钮里飞出来、放大到屏幕中央、翻面,再缩进卡匣的角标。卡片写的是现象,不是结论——半夜狂奔、到处乱尿、咬手、抓沙发。抽到哪张,推给她,由她来读。

一次抽卡,用起来是什么样

假设抽到「咬手」。你不用补充别的,把卡推过去就行。她不会先丢一段"幼猫咬人很正常"的科普,而是先问:它多大?咬的时候你怎么反应的?是咬着玩,还是咬住不松?

等你答完,她才给出假设:如果它咬完你缩了手、还叫了一声,那么在这只猫或狗那一边,这个动作很可能被当成了"我们在玩"。接着是一条今天就能落地的小事——下一次它咬上来,你的手别缩、别出声,停住不动,等它松口,再把一个可以咬的东西递过去。最后她跟你约好:过几天回来,说说有没有变化。

整个过程是连着走的。你可以随时开口打断,也可以直接打字;她说话的时候麦克风先闭上,说完了再打开,所以她自己的声音不会被当成你的输入。忘了要说什么,再抽一张卡也行。

一次行为,其实是两边之间走完的一条回路

猫狗和人之间隔着的不是"语言",是一条回路:信号从它那边发出去,到你这边被接住、被判断、被回应。任何一站断掉,人就只剩一个解释——“它是不是故意的”。我们用的几项能力,恰好对应这条回路上的几个站点。

一、你发出的信号,它先要接住(多模态感知)

在训练里,看一只狗的第一步不是下判断,是先看它在不在听。语音侧也是这样常开的:浏览器语音识别一直开着,你停顿约一秒,它就自动收口,把整句交给小满。

联调第一周撞上一个特别真实的问题——她播报的时候,麦克风把她自己的声音又收了回去,转写结果被当成你的输入发回来,她就再答、再播,等于自己跟自己聊上了。用行为的话说,这就像一只狗冲着镜子里的自己狂吠:刺激源其实是它自己。持续收听最难的一类情况正是这个,当这边正在表达、而对面忽然插话,系统既要认得出真正的人声,又不能把扬声器里的本体声音当成用户在说话。

平台在这条链路上备好了几件事——抗回声(AEC)、算法降噪、本体声音抑制、VAD、远场拾音,以及 Double Talk / Barge-in 的智能打断;它们负责分辨真人声、压掉自己的回声、把噪声和有效插话分开、及时停下当前表达,再把完整的一句收进来。

落到纯网页这个终端上,系统级回声消除是拿不到的,我们就用工程补上同一套纪律。换成训练的说法,就是给麦克风设一道门槛:她一开口,门先关,残留的转写一并清掉;她说完,等约半秒再开,让扬声器尾音和房间混响先散掉;门开了以后,再留一小段忽略窗,窗口里进来的东西一律不算数。而打字、抽卡这类明确的人工动作随时生效——你随时能打断她,只有她自己的回声被挡在门外。

二、它凭什么判断这是"拆家"还是"害怕"(专属智脑)

小满不是把一个通用模型摆上去就完事。真正决定她怎么回应的,是配进去的那一层专属智脑——身份、故事、判断顺序、说话方式,都写在这里面。

她的判断顺序很像在带一只狗:先看,再问,最后才给方向。她不会一上来就贴"咬人等于护食"这种标签,因为行为训练最忌讳的就是没看到现场先下结论。她的信条也很具体:没有坏宠物,只有没被读懂的信号;用替代,不用压制;不承诺"三天见效";一次只给一到两件今天就能做的小事。被问到"你是谁",她照人的身份答:“我是小满,做犬猫行为训练的。它不是坏,只是话没说出来。”

有一条线她任何时候都不越:不做疾病诊断。只要行为背后可能牵扯身体——突然不吃、突然乱尿、突然变凶、频繁舔咬自己、精神明显不对、老年犬猫作息骤变——她第一步永远是让主人尽快带去正规宠物医院,行为的部分她再接手。体罚也从不出现在她的建议里。

这层大脑并不由平台替你指定。它可以是任意一个遵循 OpenAI 协议的模型,也可以是你在 Dify、Coze 上编排好的 Agent,或是按平台通信协议接进来的自建模型,把私有的知识库和资料挂上去;平台自己也带了可用的模型和检索能力,手头没有现成模型也能先把应用跑起来。真正麻烦的不是换一个模型地址,而是换完之后每一环的时序还得咬得上——平台用统一的接口契约和状态管理,把事件流转、会话状态、时间同步、异常处理都稳住,换掉的只是"负责判断的那一位",不是整条回路。

三、它回给你的,不只是文字(多模态表达)

她回给主人的,从来不只是几行字。台词里会夹着括号里的动作,比如「(蹲下身,与它平视)」「(在卡片上画了个圈)」。这些动作她不念出来——前端先把括号内容从台词里摘走,只把纯文本交给播报,摘下来的那部分转成屏幕上的演出。

训练师的身体和语言本就是一体的:示范"把手掌摊平、慢慢伸过去"时,光靠嘴说不管用。这里也一样。她开口的那一瞬,语音、口型、情绪、眼神和头部动作由同一套 SDK 一并生成;她一说"处理这张卡",左栏那场抽卡动画就跟着发生——卡片飞出、放大、翻面,再收进卡匣角标,方向只用 ◀ / ▶ 这类记号标出,字始终正着读。

动作不是给语言配的装饰,它本来就是这句话的另一半——就像狗摇尾巴从来不是为了给叫唤"配图"。

四、这套判断要跑在很多普通设备上(AI 端渲)

一个演示能跑起来,和它能不能一直开着,是两件事。如果画面全靠云端出、再一路视频推下来,终端一多,云 GPU、带宽、并发和弱网这几处会先撑不住。所以小满是端侧实时渲染的:模型和渲染都下沉到浏览器,画面在这台设备上画出来,网络上只走轻量的交互数据。

身材上她是全身模型,我们按容器尺寸实时算缩放基线,保证头脚始终完整入画。开场那片暖色浮尘和慢慢飘过的爪印,也是零依赖的本地 Canvas 画的,入座后立刻停渲,把 GPU 全让给她。省下的云 GPU 成本、更小的带宽、更短的链路延迟,加上弱网也能跑,"随手点开就能用"这件事才成立。

五、判断完了,总要有人动手(数字行动与物理行动)

到这一步,判断已经有了,可回路还没闭合——总要有人动手。多数智能体的输出停在文字:你问一句,它回一段。这里补上的是行动那一层。在屏幕端,小满把判断说出来的同时,也把现场跑完:接话、追问、递卡片、给出今天那一步,全都发生在同一个场景里。

同一套本事换到机器人身上,动作就伸进了物理世界:转身对着你、靠近、带路、上肢配合、和周围环境打交道。屏幕和机器人并不是两个各自为政的智能,它们是同一条回路换了个身体继续跑——数字行动留在屏上,物理行动落到空间里。

六、一条回路,没法靠"接"起来

把听、想、说拆成三段各自跑,每一段单独看都没毛病;麻烦出在按顺序接起来以后。真实的交谈不是"你一句、我一句"的轮替:你正说着忽然想起一个细节,她正说着你插一句"等等,它还会这样"。这种时候,顺序串起来的链路会露馅——状态接不上,表达和当下脱节。

所以重点不在把模块粘在一起,而在把"持续"当成第一件事来设计:让整套交互围绕持续感知 → 持续理解 → 持续决策 → 持续表达与行动 → 持续反馈长成一个循环,这就是 Continuous Interaction Loop(持续交互循环)。托住它的是平台的 Real-time Interaction Runtime——感知调度、表达生成、端侧渲染和事件流转都挂在同一套运行时上,时序由统一的状态管理兜着,哪一站都不掉队。

换句话说,端到端指的不是把几个模块摆成一排接好,而是让这条回路一直不散。

七、同一套回路,能装进不同的身体

这套回路并不挑硬件。小满今天活在浏览器里,Web、PC、手机、Pad,哪块屏都能把门推开。同一套身份和规则,也能装到更大的一块屏、一台移动的 AI 屏幕上,甚至是一台人形机器人身上。

换掉的只是承载它的那个身体;她的身份、学到的东西、记住的事、手上的任务、表达方式,都跟着一起搬过去。你抽过的每一张行为卡——现象、猫向还是狗向、什么时候抽的——都存进浏览器本地的「行为卡匣」,下次进门还在,她能接着上一回聊。今天她在屏幕里接话、被你和它打断;身体再往前走一步,她就能多长出一些感知、移动和空间行动的本事:看见猫走过来、主动先开口、转身替你挡一挡门口。

写在最后

我们做这个应用,并不是要造一台更懂宠物的机器。行为问题里最难的,从来不是知识,而是"眼前这一只"和"此刻这个人"。小满要做的,是在你半夜蹲在客厅、看着它又跑起来的那一刻,认真陪你把这条信号读完。

当 AI 走出对话框、走进真实的空间,它能不能不再只是"回答",而是持续感知、理解、表达并行动,成为一个你拿不准时愿意推门进去坐坐的伴——这几天的每一行代码,从麦克风开合的那半秒,到一张卡片翻面的弧度,都在试这件事。

这恰恰是魔珐星云想让更多人记住的:

魔珐星云是一套端到端具身交互智能平台,让 AI 通过屏幕和机器人进入真实世界,成为能够感知、理解、表达并行动的智能体。

门开着,卡片在桌上。下一次它半夜又跑起来,或者你又想不通它为什么咬你,推开[这扇门],让小满陪你一句句把它翻译出来。

Logo

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

更多推荐