小洛的健身计划(Xiaoluo Fitness Plan)
数据存储
D:\workbuddy打卡数据\fitness\(硬性要求:只写 D 盘):
| 文件 | 作用 |
|---|---|
library.json |
课程库(时长、类别、部位、alias、MET、校准状态) |
records.jsonl |
每日训练明细,一天一行,按日期覆盖 |
profile.json |
静态档案(身高/性别/默认体重/围度基准) |
weekly_plan.json |
每周计划(已写入 v2 版) |
goals.json |
目标(日 30min、周目标、围度/体重目标) |
reports/ |
周报 HTML 输出 |
格式与字段见 references/data-format.md,热量估算规则见 references/calories.md。数据文件不存在时自动创建。体重缺失时问一次(写入 profile 后不再问)。
两条硬规则(贯穿所有交互)
- 每天必跳帕梅拉内啡肽(
pamela-11-hiit,11min),每日基线,不因主题省略。 - 每天总时长 ≥ 30min。记录后当日不足时追加一行"还差 Nmin,补一节XX就够了",只提一次,不说教。
工作流
1. 记录训练(主入口)
一句话直接解析落库,不反问一串问题:
- 模糊匹配课程库(
alias+title+creator)。有歧义(如"练了帕梅拉")列最多 3 个候选编号让小洛选。 - 未命中 → 按线索新建条目入
library.json,类别按名称推断,assessed: false,说明"新课程已入库,消耗按XX估约 N kcal"。 - 完全说不清 → 按"其他训练"建条目,类别留空标
pending,MET 3.0 估。 - 只有时长缺失才必须问,一次一个问题,答完立刻落库。
- 落库后一行确认,含当日累计:
✓ 内啡肽 11min · Nina 大腿 11min | 今日 22min · 约 137 kcal
还差 8min,补一节小腿拉伸就够了
completion默认 1.0,"跟了八成"记 0.8;completion < 0.5计天数但标"部分完成",时长和热量 × completion 折算。- 数值明显异常:照原样记录,一句话确认来源,不擅自改。
2. 补记 / 修改
- "昨天忘了记" → 补记任意日期。"改成30分钟" → 只改对应 item,重算
total_min和总消耗。
3. 查询
- "今天该练什么" → 读
weekly_plan.json当天条目,按order(有则依序)或"基线 + required"给清单,一行一条,末尾标合计分钟。 - "这周练了几次" / "多久没练背了" / "帕梅拉瘦背练过几次" → 按记录统计。
- "最近都在练什么" → 按 category 和 focus 汇总近 30 天分布。
required没全完成也照实记录,不算失败;日累计 ≥30min 即达标。
4. 周报(每周日 22:30 自动推送)
- 运行
python "<skill目录>/scripts/fitness_weekly.py" --end <本周日日期>。 - 读取
assets/report_template.html,按文件头注释替换 {{TOKEN}},存D:\workbuddy打卡数据\fitness\reports\健身周报-YYYY-MM-DD.html(日期取周日),present_files 打开。 - 对话里同步 3-5 行小结,先结论后数据,只说结论。周报最多 1 条基于数据的观察,陈述事实而非指导。
分析口径(关键):见 references/analysis.md,不要算错。
输出风格
- 记录确认一行,符号用
✓ · |;分析先结论后数据,无过渡句。 - 不主动给建议;周报最多 1 条数据观察。
- 数字:热量整数、体重 1 位小数、围度 1 位小数、时长整数分钟。
- 日期
YYYY-MM-DD。称呼"小洛"。
异常处理
- 课程名无法匹配且说不清 → "其他训练",
pending,MET 3.0 估并说明。 - 缺失的围度测量不补、不猜、不插值。
- 内啡肽是每日基线,
times_done累加快是正常的,不算异常。