构建面向物理治疗的运动验证引擎 Kinetiq:价值在姿态模型之上经置信度门控、可按 RTM 计费的证明。
Physical TherapyDigital HealthHealthcare AI

任何姿态模型都会把膝盖塌陷的 15 次深蹲记成良好。我做的 AI 抓住了第 9 次。

Ashutosh SinghalAshutosh Singhal2026年7月8日13 min

我做了这个演示的第一版,是为了证明一个姿态模型能数深蹲次数;不到一天,我就证明了错误的那件事。我喂给它一个合成的 ACL 术后患者,我叫她 Maria,62 岁,膝关节重建术后第八周,处方是十五次徒手深蹲。那个免费的姿态库做了免费姿态库都会做的事。它记录了十五次,全部计入,然后继续。十五次满分。一次干净的训练。

问题出在第 9 次。第 9 次时 Maria 的膝盖向内塌陷,她放慢速度来代偿——这正是 ACL 重建术后物理治疗师要盯住的动作,因为人就是这样把移植物再次撕开的。姿态模型看到的是一次深蹲。它没有看到再损伤风险,因为那本来就不是姿态模型要做的事。本该被它标出的那一次,恰恰是它计入的那一次。

那一刻,真正的产品在我心里清晰了起来。我一直把姿态估计当成难题。它不再是难题了。它是免费的。

姿态估计是免费的,所以我不再试图与它竞争

我花了第一周去尝试做更好的关键点追踪器,那是整个项目里最浪费的一周。BlazePose 和 MoveNet 已经能在手机上以每秒 30 帧运行,白白给你一副 33 关键点的骨架。每一家物理治疗平台和企业健康管理应用都已经有这个,或者明天就能接上。在这里竞争,等于争着去送别人已经在白送的东西。

没人会交给你的,是关节点之后的那一层。把原始姿态流变成临床医生能据此行动、付款方也会报销的东西。那正是我决定让 Kinetiq 端到端去构建的层,也是我反复回到的论点。

姿态估计是免费的。价值在于其上的大脑,以及可计费的证明。

于是我扔掉了追踪器,转而构建了解释引擎。它接收关键点流(我的三位测试患者用合成数据;第四位则从真实拍摄的深蹲片段离线提取,以证明流水线能跑在真实影像上),用 1-Euro 滤波器平滑,按置信度门控,按时间自相似性切分动作次数,并计算临床医生真正会推理的那些特征:关节角与活动度、膝外翻指数、下蹲—起身节奏比、以无量纲对数急动度(Log Dimensionless Jerk)衡量的动作平滑度,以及左右对称指数。朴素、有单元测试的 NumPy。评分路径上没有模型。你可以构建整套系统,地址是 veriprajna.com/zh-Hans/demos/ai-biomechanics-exercise-verification ,并看着它给一次训练打分。

当我把 Maria 再送进这个引擎时,第 9 次终于以它第一次就该有的方式回来了。

Kinetiq 为 Maria 生成的逐次表:第 9 次被标为 KNEE VALGUS,外翻指数 0.054 高于 0.03 阈值,节奏 1.4 高于 1.25,标为再损伤风险,而前后几次动作评分为良好
第 9 次——那个原始计数器判为良好的一次:引擎返回膝外翻指数 0.054(达到或超过 0.03 阈值)和节奏 1.4(高于 1.25),这是再损伤风险标记,不是第十五次良好动作。

引擎不会只说“坏动作”。它写出自己检查过的条款:外翻 0.054 达到或超过 0.03,节奏 1.4 高于 1.25。临床医生可以对着它交叉质询。你无法交叉质询一个黑箱;而 ACL 手术之后,你非常想要能质询。

我曾想造假的那一次动作

我清楚记得自己贪婪到了哪一步,就是第 12 次。Maria 那次训练的第 12 次,髋部关键点掉到了可见性门控以下。该关节的追踪置信度低到无法信任。有几帧里,引擎根本不知道她的髋在哪里。

诱人的做法——那种能让你基准看起来更好的做法——是插值。根据前后帧猜测髋的位置,照样算一个角度,给这次打分,把数字保持干净。我写过那种插值。它奏效了。然后我读了单目精度文献,并删掉了它

单摄像头膝关节角度误差的平均绝对误差在 9.3 到 21.9 度之间(《Nature Scientific Reports》,2025)。这是这类测量的诚实上限。如果我在低置信度帧上伪造一个髋位置,再据此报告关节角,我不是在测量膝盖,而是在生成一个看起来合理的数字并称之为临床。对一家名叫 Veriprajna——意为真智慧——的公司来说,这根本不是艰难的抉择。

Kinetiq 表格显示第 12 次为 NOT SCORED,原因是 LHIP not visible:髋部关键点低于可见性门控,且未为该次伪造任何角度
第 12 次:髋部关键点掉到可见性门控以下,因此判定为“未评分,髋不可见”。骨架变灰,该帧不发明任何角度。

于是引擎弃权。它在屏幕上说:“该次未评分,髋不可见。”它把骨架变灰。它不假装。

我们从不从低置信度关键点猜测关节角。

我把那句话放在屏幕上,因为我希望这条纪律是可见的,而不是埋在配置文件里。在我的标注集里,被遮挡的动作次数中,三次有三次弃权,零个角度被伪造——这不是我口头主张的说法,而是一条有单元测试的不变量。一次被遮挡却仍被评分的动作,按定义就是伪造的角度。测试会抓住它。拒绝作答是一项我不得不与自己的本能搏斗才保住的特性。

为什么同一次深蹲,对一位患者通过,对下一位却失败?

我差点就上线一个全局单一阈值;一位我给看过早期版本的物理治疗师,大约三十秒就把我劝住了。她的观点很简单。ACL 术后第八周的女性做出 80 度深蹲,是良好进展。同样 80 度深蹲,对一位健康的 30 岁企业健康管理客户来说,却是偷懒的一次。如果你的引擎给它们打同样的分,它懂的不是康复,只是几何。

于是规则引擎变成了人群自适应。阈值按患者档案键控:年龄段、病况、恢复周次。Maria,ACL 术后第 8 周,屈曲目标 75 度。Jordan,一位 30 岁、膝盖健康的企业健康管理运动员,目标 95 度。我在演示里加了一个控件,好让这一点无可辩驳:切换档案下拉菜单,保持完全相同的动作,看着判定改变。

Kinetiq 显示 Jordan(健康管理运动员档案)同一次约 80 度深蹲被评为深度不足(屏幕上的浅蹲判定),因为屈曲低于 95 度目标;而 Maria 的 ACL 术后档案则评为良好
对 Maria(目标 75 度)评为良好的大约 80 度深度,对 Jordan(目标 95 度)则评为深度不足,屏幕上显示为浅蹲判定。同一个动作,两种判定,因为阈值会按患者自适应。

第一次当着别人的面切换那个下拉菜单,整列判定在动作并未改变的情况下整列翻转,我看着他们明白过来。同一动作按档案得到不同判定,那是临床判断,不是缺陷。这也是论点中不会过时的那一部分。当姿态估计变得完美——它会的——传感器仍然无法告诉你:80 度对一只正在愈合的膝盖意味着一件事,对一只健康的膝盖意味着另一件事。那种理解,住在上层。

智能体建议,代码裁决

我确实让一个 AI 智能体让我难堪过一次,而这正是架构长成现在这样的原因。我推销时人人都想要的是当时的潮流能力:一个读完训练就写临床笔记的智能体,一个盯着趋势再升级上报的智能体。可以。我在另一位患者 Eleanor 上接好了 Clinical Scribe 和 Longitudinal Monitor——她 70 岁,膝关节置换术后,活动度在训练历史中悄悄下降。

Clinical Scribe 写出的第一稿流畅而自信,却包含了一个证据里没有的活动度数字。它做过四舍五入,或平滑,或干脆发明了一个读起来好听的数。如果我当时信了它,我就会发出一份带有伪造测量值的临床笔记。这正是把语言模型放进医疗闭环的整套失败模式,而我刚刚在自己的屏幕上亲眼看着它发生。

修复办法是让智能体在结构上无法做到这一点。智能体引入的每一个数字,都会对照确定性证据加以核验。 任何不在引擎输出中的数字都会被拒绝,并改用确定性模板展示。没有 API 密钥时,两个智能体完全弃权。它们解释,它们沟通。它们不做裁决。

Eleanor 的 Kinetiq AI Scribe 与 Longitudinal Monitor 面板,两者均标为 grounding-checked;监测器报告训练历史中活动度呈下降趋势,并升级供临床医生审阅
覆盖 Eleanor 合成训练历史的 Longitudinal Monitor:它检出活动度下降趋势,并起草主动的临床医生升级。两个智能体都对照确定性引擎做了 grounding 校验,因此任何不在证据中的数字在进入笔记前都会被拒绝。
智能体建议,代码裁决。

那句话是整个演示的承重设计决策。信任核心——每一次动作判定与计费决定——是朴素、有单元测试的代码,附近没有任何语言模型。智能体坐在上层,有边界、经 grounding 校验,做它们真正擅长的那一件事:把已核验的数字变成临床医生可用的行文。一旦智能体在判定上获得一票,你就失去了整个要点所在的可审计性。

付款方真正报销的是一张收据,不是一次动作计数

我构建这一切的商业理由,来自我读 CMS 计费规则时学到的东西——我没想到会把一个月花在这上面。临床医生可以按 CPT 98975–98981 计费远程治疗监测(Remote Therapeutic Monitoring),外加 2026 年的代码 98979 和 98985;而 2026 年的合格门槛已降到少至 2 天和 10 分钟数据(Veriprajna WP29 研究,2026)。但 CMS 不报销原始坐标。它要求与治疗决策绑定的设备采集数据。一堆关键点不可计费。一份有文档、可审计的判定才可以。

那道缺口并不小,因为背后的问题也不小。物理治疗居家运动依从性大约在 35%,65% 的患者在第一个月内放弃方案(Veriprajna WP29 研究,2026)。自我报告会夸大依从,于是临床医生常常在自己无法信任的数据上计费与治疗。雇主一侧,肌肉骨骼疾患每年约花费每位员工 3,591 美元,估计 36% 的 MSK 手术被认为不必要(900 亿美元),超过半数员工因隐私抵制分享健康数据(Veriprajna WP29 研究,2026)。经过核验、隐私安全、可计费的运动数据,正是这条链上人人都缺的东西。

所以引擎每次训练最后做的事是决定:可计费、需临床医生审阅,或设备数据不足,并导出一份 FHIR 形态的训练报告。逐次观察、每次检查过的阈值条款、训练汇总、RTM 判定,以及 CMS 要求的文档字段。我说的是 FHIR 形态,从不说 FHIR 已校验,因为它是镜像 Observation 与 DocumentReference 字段形态的结构化 JSON,不是发到线上 EHR 的载荷。我把它发出去。我不假装去 POST 它。

Maria 那次带有第 9 次外翻标记的训练不会自动计费。它先路由给临床医生,因为再损伤信号在变成收费之前,应该先被人类看到。这正是我一直坚持的诚实细微之处:可计费并不等于一切都好,它意味着文档完备到足以站得住脚。

Kinetiq 基准摘要:25 个清晰案例判定一致率 100%,10 个处于阈值约一个标准差内的边界案例一致率 100%,3 次被遮挡动作中 3 次弃权且 0 个伪造角度,4 次训练中 3 次可自动计费、1 次路由至审阅
固定标注合成集上的基准:25 个清晰案例判定一致率 100%,10 个边界案例(约在阈值一个标准差内)一致率 100%;被遮挡动作 3 次有 3 次弃权且 0 个伪造角度;跨 4 次训练,3 次可自动计费、1 次路由至审阅。

那块面板上的数字才是我在意的,我也想精确说明它们的范围。这里的真值,是由植入的物理参数对照档案阈值所隐含的判定,独立于引擎计算;然后在标签固定之后,再给动作渲染成关节点并加入测量噪声,于是引擎必须穿过噪声恢复判定。在该集合上,25 个清晰案例一致率 100%,10 个约在阈值一个标准差内的边界案例一致率也是 100%。那是标注合成集上的判别结果,不是开放世界保证,而边界案例正是在朴素阈值下会翻转的那些——这正是我单独汇报它们的原因。这些是耐久的度量:任务准确率、自动化吞吐,以及诚实。它们不会在姿态模型改进时过时,因为其中没有任何一项是姿态模型误差率。

留给我的问题

我进来时以为自己在做计算机视觉产品,结束时确信自己做的是一个碰巧从摄像头开始的问责产品。有意思的工作从来不是拿到关节点。而是决定系统被允许主张什么、何时必须弃权、适用谁的阈值,以及临床医生能把执照押在什么上面。 如果你想看引擎给塌陷的膝盖打分、拒绝被遮挡的动作、并导出收据,它无需密钥即可在 veriprajna.com/zh-Hans/demos/ai-biomechanics-exercise-verification

如果你更想看它跑起来,而不是听我描述,这里是整套端到端运行。

我反复翻来覆去、也真心希望其他构建者跟我争论的问题是这个。当传感器渐近完美时,诱惑会是让模型决定得更多,因为它很少会错。但“很少错”恰恰是伪造数字造成最大伤害的条件,因为你已经停止检查。那么,在你自己的系统里,你拒绝让模型越过的那条线在哪里,你能不能指向强制执行它的那段代码?

相关研究

满怀信心地构建您的 AI。

与一支在打造新一代企业级 AI 方面拥有深厚经验的团队携手合作。让我们助您设计、构建并部署一套值得信赖的 AI 战略。

Veriprajna 深度科技咨询公司 专注于为医疗健康、金融和监管等领域构建安全攸关的 AI 系统。我们的架构均依据成熟的规范进行验证,并配有完善的合规文档。