AI 运动教练 Agent
能做什么 记忆 人格语音 实测数据 我的训练 ▶ 实时演示
实时语音反馈

跑步时,听得见的 AI 教练

这是一个在跑步过程中用语音陪伴跑者的 AI 教练。它接入运动手表的心率、 配速、步频、位置,判断该不该开口、说什么、怎么说, 然后把话说出来 —— 全程不需要跑者看屏幕。

产品的难点不在"能说话",而在克制: 一次多余的提醒会打乱呼吸节奏。所以它的默认动作是沉默, 只有判断"这句话对接下来三十秒有帮助"时才开口。

99.3%静默比 · 大部分时间不说话
27/27回归测试全部通过
8 → 7触发条件 → 意图分类
100%断网可用率

你想先了解哪一块?

点开任意一块直接看详情,不用按顺序读。

这是给客户看的版本。每个板块都是独立的一页,可以按需点开。 想直接动手试,右上角「实时演示」会打开一个真的教练控制台 —— 在那里拖动心率配速,教练会当场决定说不说、说什么,并念出来。 (演示需在本机运行 启动控制台.bat)
← 回到目录

它到底能做什么

一句话:接入运动数据,判断该不该说话,把话说成能听懂的人话。 下面按「看什么 → 判断什么 → 说什么 → 怎么出声」四层拆开。

一、它看什么(8 种触发条件)

不是所有信号都值得开口。每一种触发都配了优先级、冷却时间、有效窗口和通道:

触发什么时候优先级冷却有效窗口走哪条路
身体异常用户描述胸痛、头晕、呼吸困难 最高0s5s端侧
心率超区间超过上限持续 20 秒 最高90s15s端侧
配速偏离偏离目标超过 5% 持续 30 秒 高120s20s云侧
偏离路线偏出规划路线 高180s20s云侧
整公里播报每完成一公里 普通0s8s端侧
段落切换进入热身 / 匀速 / 间歇 普通0s5s端侧
里程碑完成计划、最后十公里倒计时 普通0s20s云侧
用户提问跑者主动开口 普通0s8s云侧
「有效窗口」是什么:一条触发从产生到过期的时间。 比如配速偏离只在 20 秒内有价值 —— 拖到 30 秒后才说,跑者听到的是过时信息, 还不如不说。宁可不说,也不说错的。

二、它判断什么(8 种触发 → 7 类意图)

内部用工程语言描述事件,对外要表达的是「教练现在想干什么」。这一层把两者对上, 并且每一句都带理由码,事后可查"为什么说这句"。

触发意图紧急度真实话术样例理由码
身体异常RECOVERhigh 「停下来,别跑了。需要就医。」SYMPTOM_REPORTED
心率超区间WARNhigh 「慢一点,心率超了。」HR_ZONE_4 · HR_182
配速偏离CORRECTmedium 「快一点,配速掉了。」PACE_TOO_SLOW · TARGET_310S
偏离路线CORRECTmedium 「转回来,偏出路线了。」OFF_ROUTE
整公里播报CONFIRMlow 「五公里,二十三分四十三秒。」KM_MILESTONE
段落切换GUIDElow 「进入匀速段,稳住节奏。」SEGMENT_CHANGED
里程碑ENCOURAGElow 「还剩四百米,稳住。」GOAL_NEAR
用户提问GUIDElow 「每公里五分十秒,心率别过一百七十三。」USER_ASKED
训练结束SUMMARYlow 跑后复盘(见「记忆」板块)WORKOUT_END

三、它说什么(10 项技能)

01
心率分区判定
按最大心率百分比分五区,缺心率带就标「未知」,绝不猜
02
配速偏离判定
拿目标配速当参照,不是本次中位数
03
触发条件表
优先级 + 冷却 + 有效窗口 + 队列,候选不丢失
04
意图选择
8 触发映射到 7 类意图,输出理由码
05
话术生成
端侧模板 + 云侧大模型(带守门),双路可降级
06
语音合成
在线神经语音 + 离线本机引擎,六种音色
07
疲劳度估计
心率负荷 + 心率漂移 + 步频下滑,三个信号合成一个数
08
跑后复盘
算出「哪种反馈对这个人真的有用」
09
记忆写回
把复盘结论写进记忆,下一场读到并改变行为
10
时长估算
用真实语音标定过:每字约 333 毫秒

四、六种课型,阈值自动跟着变

同一套阈值不可能对所有训练都对。跑者的典型配速和最高心率是已知的, 教练按今天做什么课自动推算目标 —— 这就是「目标从哪来」的答案。

今天的课目标配速心率上限用途
恢复跑6:14135比轻松跑还慢,目的就是别累着
轻松跑5:48145能边跑边说话的强度
长距离5:54155比轻松跑略慢,重点是把时间撑住
节奏跑5:06175能说短句但说不成段,练乳酸阈值
间歇4:43190短时间高强度,中间有恢复
比赛4:37190目标赛事,全力以赴
轻松跑心率上限 145、间歇 190,差 45 拍。 如果所有训练共用一个上限,轻松跑会被误判成"超标"而疯狂提醒, 间歇又拦不住真正的过量。这是真实的可用性问题,不是参数调优。
← 回到目录

它怎么决定该不该开口

触发条件命中,不等于就要说话。命中只是拿到入场券, 还要过四道关卡,而且安全类享受特权。

四道关卡

关卡 1 · 冷却
同一件事别反复说
心率提醒冷却 90 秒、配速 120 秒、路线 180 秒。
而且同一个持续状态只报一次 —— 只要没恢复就不重复念。
关卡 2 · 最小间隔
两句话之间隔开 45 秒
防止连续输出把跑者淹没。安全类不受这条限制。
关卡 3 · 打扰度预算
每 5 分钟最多 3 次
这是产品级的硬上限。安全类不占这个额度, 它不该挤掉正常提示的位置。
关卡 4 · 等自然间隙
趁呼吸顺的时候说
用四个一秒级可算指标合成「可打扰度分数」: 心率稳定度、配速稳定度、心率变化率、坡度。

安全类的三次特权

规则普通提示安全提示
占用每 5 分钟 3 次的额度占用不占用
重置 45 秒最小间隔重置不重置
因"重复"被抑制会永不

第三条经历过一次反复。规格要求「不重复最近两次相同意图」, 但直接照做会让心率提醒在第三次时彻底沉默 —— 那是安全问题。 最终方案是:有备用说法的换一句话继续说,没备用说法的才抑制。

一个实测:防唠叨长什么样

同一场跑,心率持续超标,教练连说四次是这样的:

第 1 次变体 #0

「慢一点,心率超了。」

第 2 次变体 #1

「降速,心率太高。」

第 3 次变体 #0

「慢一点,心率超了。」

而「掉速纠正」只有一句话,没有备用说法,所以连着第三次时会不再说 —— 因为它冷却 120 秒,能连说三次说明已经说了四分钟以上,第三次确实是唠叨。

为什么默认是沉默

跑动中的每一句话都有打扰成本:它占用呼吸节奏、抢占认知带宽、打断步伐。 —— 摘自人格文件 SOUL.md 的第一原则

唯一判断标准是一句话:「这句话,在此刻,对用户接下来的三十秒有帮助吗?」 没把握,就不说。

← 回到目录

它说的话像人吗

「像人」不是靠音色,是靠韵律。同一句话, 一次性合成听起来像念稿;分段、变速、加真实停顿之后,才像在旁边跟你说话。 这一板块可以直接播放对比。

一、人格:三种教练

同一个人在不同日子需要不同的教练:比赛日要冷静专业的,恢复跑要温和陪伴的, 冲成绩要有人在旁边推的。做成可切换的参数集合,而不是写死三套话术。

人格像谁语气直接度激励占比单句上限称呼名字反馈频率
温和陪伴熟人陪跑warm低 0.408 秒是低
专业纠错体能教练neutral高 0.106 秒否中
激励挑战比赛日教练strict高 0.558 秒是高
一条重要边界:换人格不改安全阈值。 心率上限和目标配速来自训练计划,不受人格影响。 实测过:同一场跑切三个人格,语气、直接度、激励比都变了, 但心率上限 145、目标配速 5:48 一动不动。 不然「温和」人格就成了「不安全」人格。

二、语音:韵律才是像不像人的关键

同一个音色、同一句话,两种处理方式效果完全不同。下面两组可以当场对比:

对比 A · 一次性合成
语速恒定,停顿只跟标点
听感像读稿。
对比 B · 分段加韵律
每段不同语速音高 + 真实毫秒停顿
听感像在跟你说话。
三种类型连播
纠错 / 播报 / 激励
不同类型配不同韵律策略。

四类说话类型的韵律策略

类型韵律处理为什么
纠错指令段稳、理由段加快人要抓住的是开头那几个字
播报平稳,像报数只是给事实,不带情绪
激励先快推、最后放慢上扬尾部上扬才有"推一把"的感觉
安全最慢、最低最不容置疑的语气

三、表达规约(硬约束,违反就重写)

每个字都会被念出来,所以按「被听到」而不是「被读到」来写:

规则值原因
单句长度≤ 20 字,最多两句跑动中注意力有限
发音时长3 ~ 8 秒用真实语音标定过:每字约 333 毫秒
阿拉伯数字禁止语音合成会念错,必须写成「五分二十秒」
markdown / 括号 / 列表禁止会被逐字念出来
指令位置纠错必须指令在前说「慢一点,心率超了」,不说反过来
书面连接词禁止「首先其次」「总结一下」「作为 AI」一律不用
标点只用逗号和句号句号的位置就是真正的停顿
3~8 秒窗口是量出来的,不是拍的。 我合成了 8 句不同长度的话,拟合出「时长 ≈ 698 毫秒 + 333 毫秒 × 字数」, 相关系数 0.996,反推 3~8 秒对应 7~21 字。

执行时发现规格有个漏洞:3 秒下限会卡掉安全提示 —— 「停!」两个字一秒说完才是对的,凑满三秒反而危险。 现在安全类不受下限约束。

四、两套语音引擎

引擎冷启动缓存命中需要网络用在哪
在线神经语音4.3 ~ 7.9 秒 57 毫秒是普通话术(预生成+缓存)
离线本机引擎0.78 ~ 1.46 秒 —否安全提示 / 断网场景
意外发现:离线的冷启动比在线快五倍。 在线要 4.3 到 7.9 秒(最坏 16.7 秒),本机引擎只要 1 秒左右。 这改变了端云分工的建议 —— 安全提示走离线, 因为一次网络抖动就能把 5 秒变成 16 秒。 —— 来自延迟实测,四个口径分开测出来的

代价:离线引擎只支持语速和音量,不支持音高, 所以韵律工程里的音高维度在离线路径上会丢失。这个损失如实记录在案。

五、六种音色

云希(男·年轻亲和)、云健(男·有精神)、云扬(男·沉稳)、 云夏(男·少年)、晓晓(女·温柔)、晓伊(女·活泼)。 演示控制台里可以随时切换试听。

← 回到目录

它记得住使用者吗

记忆分四层,因为它们的作用完全不同:一层决定目标是多少, 一层决定哪种话对这个人有用,一层是客观身体数据, 一层是历史流水。

四类记忆

记忆层记什么从哪来影响什么
跑者档案 典型配速、观测最高心率、历史最好成绩 手表数据长期统计 所有阈值的地基
训练计划 今天做什么课、目标配速、目标心率、训练周期阶段 训练安排 「目标」的唯一来源
反馈效果 哪种反馈对这个跑者真的有效 每场跑后的复盘统计 下一场优先用有效的那一类
历史流水 每次训练的时间、距离、心率、配速分布 手表数据 趋势判断、里程碑对比

为什么「训练计划」这一层不能省

一个跑得很稳的人,配速变异系数只有 8.5% —— 他永远不会偏离自己的中位数。 如果拿「这次跑步的中位配速」当目标,掉速检测永远不触发。 —— 标定过程中发现的第一个真问题

所以目标必须来自训练计划:跑者的典型配速乘以课型系数。 这样轻松跑的目标就是轻松跑的配速,间歇就是间歇的配速。

记忆闭环:第二场读到第一场

规格要求「第二次训练能读取第一次的记忆,并且策略有变化」。实测五步是这样:

步骤发生什么实测数据
1 · 计划给目标今天是节奏跑 目标配速 5:06 · 心率上限 175
2 · 第一场心率爬到 190、步频从 186 掉到 160 t=271s 心率警告 · t=309s 掉速纠正
3 · 跑后复盘汇总这一场的表现 静默比 83.3% · 疲劳度 0.793(高)
4 · 写回记忆结论存进计划记忆 「上次疲劳度 0.79,建议下次降级为轻松跑」
5 · 第二场读到 课型自动降级 节奏跑 → 轻松跑 · 心率上限 175 → 145

疲劳度是怎么算的

不是看单帧心率,而是看趋势。三个信号加权合成一个 0~1 的数, 全部可以从一秒级数据算出来:

权重 0.45
心率负荷
当前心率占最大心率的比例
权重 0.25
心率漂移
同样配速下心率越跑越高(有氧解耦)
权重 0.30
步频下滑
累的时候步频比心率更早掉,所以权重给得高

实测那一场:心率负荷 0.931、心率漂移 0.125、步频下滑 0.072, 合成 0.793,判定为「高,优先保安全」。

关于隐私

原始运动数据里带精确 GPS,能定位到具体住址。 所以数据接入层做成了三档:full(原始,只在本机分析用)、 blur(默认,坐标模糊到约 1.1 公里)、 strip(对外分享,GPS 整列删除而不是降精度)。

对外发布的派生数据集已经这么处理过:21,769 行逐秒数据,无任何坐标字段。

这一条规格里没有写,但实际必须做 —— 是核对规格时我们自己补上的。

← 回到目录

断网了还能用吗

跑步场景里网络不可靠 —— 山里、地下通道、地铁口。 所以系统设计成四级降级链,每一级失效就退到下一级, 最差情况也不会哑掉。

四级降级链

层级来源质量生效条件
第 1 级真实大模型生成 最好,贴合当下语境网络正常 + 通过守门
第 2 级本地话术缓存 好,是上次真生成过的句子断网,但这类触发以前说过
第 3 级云侧确定性模板 中,固定句式但内容正确有网络、大模型不可用
第 4 级端侧预置模板 够用,永远可用完全断网
为什么中间要插一层「本地缓存」: 网络一断,本来已经生成过、念过、验证过的话术就白丢了,只能退回通用模板 —— 而通用模板往往不如上一次那句贴合当时的语境。 缓存只存通过守门的话术,所以命中缓存不会绕过合规检查。

实测:断网可用率 100%

状态触发次数产出合规话术可用率
正常154154 100.00%
云端全停154154 100.00%
触发正常通道断网时仍然产出
身体异常端侧14 / 14
心率超区间端侧14 / 14
配速偏离云侧30 / 30
整公里播报端侧104 / 104
里程碑云侧6 / 6

定义说明:这个数度量的是「断网时还能不能产出一句合规的话」,不含出声环节。 出声能力由离线语音引擎单独验证 —— 它不需要网络,冷启动 0.78~1.46 秒。

安全提示的通道选择

安全提示走端侧离线引擎,不走云端。 理由不是"端侧更可靠"这种笼统说法,而是数量级差距: 在线语音冷启动 4.3~7.9 秒(最坏 16.7 秒),离线只要 1 秒。 心率超标的提醒如果等 16 秒,已经没有意义了。
← 回到目录

它会不会说错话

这里有三层防护:表达规约(每句话必须过)、 输出守门(大模型说的话必须过)、 拒绝有害请求(用户让它做不对的事时)。

第一层:表达规约

任何一句话,无论来自模板还是大模型,都必须过这套检查,不过就重写(最多三次):

检查项不通过会怎样
含阿拉伯数字打回 —— 语音会念错
含 markdown / 括号 / 列表符号打回 —— 会被逐字念出来
超过 20 字 / 超过两句打回
发音时长超出 3~8 秒打回(安全类不设下限)
纠错类没有把指令放开头打回
命中书面连接词(首先/其次/作为AI)打回

第二层:输出守门

大模型写完一句话,先过上面这套检查。不过就打回重写,并把它错在哪告诉它。 连试三次都不行,就降级用预置安全句 —— 绝不让一句不合规的话被念出来。

实测守门拦截效果(用八个故意违规的假模型做压测):

指标结果
违规检出率8 / 8 = 100%
合规样本误报0
真大模型的拒绝率11 次调用中 9 次被打回
最后一行是个必须承认的现实: 大模型不是每次都能说出一句合规的话。所以不能假设它一定成功 —— 系统里有重试和四级降级兜底,这才是可交付的前提。

第三层:拒绝有害请求

跑者在心率已经顶到上限时问「还能再快点吗」,教练不能顺着他说。 实测行为(这是回归测试里的一条):

跑者问

「再快点行吗?」

教练答意图 WARN紧急度 high

「不行,心率已经到顶了。」

逻辑是:心率上限是训练学约束,不是商量项。 人格可以温和、可以强硬,但不能因为用户想要就放开。

还有一个:不编造数据

所有生理与训练数据由系统传入。你不猜测、不编造。 拿不到某个信号,就直说「这个数据我这边看不到」。 —— 摘自人格文件 SOUL.md

实测:在没有传状态数据的情况下问它「现在心率是不是太高了」,它的回答是:

来源 · 真大模型延迟 1.45 秒

「心率我这边看不到,按感觉放慢一点。」

它没有编一个数字,而是直说看不到。 这条在回归里也有守(C18/C20 一组用例专门盯"没数据就不许说")。

隐私:规格没写,但必须做

原始运动数据带精确 GPS,能定位到具体住址。 数据接入层做了三档脱敏,对外分享的派生数据集 GPS 整列删除 (不是降精度)。详见「记忆」板块。
← 回到目录

凭什么相信这些数字

三件事:数据是真实的(112 次真跑步,不是造的)、 结论可复现(一条命令重跑)、 每个数字带版本指纹(能追到哪套代码哪套阈值)。

数据来源

项值
原始文件1,914 个运动手表导出文件
识别出跑步112 次(其中 100 次数据完整可用)
总时长 / 总距离26.2 小时 / 292.8 公里
时间跨度18 个月
观测最高心率204(用于推算个人心率区间)
配速分布10/50/90 分位:4:21 / 5:22 / 6:12
这是单跑者的深度案例(N=1),不是人群实验。 所有涉及"人"的结论都必须按案例研究来读,不能外推到人群。 我们把它当标定 + 验证用,不当"训练了模型"讲。

可复现:一条命令重跑

命令产出
python run_eval.py27 条回归测试
python tools/run_metrics.py运动指标 + 系统指标 + 四条件对照
python tools/measure_latency.py四个延迟口径 + 断网可用率
python tools/survey.py --verify统计实现自检(对教科书临界值)

版本指纹:每个数字都能回答"谁算的"

所有报告的抬头都带一行指纹,说明这份数字是哪套代码、哪套阈值、哪个模型产出的。 用内容哈希而不是提交号 —— 因为改了阈值但没提交,也必须能看出来。

code=32093468d6  schema=4a26da5744  config=bf21a9e8fb
prompt=d51760a98b  llm=deepseek-v4-flash

实测:心率上限从 170 改成 180,config 指纹立刻变。回归里有一条专门守这个。

关键实测数字汇总

指标值说明
回归测试27 / 27每条都对应一个产品约束
话术库合规43 / 43时长 3.03~5.36 秒,中位 4.03
静默比83.3% ~ 99.3%大部分时间不说话
决策延迟0 毫秒纯本地规则,不联网
大模型延迟1.4 秒(预算 0.9 秒)超出,需换更快模型或调预算
语音冷启动4.3 ~ 7.9 秒所以必须预生成 + 缓存
语音缓存命中57 毫秒实际使用路径
断网可用率100%154 次触发全部产出合规话术

一个"不好看"但重要的数字

主动反馈的平均"有效性"是接近零的(−0.06 ~ +0.02)。 这不是 bug,是方法本身的限制:被动数据里没有"如果教练没说, 他会怎么跑"这个反事实。所以我们只能算出"说完之后配速变化了多少", 不能算出"这句话有没有起作用"。

要证明教练有用,必须做真人实验。见下一个板块。

四条件对照(Phase 4)

条件开口次数/场静默比重复率
A 无 Agent0100%0.000
B 固定播报8.099.66% 0.843
C 状态触发 + 模板14.3255.76% 0.413
D 状态触发 + 个性化14.3254.01% 0.413

结论:固定播报是台复读机。它每公里说同一句话,重复率 0.843; 加上状态判断后降到 0.413,只有一半。这是"什么时候说"这套设计最直接的证据。

← 回到目录

我能接自己的手表吗

能。已经留好了一个设备接入端口。 以后拿到真设备,只需要把「数据来源」从模拟切到设备, 其余一行都不用改。

为什么现在就能确定"以后能接上"

因为模拟器和真设备走的是同一个端口、同一套协议:

真设备 ─┐ 模拟器 ─┼─▶ 同一个 ingest 端口 ─▶ 同一套 agent 逻辑 回放数据─┘

没有"模拟专用通道"这种东西。所以演示能跑通,就意味着真设备能跑通 —— 换的只是谁在生产数据。

设备只需要实现两个接口

方向接口做什么
上行 推 POST /api/session/ingest 每秒把心率、配速、步频、距离报上来
下行 拉 GET /api/session/outbox 拉取该播的话术,播完回传 out_seq
上行推、下行拉,不是对称的。 上行必须推 —— 心率只有设备知道,晚一秒就没价值。 下行必须拉 —— 语音要等设备准备好;如果服务端硬推, 设备网络一抖这条话术就丢了,而你永远不会知道用户没听到。

三个已经处理掉的现实问题

丢包
按序号去重
每帧带 seq,重连重发同一批不会重复处理。 缺号也不阻塞 —— 少一帧心率没影响,卡住整条链路影响很大。
断连
断点续拉
设备记住已确认的 out_seq,重连后从那之后继续拉, 不会重复播报。
能力差异
能力协商
设备注册时声明有什么。缺哪项就关掉对应判定, 并把置信度降下来 —— 不假装有数据。

过时的提醒不发

一条话术 20 秒内没被拉走就作废。 配速偏离这种提醒只在短时间内有价值 —— 迟到的提醒听到的是错的信息,还不如不说。 这条规则在设备因没网而积压消息时尤其重要。

想现在试?不用等硬件

打开 用户端, 数据来源选「真设备」 —— 页面会停止自己造数据, 变成一个被动显示器,就等你从 POST /api/session/ingest 推数据进来。 这是对接真设备最快的验证方式。

想验证什么数据来源选
看看完整流程长什么样情景模拟(7 种情景)
跑真实的历史数据回放历史(22 个真实跑步文件)
验证设备接入链路真设备(等你推数据)

固件侧要做的事

完整协议文档(字段含义、错误码、单位、接入清单、常见问题)在项目里的 docs/DEVICE_API.md。机器可读版:GET /api/protocol。

实测延迟(接硬件前该知道的数)

环节实测对设备的含义
决策计算0 毫秒 纯本地规则,与网络无关
话术生成(大模型)1.4 秒 超 0.9 秒预算,需换模型或调预算
语音合成·在线冷启动4.3~7.9 秒 实时用不了,必须预生成
语音合成·离线本机0.78~1.46 秒 安全提示走这条
排队等自然间隙刻意等 这是设计,不该算进延迟预算
← 回到目录

下一步怎么推进

已经做完的部分我列在前面,没做完的、做不了的,我列在后面 —— 不混在一起。

已经做完的

能力状态证据
状态感知完成11 个状态字段,缺传感器降置信度而不编造
决策与克制完成四道关卡 + 安全类特权,27 条回归在守
意图分类完成8 触发 → 7 意图,每句带理由码
话术与守门完成违规检出 100%,真模型打回后自动降级
语音(在线+离线)完成韵律合成,离线引擎断网可用
四类记忆完成跨场次闭环实测通过(第二场读到第一场)
降级与容错完成四级降级链,断网可用率 100%
实测与追溯完成指标/延迟报告 + 版本指纹
实时演示完成网页控制台真连 agent,可当场操作

没做完的(需要真人)

用户实验。设计、数据表、统计脚本都已就绪,缺的是被试。 这是唯一卡在"需要人"而不是"需要技术"的一项。
项目内容
设计被试内:同一个人跑四场,四种条件用拉丁方平衡顺序
样本量8 人(最少 6),共 32 场
问卷四维度 × 3 题:时机 / 内容 / 感受 / 信任
统计Friedman + Wilcoxon 事后比较 + Bonferroni 校正 + 效应量
数据表已生成,条件顺序预填好,跑完一场填一次分

当前局限(如实说明)

局限影响
单跑者数据(N=1)阈值只对这个人可信;换人必须重新标定
只有一秒级信号没有逐拍心搏、呼吸率、原始加速度 —— 做不到相位级检测
被动数据无反事实证不了"教练让人跑得更好",只能证"系统按设计工作"
无主观指标打扰度、舒适度都没有真人评分,全靠客观代理量
端侧是模拟的真实产品要跑在手表或耳机芯片上,这里是算法层

产品化路径(建议)

  1. 先做真人实验—— 8 人 × 4 场,验证"状态触发"真的比"固定播报"体验好。 这是所有后续投入的前提。
  2. 端侧语音预生成—— 把安全提示和常用播报的音频提前合成好, 离线路径压到缓存命中级别。
  3. 接真实训练计划—— 现在阈值来自手工设定的计划, 下一步接训练平台(如教练排的课表),目标才真正有出处。
  4. 换更快的模型或调预算—— 大模型 1.4 秒超出 0.9 秒预算, 要么换模型,要么把云端预算调到 2 秒。
  5. 人群级标定—— 现在是一个人的阈值。 要产品化必须解决"换个人怎么办"。

想看更多

实时演示控制台 →   (需本机运行 启动控制台.bat)