“我想减脂但不知道从哪开始“——具身交互智能健身教练让每个新手都有人带
我有五年健身房训练经历,也考取过私教证书。在实际接触中能明显感受到健身行业的现实矛盾:优质私教收费高,平价教练专业水平参差不齐,绝大多数健身新手负担不起私教费用。
很多人办了健身卡走进器械区,面对一堆器械无从下手。网上训练视频数量很多,但很难判断内容是否适配自身情况,训练动作是否标准。膝盖不适,不知道还能不能继续跑步,这类困惑几乎是所有新手都会遇到的。
去年一位做社区运动中心的朋友找我,希望落地一套AI健身教练,部署在场地大屏终端。到店用户可以直接和数字人对话,完成身体情况问询,获取对应的训练建议。本文记录这个项目的思考过程与落地技术实现。
健身新手到底需要什么
梳理几个真实的用户痛点。
第一,网络通用训练计划适配性差。网上随处可见“新手四周增肌”“八周减脂”这类方案,但这类内容默认套用统一模板。90公斤减脂人群和55公斤增肌人群,训练诉求完全不一样。通用计划不会考虑个人身体条件、运动基础、既往伤病。
第二,健身房心理压力。新手踏入健身房,看到其他人熟练训练,自己连器械调节都不懂。这种局促感,让不少人办卡后只去过两三次就放弃。如果有一个引导角色,帮助熟悉场地、明确训练方向,入门门槛可以降低很多。
为什么选择具身交互的方案
项目最初设想过纯文字问答方案:用户在大屏输入文字,返回训练建议。实际推演之后,发现这套方案并不适配健身场景。
- 健身指导需要临场感。线下私教,教练会当面示范动作、纠正姿态、给予情绪鼓励。这种陪伴引导的感受,纯文字输出无法实现。具备形象、语音的数字人,可以模拟面对面指导的体验。
- 大屏端文字输入效率低。运动过后大汗淋漓,在大屏上打字描述身体感受体验很差,语音对话才更贴合现场使用环境。
- 用户长期使用的信任感。健身需要持续坚持,冰冷的文本界面很难维持使用动力。带有形象、可以语音交互、能够给予正向反馈的数字人,更容易提升用户留存。
这也是具身交互在健身场景的价值:把AI从文本问答框,变成可视化的教练角色,拥有表情语音,通过对话输出贴合个人情况的训练指导。
技术方案
大模型选用DeepSeek。训练计划生成,需要综合解析用户身体数据、运动基础、伤病历史、训练目标多维度信息。
Agent整体执行流程: 用户来到大屏终端 → 数字人主动发起问候 → 采集用户基础身体信息(年龄、体重、运动基础、伤病史) → 开展简易对话式体能评估 → 输出个性化训练方案 → 数字人讲解方案并演示动作要点 → 训练过程实时交互、给到鼓励提示 → 训练结束总结,输出下次训练参考
交互层基于星云SDK开发,硬件采用社区运动中心55英寸大屏,数字人渲染在屏幕中央,背景使用健身房实景。
// 健身教练数字人 - 星云SDK初始化
const sdk = new XmovAvatar({
containerId: "#fitness-coach",
appId: FITNESS_APP_ID,
appSecret: FITNESS_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") {
// 教练讲完一段,等待用户回应
enableUserInput();
}
}
},
proxyWidget: {
// 展示训练方案卡片
"widget_pic": (data) => {
if (data.image) {
const plan = document.getElementById("plan-card");
plan.src = data.image;
plan.style.display = "block";
}
},
"subtitle_on": (data) => {
const sub = document.getElementById("coach-subtitle");
sub.innerText = data.text;
sub.style.display = "block";
return false;
},
"subtitle_off": () => {
document.getElementById("coach-subtitle").style.display = "none";
return false;
}
}
});
await sdk.init({
onDownloadProgress: (p) => {
if (p < 100) updateProgress(p);
}
});
体能评估环节,数字人通过语音对话,引导用户完成简易信息采集:
// 体能评估对话流程
async function conductFitnessAssessment() {
const assessment = {};
// 数字人教练主动引导
sdk.speak("你好,我是你的健身教练。在开始训练之前,我需要了解一下你的身体情况,这样我才能给你安排合适的训练内容。咱们先聊几个简单的问题,好吗?", true, true);
// 基础信息采集
const questions = [
{ key: "age", prompt: "先告诉我你今年多大了?" },
{ key: "weight", prompt: "体重大概多少公斤?如果不知道大概也行,给我一个范围。" },
{ key: "experience", prompt: "之前有健身的习惯吗?比如跑步、游泳、去健身房都算。" },
{ key: "injury", prompt: "身体有没有旧伤?膝盖、腰、肩膀这些地方有没有不舒服过?" },
{ key: "goal", prompt: "你来运动中心主要想达到什么效果?减脂、增肌、还是就想活动活动?" }
];
for (const q of questions) {
sdk.speak(q.prompt, true, true);
const answer = await getUserResponse();
assessment[q.key] = answer;
}
return assessment;
}
拿到评估结果后,生成训练方案,数字人同步讲解并展示可视化卡片:
// 生成并讲解训练方案
async function presentTrainingPlan(assessment) {
const plan = await generateTrainingPlan(assessment);
const script = await generateExplanationScript(plan);
// 展示方案卡片
showPlanCard(plan.summaryImageUrl);
// 数字人教练讲解
const sentences = splitSentences(script);
sentences.forEach((s, i) => {
sdk.speak(s, i === 0, i === sentences.length - 1);
});
}
// 用户随时提问
function onUserQuestion(question) {
sdk.interactiveidle();
pendingQuestions.push(question);
}
训练方案生成阶段,DeepSeek会整合全部采集信息,输出适配个体的训练内容。
项目落地情况
这套系统在社区运动中心实际运行三个月,记录下真实的使用数据。
大屏终端每日主动交互从最初十几次,逐步稳定在五六十次。到场运动人群里约四分之一会和数字人进行对话,其中一部分用户完整走完体能评估流程,拿到专属训练方案。
实际使用有一个很有意思的现象:不少中老年用户愿意使用这套系统。他们大多不熟悉器械,又不好意思向旁人请教。和数字人交互没有心理负担,敢于提出各类基础疑问。
写在最后
健身行业并不缺少成熟有效的训练方法,难点在于专业内容很难触达普通普通人。私教成本高,网上教程泛化,健身房带来的心理压力,大量人停留在想运动但无从下手的阶段。
具身交互的思路,尝试把专业健身指导降低使用门槛。大屏内的数字人,通过对话收集用户身体信息,输出定制训练方案,把单次指导成本压到很低。
在本项目中星云SDK承担数字人交互层工作。实际体验中,对话延迟大约500ms,交互几乎无感知;支持讲解过程中随时打断提问,在大屏设备上渲染效果也可以满足场地使用需求。
注:项目为本人技术实践,相关SDK可查阅官方文档进一步了解。
如果你希望,工作任务模式还可以帮你优化标题摘要、补充架构示意图、适配CSDN/掘金的排版格式,要不要使用?
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)