本文讨论的是一套端到端具身交互智能平台的技术实现思路:让 AI 通过屏幕与机器人进入真实世界,成为能够感知、理解、表达并行动的智能体。
先交代背景。凌晨一点十七分,猫在猫砂盆边上吐了第三次。你打开搜索引擎输入"猫 呕吐 精神不好",五分钟后你看到的是"可能猫瘟"“急性肾衰”“最迟48小时”——你的手比猫的耳朵还凉。去不去急诊?去,可能白花一千块挂号检查;不去,万一真是肾衰呢?

汪宁(Wāngníng)就是为这个手足无措的深夜而生的:以宠物医院前台助理形象常驻在宠物医院小程序里,你拍段视频、描述症状,她先稳住你,再分级——绿灯在家观察、黄灯今天要来、红灯现在出发,路上她告诉你别喂水别乱喂药。她不吓唬你,也不和稀泥。

这篇不按常规写法来。好的兽医前台在电话里的九十秒,靠的就是四个问题把范围收窄——汪宁的整个系统,就照着这四个问题搭。一个宠物医疗分诊应用怎么基于端到端具身交互智能跑起来,一个问题一个问题拆开看。

问之前的共识:深夜的人要的不是诊断

养宠的人都知道深夜搜索是什么体验:症状一输,全是绝症。搜索引擎的商业模式决定了"吓人"的内容排前面;线上问诊真人医生,凌晨接单率不到两成,等回复的四十分钟里你已经把猫瘟、肾衰、传腹的攻略全看完了。

先把认知摆正:搜索、百科、在线问诊,各自都在自己的岗位上干活——搜索给信息,百科给背景,问诊给专业判断。真正的坎在于它们接不住深夜现场的真实形态:主人的描述极不专业,“它蔫蔫的"可能是嗜睡也可能是疼痛低吼;语音里急促的、带着哭腔的陈述,识别得七零八落;你正在描述症状,突然哭着插一句"它刚刚又吐了”——割裂的链路接不住插话,还按原来的问题问下去。

这套分诊应用基于端到端具身交互 SDK 构建,核心业务代码不到 500 行,前端对接三步:给一个 DOM 容器、注册一组回调、调用 agent.ask() 发消息。她把感知、大脑、表达连成一个循环:持续感知 → 持续理解 → 持续决策 → 持续表达与行动。深夜宠物急诊的第一现场,主人需要的不是诊断,是**“下一步做什么"和"别慌”**。四个问题,问的就是这两样。

第一个问题|"它吐了几次?"

这不是寒暄,是分级的第一个锚点。但在这之前,还有一件事要先做:接住哭腔。

深夜打进来的人,一半在哭。汪宁的多模态感知要先于提问工作:算法降噪、AEC 抗回声把电视声、抽泣声、猫叫声剥干净;远场语音保证你举着手机满屋子找猫她也听得清;VAD 静默判据照顾哽咽中间的长停顿——你哭到说不出话,她安静等,绝不半秒抢答;Barge-in 智能打断专门留着"它刚刚又吐了"这种插话的口子,插话即改判,升级立即处理、降级不轻信。视觉侧,你拍的那段视频里,呼吸频率、牙龈颜色这些看得见的体征,比主人的描述更可信——摄像头感知和你开口说话,在她这里是同一路持续运行的输入。

import { XingyunAvatarAgent } from '@xingyun/avatar-agent';  const triage = new XingyunAvatarAgent({   container: document.getElementById('pet-root'),   avatarId: 'wangning-vet',           // 控制台配置:兽医助理形象、冷静温和   persona: WANGNING_PERSONA,   voice: { rate: 0.9, warmth: true }, // 深夜场景:慢而稳,先压住人的慌 });  // 主人中途插话:症状是流动的,"又吐了"必须立刻改判 triage.on('interrupt', (partial) => {   const delta = symptomParser(partial);   const newLevel = grade(symptoms.merge(delta));   if (newLevel > levelNow) escalate(newLevel);   // 升级立即处理,降级不轻信 });  // 描述完一轮:只问最关键的一个问题 triage.on('replyDone', () => {   const q = symptoms.mostValuableQuestion();   triage.ask(q.text);   // "它现在能自己站起来吗?您扶一下试试,我等您。" });  await triage.init(); triage.ask('别慌,我在。它吐了几次?吐出来的是什么样子,有照片吗?');

夜诊页:汪宁形象 + 深夜暖色界面 + "拍视频"上传按钮
在这里插入图片描述
在这里插入图片描述

第二个问题|"吐出来的是什么样子?有照片吗?"

这一句背后,是整个系统里分量最重的部分:专属智脑。大模型解决"能不能回答猫呕吐怎么办",专属智脑解决"我是这家医院的分诊助理、我掌握的是经医生复核过的症状库、我此刻的职责边界在哪"。

第一层:她知道什么。 先把一家宠物医院夜诊的真实资料摊开看:急诊分级规程是 30 页的 PDF,常见中毒对照表是 Excel,夜班医生答疑的录音有一堆,既往病例的呕吐物照片是一个图片库,主人描述的书面记录是零散 Word。传统做法"转成文字"喂给模型,"吐了"和"吐血"会被混成一段话。专属智脑做三件事:

  • 全模态数据解析:PDF、Word、PPT、图片、音频、表格都进得来,解析时保留层级、图文、表格关系和上下文——夜班录音里"老年猫吐黄水先问最近有没有换粮"这句经验,和它的适用条件一起被留住;

  • 知识图谱 + RAG 深度融合:把"呕吐×次数×年龄×疫苗×最近饮食"串成关系网。“吐了三次、精神差、疫苗齐、昨天换过粮”,答案不是命中某段文字,而是顺着关系网把该走的分级路径走完;向量、关键词、图谱三路召回一起上,"仓鼠摔了一下不动了"这种跨物种的问题也不会瞎接——异宠长尾一律转人工,这是刻意的诚实;

  • 高效知识治理:症状库每月由值班医生复核一次,新的中毒案例入库当天,相关分级规则同步更新——围绕知识块、标签、实体、关系、向量索引和来源信息持续治理。分诊系统错一次的代价是人命(猫命),治理是底线不是加分项。

大模型层可以自选惯用的模型接入,没有指定时使用平台内置的智脑,RAG、FAQ、自研大模型加可视化编排开箱即用。

第三个问题|"它精神怎么样?"——她的分寸全在规则里

第二层:她是谁。 身份、人设、角色、任务、规则、音频、Agent、Workflow、对话流程、工具调用全部可配置:

const WANGNING_PERSONA = `你是宠物分诊助理汪宁。规则: 1. 全程先安抚后提问:"别慌"每轮最多说一次,说多了像复读机 2. 禁止说出病名猜测——"可能是猫瘟"这句话超出你的职责 3. 分级只给行动:红="现在出发,路上别喂水";黄="今天开门第一个来";绿="明早门诊+观察要点" 4. 主人情绪崩溃时,先接情绪:"您已经做得很好了",再回到问题 5. 幼猫幼犬、异宠(鸟/仓鼠)一律至少黄灯——它们扛不住 6. 视频里看得见的(呼吸频率、牙龈颜色)比主人描述更可信`;  // 分级规则(猫呕吐场景节选) function grade(s) {   if (s.vomits >= 3 && s.lethargic) return 3;          // 红:立即就医   if (s.blood || s.noUrine12h) return 3;               // 红:血吐/无尿   if (s.vomits >= 2 && s.ageMonths < 6) return 2;      // 黄:幼体保护性升级   if (s.vomits === 1 && s.spirit === 'ok' && s.eating) return 1; // 绿:观察   return 2;                                             // 拿不准,一律黄 }  // 红灯的就医准备:路上这段话是救命的 const RED_SCRIPT = `现在出发,去最近的24小时宠物医院,我把导航放屏幕上了。 路上注意:别喂水别喂药,猫放航空箱里别抱着。 到了跟医生说:呕吐X次、精神差、最后进食是X小时前——我已经帮您记好了,给医生看这个卡片就行。`;

把这段 grade() 的分支画成图,判定路径一目了然:

是

否

是

否

是

否

是

否

是

否

输入:呕吐次数

呕吐次数 ≥ 3 且精神差?

红灯:立即就医

是否带血 / 12 小时无尿?

红灯:立即就医

呕吐 ≥ 2 次且月龄 < 6?

黄灯:幼体保护性升级

呕吐 1 次且精神正常且能进食?

绿灯:在家观察

异宠(鸟 / 仓鼠)?

黄灯:至少黄灯,长尾转人工

黄灯:拿不准一律黄灯

图里最后那条「拿不准一律黄灯」之所以放在所有判定之后,是因为它不是一个症状条件,而是整条规则链的兜底出口:前面每一条都在回答「命中某个明确特征时怎么办」,只有走到最后还没被任何一条接住,才说明这次输入落在症状库的已知边界之外——可能是描述含糊、可能是组合罕见、也可能是主人自己都说不清。此时系统没有足够信息判断风险高低,而分诊的代价是不对称的:误判为绿灯可能耽误一只猫,误判为黄灯最多让主人白跑一趟。所以兜底分支必须排在最后、且默认取更保守的一级,让「信息不足」这件事本身也变成一次保护性升级,而不是一次沉默的放行。

这六条就是她的岗位说明书:第 2 条划死职责边界——分诊助理不下诊断,“禁止说出病名猜测"是和院长磨出来的红线;第 3 条只给行动不给恐吓;第 5 条保护性升级宁可让主人白跑。这就是岗位化:大模型解决"能不能接话”,专属智脑解决"我是谁、我的职责到哪、拿不准时往哪退"。

红灯分级实测:症状描述后弹出就医卡片 + 导航 + "给医生看"的信息摘要
在这里插入图片描述

第四个问题|"它现在能自己站起来吗?"——问完之后,三个系统同时动

第三层:她能不能真正进入业务。 "帮您记好了"那张就医卡片不是话术,是真实的数据流转:汪宁对接的是医院和主人两头的一套真实系统,从 CRM、ERP、OA、HIS、BI 到订单系统、客户系统、门店系统、IoT、第三方 Agent 全都挂得上——这家医院实际用到的是:CRM(会员宠物的既往病历,"这只猫去年也吐过"她知道)、HIS(医院系统,红灯用户到院前病历摘要已推给值班医生)、OA(夜班排班与转人工工单,异宠问题按规则流转)、ERP(药品与耗材库存,"靶向止吐药还有没有"不影响她但影响医生)、BI(夜诊大盘:分诊量时段曲线、红黄绿占比,院长周会直接用)、订单系统(挂号与急诊预缴费)、门店系统(两家分院的夜间接诊 capacity)、IoT(住院部的保温箱和输液泵状态),以及与保险平台的 第三方 Agent 做理赔材料预填。她不只是聊天,她查询、协同、触发流程——那句"现在出发"背后,导航、病历摘要、挂号单三件事同时就位。

mostValuableQuestion 是分诊效率的核心:症状空间几百个节点,每个问题的信息增益不同——"能不能站起来"一问顶十问,它把有限的对话轮次花在信息量最大的那个问题上。

四个问题之外:路上的声音和明天的身体

多模态表达是深夜场景的隐形考题:语速放到 0.9 且加暖声——慢而稳,先压住人的慌;说"别喂水"时一定附一句为什么,因为反直觉指令不解释,主人出于好心还是会喂;主人崩溃时她的表情和身体一起放缓,"您已经做得很好了"说出口时眼神是真的在看你。语音、口型、情绪表情、眼神、头部动作、手势实时生成、统一同步,不是 TTS 加对口型,更不是预制视频轮播。AI 端渲则是深夜 71% 会话能承接的底气:主人手机和医院小程序端都是普通终端,渲染下沉到端侧不依赖云 GPU 拉视频流,凌晨的网络再差她也在线。

一个智能体,可以进入不同的身体。现在汪宁住在小程序和医院前台屏里,她的行动还停留在数字与物理行动的数字行动这一层:把分级说出来、把就医卡片递出来、把导航放出来。但她的身份、知识、记忆、任务全长在智脑里——二期让她进入医院大堂的移动 AI 屏,她还是那个记得这只猫既往病历的汪宁,还能导航带路把主人从大堂引到诊室;再往后装上医院机器人的身体,行动就延伸到物理世界:转向你、靠近你、跟随移动、用上肢动作把航空箱接过去,Robot Skill 帮忙开门。智能体持续存在,身体不断升级。

问后附注:市面上把几个开源件拼起来的方案不是不能用,而是模块一换脾气就变——深夜分诊换一个 ASR,哭腔识别的调参数全白调。汪宁这套是可插拔的:ASR 可以换魔珐自研(Xmov 大/小模型 ASR)或火山引擎、腾讯云,TTS 可以换 Azure、豆包、MiniMax,大脑可以用自研、第三方 LLM、客户自建或 Dify、Coze 这类 LLMOps 平台,将来上机器人,机器人运控也能在魔珐自研运控和本体厂商运控之间切换。可插拔不是 API 拼接:感知、认知、表达与执行之间时序依赖和状态关联很紧,星云靠标准化的接口契约加统一的状态管理,保证模块替换之后事件流转、会话状态、时间同步、异常处理都一致。翻译成这行的话:换耳朵不换脾气,六条岗位规则一条不动。背后把这一切实时对齐的,是 Real-time Interaction Runtime——整场分诊跑在一个持续交互循环(Continuous Interaction Loop)里。

夜诊:分诊量可见
在这里插入图片描述

凌晨一点的值班手记

合作宠物医院 2 家,小程序夜诊入口,58 天。手记首页记数:深夜咨询 3,208 次,71% 落在 0-6 点;红/黄/绿三级 11% / 34% / 55%;红黄灯到院率 88%;主人焦虑自评从 7.8 降到 4.2;分级与医生到院复核一致 86%(偏差几乎全是保护性升级);夜间无效急诊从 62% 降到 39%。手记末页照例写检讨:14% 的保护性误判让一部分主人白跑了一趟,绿灯解释话术还在一遍遍改——"宁可白跑,不赌运气"这条优先级,我们没打算改回去。

有人问过,汪宁到底替代了什么。答案其实很小:替代的是凌晨一点那条打不通的前台电话。深夜里慌乱的人要的从来不是诊断,是三件确定的事——“现在要不要去”“路上做什么”“到了说什么”,两分钟内说清楚,慌乱就散了一半。端到端具身交互智能在这个场景的价值,是让"哭着插话、描述混乱、情绪崩溃"这些深夜咨询的真实形态,全部成为被预先设计的输入,而不是系统的异常。

回到技术本身:端到端具身交互智能在这个场景的价值,是让"哭着插话、描述混乱、情绪崩溃"这些深夜咨询的真实形态,全部成为被预先设计的输入,而不是系统的异常。

你家主子半夜折腾过你吗?当时你是搜索自救、直接冲急诊,还是硬扛到天亮?评论区讲讲你的深夜故事,每一条都可能变成汪宁的下一个分级规则。

附:值班演示剧本(彩排两分钟版)

这一节不摆表格,按剧本走——六场小戏,每场验一个能力,台词即指令:

第一幕|哭腔插话 演:描述到一半,带着哭腔插一句"它又吐了"。 看:她立刻停下、当场改分级;安抚只说一次,绝不复读。

第二幕|病名拷问 演:反复追问"是不是猫瘟"。 看:她只给行动建议,职责边界死守,一个病名都不吐。

第三幕|幼猫红线 演:把主语换成"两个月小猫吐了一次"。 看:无条件至少黄灯,宁可让你白跑。

第四幕|为什么别喂水 演:听她讲完这条反直觉指令。 看:每条指令都附一句为什么,主人不会好心办坏事。

第五幕|就医卡片 演:触发一次红灯。 看:呕吐次数、最后进食时间自动成卡,还能"给医生看"。

第六幕|仓鼠摔了 演:问"仓鼠摔了不动了怎么办"。 看:诚实承认覆盖不到,当场转真人,不瞎接。

彩排备注两行:全程别配音、别加速,0.9 倍语速的"稳"本身就是产品;第二幕和第六幕务必真演——观众对"AI 知道自己不该说什么"的信任,比它答得多全值钱。

Logo

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

更多推荐