健身动作解析2 - 题解
一、题目分析
本题要求从健身训练文本中提取动作记录,输出entries数组,每条包含:
- action:动作枚举(BENCH_PRESS/SQUAT/DEADLIFT/OHP/OTHER等)
- final_weight:最终重量(kg),需处理磅转换和单边+杆重计算
- sets/reps:组数和次数
- exercise_mode:练习模式(STANDARD/REST_PAUSE/CLUSTER)
支持多动作解析,后续动作可继承前一个动作的参数。
二、难点分析
- 杆重随动作类型变化:同样"每边30kg",深蹲杆重25kg(总75kg),推举杆重15kg(总75kg变65kg...不对,是75.0 vs 75.0...实际是30x2+25=85 vs 30x2+15=75)。模型容易用固定杆重。
- 三种练习模式的格式判定:
5x5是STANDARD,10+5+3是REST_PAUSE,2,2,2,2,2是CLUSTER。需要从标点符号推断模式,而非语义。 - 多动作继承+杆重重算:当后续动作继承"每边X"时,重量必须用新动作的杆重重新计算,而非直接继承final_weight数值。
- REST_PAUSE的sets固定为1:
10+5+3看起来像3组,但实际是1组中的暂停-续做,sets=1,reps=18。
三、Prompt设计思路
3.1 杆重查表格式化
用表格清晰展示每种动作对应的杆重:| 动作 | 杆重 || SQUAT/DEADLIFT | 25kg || BENCH_PRESS/OHP/INCLINE_PRESS | 15kg || OTHER | 0kg |
避免模型混记,同时用对比示例强化:深蹲每边30=85.0 vs 推举每边30=75.0。
3.2 练习模式用符号特征判定
将判定逻辑简化为纯符号匹配:
- 含
x-> STANDARD - 含
+-> REST_PAUSE(sets固定1,reps求和) - 含
,-> CLUSTER(sets=逗号分隔个数,reps=单个数值)
这比语义描述更不容易出错。
3.3 继承规则单独成章
多动作继承是本题最复杂的部分,用3个完整示例覆盖:
- 深蹲每边30 5x5 -> 推举"同上":继承每边30但杆重变化
- 深蹲100kg REST_PAUSE -> 硬拉每边40:仅继承组次数
- 硬拉CLUSTER -> 深蹲每边40 -> 卧推(无参数):三动作链式继承
每个示例明确标注哪些参数继承、哪些重算。
3.4 重量计算分情况列举
将重量归一化分为A/B/C三种情况:
- A:直接给出总重量 -> 直接用
- B:磅数 -> 除以2.2
- C:单边重量 -> x2+杆重
分类后逐一说明,比混在一起描述更清晰。
四、关键技巧
- 杆重差异用对比示例强调:同样"每边30"在不同动作下的不同结果并排展示,比单独说明更有效。
- REST_PAUSE的sets=1用公式固定:直接写死
sets=1,不给模型"数加号个数"的错误推理空间。 - 继承时重算公式显式写出:
继承"每边40" -> 40x2+15(卧推杆重)=95.0,在示例中展示重算过程。 - 动作名称映射表前置:将中文别名到枚举的映射放在规则最前面,让模型先确定action再查杆重表。
- CLUSTER的reps取单个值而非总和:
2,2,2,2,2 -> reps=2,与REST_PAUSE的求和形成对比,用示例区分。



京公网安备 11010502036488号