把训练数据接入 AI 助手的工程笔记
从手写记录到结构化数据:训练日志的字段设计、清洗与喂给模型的三个原则。
目录

AI智能健身助手的计划质量,一半取决于模型,另一半取决于喂给它的数据长什么样。这篇笔记记录 v0.1 数据链路的几个设计决定。
从一句话到结构化
最初的训练日志就是备忘录里的一句话:“今天深蹲 100kg 5x5,最后一组差点没起来。“对人足够,对模型不够。v0.1 把日志拆成三层:
- 动作层:动作名、重量、组数、次数、RPE;
- 会话层:日期、时长、睡眠、主观状态;
- 周期层:周完成度、吨位、疲劳趋势。
模型不需要记住你的历史,它需要的是当前周期的摘要 + 最近几次的细节。
字段设计的三个原则
- 宁可少,不要脏:不确定的数据宁可不采集。RPE 估不准就先只记完成度;
- 单位进字段名:
weight_kg而不是weight,避免模型自由发挥; - 时间统一 UTC 存储、本地展示:跨设备同步时不会出现”训练比记录早一天”的幽灵。
from datetime import datetime, timezone
def normalize_session(raw: dict) -> dict:
"""清洗一条会话记录:补单位、统一时间、丢弃未知字段。"""
allowed = {"date", "exercise", "weight_kg", "sets", "reps", "rpe", "done_pct"}
record = {k: v for k, v in raw.items() if k in allowed}
ts = datetime.fromisoformat(record["date"]).astimezone(timezone.utc)
record["date"] = ts.isoformat()
record.setdefault("rpe", None)
record.setdefault("done_pct", 1.0)
return record
喂给模型的三个原则
摘要优先,细节限量
上下文窗口很贵。给模型的输入按”周期摘要(一段话)→ 最近 3 次细节(结构化)→ 本次请求”的顺序组织,超出部分宁可不带。
让模型只做决策,不做算术
吨位、增幅、百分比全部在代码里算好再传入。模型负责”判断与建议”,数字交还给人(或函数)复核。
输出必须可校验
让模型按固定 schema 输出计划,缺字段、超范围直接拒绝并重试。这一步把”AI 有时候抽风”变成”工程上可控的重试”。
数据管道的浪漫之处在于:它把坚持这件事,从意志力问题变成了存储与清洗问题。
下一步
v0.2 计划加入可穿戴设备的心率同步,把上一篇里的心率区间自动映射进有氧安排。数据接得越顺,“忍耐”就越像系统,而不是口号。
AI数据Python




