训练反馈诊断与方案调整
触发场景
教练转发会员下课反馈,典型信号:
- "臀练的没有达到炸裂的状态,肌肉的感觉不太强"
- "整体下来人有点累" + 强度高但目标肌群没感觉
- "RPE 8 但感觉没练到" / "RPE 3 太轻松"
- "把XX节奏/方法写到接下来一周的训练上"
诊断框架:重量到位但感觉弱(最常见)
表象:重量、组次都达标(如臀推 45kg×4×10 RPE8),但会员反馈目标肌群(臀)没有"炸裂"感。
三个根因(按频率排序):
- 疲劳累积(最常见) — 训练频率高、爬重快时,神经疲劳先于肌肉疲劳出现。重量还是举起来了,但吃透力的是协同肌(股四头/下背),不是目标肌群。
- 重量跑在神经前面 — mind-muscle connection 没跟上重量。重量大≠感觉强,感觉强需要重量和神经连接同步。
- 代偿路径 — 重量一大就走代偿。臀推典型代偿:腰椎过度伸展(下背顶)、脚尖发力(股四头代偿)、杠位太低(腘绳抢活)。
判断口诀:练臀先找感觉,再上重量。感觉没了,重量再大也是白练。
调整方案模板:激活 + 降重 + 节奏(臀感找回协议)
把"重量到位但感觉弱"转成可执行的一周调整,分四步:
第1步:预激活(训练前5min,必做)
- 弹力带侧向行走 2×15步/侧(唤醒臀中肌)
- 单腿臀桥 2×12/侧(慢下2秒,顶峰停顿1秒)
第2步:主项降重(关键动作)
- 主项降 20% 左右(例:45kg→35kg)
- 节奏改成:离心3秒 → 底部不停 → 顶峰夹紧停顿2秒
- 降重量不减训练意图,反而让目标肌群吃满全程
第3步:Cue 三句话(练时喊给会员)
- "脚跟蹬地"(不是脚掌)
- "骨盆后倾,肋骨下压"(断下背代偿)
- "顶峰收臀,像夹一张纸"(停顿感)
第4步:收尾补一刀
- 换/加一个单侧收尾动作(如单腿臀桥 3×12/侧,最后2次保持3秒)
- 榨干最后一点目标肌群感觉
检验标准(第二次同部位训练日)
- 降重后全程目标肌群有感觉 → 试探回原重量
- 感觉仍弱 → 继续降重,只加节奏难度(离心拉长到4秒)
落地到飞书:一周方案格式
马可会要求"把节奏写到接下来一周的训练方法上"。输出一周方案并保存到「训练阶段方案」表:
📅 8/3(一) - 8/9(日)
🎯 主题:臀感找回周(激活+降重+节奏)
📊 目标RPE:6-7
🔑 核心原则:先找感觉,再上重量。感觉没了,重量再大也是白练。
Day B · 臀腿(每周2次)
🔥 预激活(必做,5min)
① 弹力带侧向行走 2×15步/侧
② 单腿臀桥 2×12/侧(慢下2秒,顶停1秒)
💪 主训
1. 杠铃臀推 4×10 35kg(降重!)离心3秒→顶停2秒
Cue:①脚跟蹬地 ②骨盆后倾肋骨下压 ③顶峰收臀像夹纸
2. 保加利亚分腿蹲 3×10/腿 自重(微前倾,臀侧重)
3. 罗马尼亚硬拉 3×8 25kg(髋主导,慢离心2秒)
💪 收尾榨干
4. 单腿臀桥 3×12/侧(最后2次保持3秒)
📌 检验标准:第二次臀腿日,感觉在→试探原重量;仍弱→继续降重只加节奏
保存时注意:方案名称带日期前先 date 确认当天日期(见下),开始日期用毫秒时间戳。
通用陷阱
- 🔴 写方案前先确认当天日期 — 用
terminal执行date '+%Y-%m-%d %H:%M %A'。不要用会话元数据的"Conversation started"日期——2026-08-03 马可纠正过:会话元数据显示7/24,但实际已是8/3,导致4个方案名称全标错日期,要逐个改。方案名称、开始日期、训练记录日期都以date输出为准。跨天会话升级版(2026-08-20 Dave案例):对话可能横跨多天——当天早先确认过日期(8/18),隔天马可又发新任务时必须重新date,不能沿用上次确认结果。Dave功能性加练课实际是8/20周四,我按8/18存了方案+训练记录+推送消息,马可纠正后要修三处(方案表名称/日期/核心策略文本、训练记录表日期+关联会员)。三分化中间加练日按周几推算:周一推/周三拉/周五腿,周四加练=功能性/心肺课。 - 🔴 下课后报实际数据 → 先查重再决定 PUT 还是新建 — 先按口头描述写入预估数据(可能没给重量),下课后马可报实际数("臀推45kg 4×10 RPE8"),用
requests.put(f"{base_url}/tables/{table_id}/records/{record_id}", json={"fields": {...}})更新同一条,不新建。验证:GET 回读。补课场景(2026-09-01 王妍):会员缺课后补课(8/29缺9/1补),先查该日期是否已有记录——有则 PUT 更新,无则新建(用_append),且训练日期写实际补课日期9/1,笔记注明"原8/29臀日课补课"。 - 🔴 不要过度脑补预估重量 — 没给重量时先如实写动作名,等下课报数再更新。马可一定会纠正。
- 降重是方法不是退步 — 向会员传达时强调"先找回感觉",不是"你练不了了"。用词:降重找回神经连接,两周后再冲更重。
- 疲劳信号优先级 — 如果反馈是"人很累"+"感觉弱",先看训练频率,必要时减频或加休息日,比加激活更根本。
- 🔴 持握卡重量时换变体,别卡在原动作上 — 会员喊"轻"但加重量后抱怨"不好拿/拿不住"(而非"做不动")→ 瓶颈在持握方式不在目标肌群力量。案例(Dave 2026-08-20):高脚杯深蹲12-16kg偏轻,25kg单只哑铃端在胸前托不住 → 改垂握哑铃深蹲(双手各持哑铃垂体侧自然下垂),直接按力量水平给重量(25kg/侧起步,可加30kg/侧),RIR 2-3。垂握对核心抗伸展要求比高脚杯低,cue"躯干保持直立、别前倾"。判断口诀:"拿不住"=换持握变体;"做不动"=真到力量瓶颈。
- 🔴
_append()成功返回{"status": "ok", "record_id": ...},不是{"code": 0}— 用r.get("code") == 0判断会把成功误判为失败(2026-09-01 王妍案例:3条其实已写入,我误判失败又写了一条 test 再删)。判断写入结果一律看r.get("status") == "ok"。 - 🔴 写入后验证不要依赖
get_my_training_logs()— 该方法默认只返回约10条,新写入的记录可能不在列表里,会造成"没写进去"的假失败。验证写入用 raw API 全量分页:GET /tables/{table_id}/records?page_size=500+page_token循环拉完,再按会员 record_id 和日期本地过滤;records/search的结构化 filter 曾返回0条而实际有记录(2026-09-01),不要依赖。关联会员读回来是list[dict],会员ID在子dict 的record_ids(复数)键 — 写成link.get('link_record_ids')会静默过滤出0条,把写入成功误判成失败(写完 8 条、验证报 0 条”。正确解析:for x in link: ids.extend(x.get('record_ids', []))。而且默认视图顺序不定,只看第一页50条会漏掉刚写的记录——先怀疑验证脚本的解析,再怀疑写入。 - 🔴 教练报数漏字段时不猜测 — 马可只报"哑铃20kg"没报组数×次数、或哑铃重量没说清每侧/合计时,先问清楚再录("20kg是每侧还是两只合计?几组几次?"),不瞎填。马可对训练数据准确性要求极高,宁多问一句不写错数据。变体:说"其他动作按计划完成"但计划原文拿不到(教练说"计划是在桌面端出的"、不在飞书库)→ 只落可确认的动作+重量,笔记写清"其余动作按计划完成、清单待补",并请教练同步计划原文;拿历史课推测动作清单=造假。
- 🔴 会员自感疲劳、耐力主项没按计划完成时:课内降量 + 耐力转"自主有氧作业" — 不要硬顶(计划连续跑15min、实际只完成间歇3轮就收住)。课内保留柔韧+力量+灵敏,耐力移出课外交会员自己练;处方必须给全:起步时长、速度/强度档、每周频次、每次递进幅度、月末目标、速度档调剂方式——只写"自己练有氧"=没练。教练确认后回写到阶段方案(读全文 → 唯一句子当锚点 →
core.replace(anchor, anchor+追加段)→PUT records/{rid}带{"fields": {"核心策略": new_core}}→ 读回验证),追加段带小标题标清哪次调整生效;整段重写会抹掉历史内容,不回写则下次出课又按旧结构走。 - 🔴 教练重发了同一条指令时,先查是不是已经生成过 — 同一句"写XX今天的训练计划"再次出现,多半是上一条没送达(投递失败),不是要重做:先
get_my_training_plans()查目标日期是否已有方案记录、必要时翻会话历史,已有就把原文重发并说明,不要重复出稿、更不要重复写库(会产生重复方案/重复记录)。 - 🔴 出"今天"的单次课前,用 raw API 全量拉日志核对部位与分化轮换 — 按训练日期排序看上次练了什么,与教练口述"今天练X"冲突时先确认再出稿(教练偶尔记错部位);轻量补充课(笔记写"课耗约50%")不占轮换位。
参考
- 臀感找回协议案例(蒋谦 2026-08-03:45kg→35kg 找回周)→
references/glute-activation-rebuild.md - 飞书字段写入细节 → fitness-data-recording 技能(训练阶段方案表、日常训练计划表字段类型)