calorie-deficit-tracker
一个给豆包任务模式(Doubao Agent Mode)用的技能(Skill):把热量计算从"每次联网搜索估算"固化为"查本地食物库 + 脚本计算"。
它解决什么问题
用对话式 AI 记账热量时,常见三个问题:
- 信源不稳定。每次问同一种食物,AI 联网搜索,命中的页面不同,返回的数值也不同。
- 计算不严谨。模型心算单位换算与累加,容易出现偏差。
- 数值不可追溯。给出的热量没有来源标注,无法判断该不该信。
本技能把这三件事分别固定下来:数据存本地库、算术交给脚本、每条记录带来源标注。同一食物、同一重量,任何一次询问都返回同一个数。
核心设计
数据与能力分离。技能目录只放规则和脚本;用户的身体档案、食物库、日志全部放在独立的工作区目录。技能升级不会碰到数据。
算术全部下沉脚本。模型负责理解输入和呈现结果,不做任何心算,也不得调整脚本返回的数值。
信任用户提供的数据。用户报出的摄入热量或运动消耗按原值计入,不追问来源、不评价可信度、不做来源分级。用户不知道具体数值时,技能才代为查询。
置信度评估的是计算链路,不是用户。评分只针对技能侧的不确定环节(活动档位是否确认、档案时效、单位换算是否为估算、库内数据是否可核验、记录是否完整),不对用户提供的数据做价值判断。
口径必须显式。生重、熟重、即食三种口径直接影响结果,同一食物生熟之间可差 25% 到 30%,因此必须标注清楚。
安装
下载或克隆本仓库。
把
skills/calorie-deficit-tracker文件夹整个复制到豆包的用户技能目录:%LOCALAPPDATA%\Doubao\User Data\Default\.doubao\agent_mode\workspace\.user_skills\重启豆包客户端,或退出任务模式后重新进入,触发技能扫描。
豆包会自动扫描该目录并同步,无需额外注册。判断是否生效:在任务模式里问一句"查一下米饭的热量",如果它去调用脚本而不是联网搜索,说明已加载。
目录结构
calorie-deficit-tracker/ 仓库根
├── .claude-plugin/
│ └── plugin.json 插件清单
├── README.md
├── LICENSE
└── skills/
└── calorie-deficit-tracker/ 技能本体
├── SKILL.md 技能主文件:流水线、硬规则、输出模板
├── references/
│ ├── calculation-rules.md 计算口径、公式出处、安全阈值
│ ├── data-standard.md 字段规范、来源分级、口径与查重规则
│ ├── confidence-model.md 置信度评分模型
│ └── unit-conversion.md 单位换算与生熟折算
└── scripts/
├── fooddb.py 食物库:初始化、录入、查询、更新、审计
├── calc.py 摄入计算:查库换算、支持直接给定热量
├── gap.py 消耗与缺口:档案、BMR、缺口、安全校验、置信度
├── exercise.py 运动消耗记录
└── log.py 日志与趋势统计
除 SKILL.md 外全部按需加载,不占用常驻上下文。
计算模型
BMR = 10 × 体重 + 6.25 × 身高 − 5 × 年龄 ± 性别项 (Mifflin-St Jeor, 1990)
日常消耗 = BMR × 日常活动系数 (FAO/WHO/UNU 2004 PAL 分级)
日总消耗 = 日常消耗 + 运动消耗 (运动消耗由用户提供)
热量缺口 = 日总消耗 − 当日摄入
基础代谢采用 Mifflin-St Jeor 公式。原始文献:Mifflin MD, St Jeor ST, et al. A new predictive equation for resting energy expenditure in healthy individuals. American Journal of Clinical Nutrition, 1990, 51(2): 241-247。系统评价:Frankenfield D, et al. Comparison of predictive equations for resting metabolic rate in healthy nonobese and obese adults: a systematic review. Journal of the American Dietetic Association, 2005, 105(5): 775-789。
日常活动系数取自 FAO/WHO/UNU Expert Consultation Human energy requirements(FAO Food and Nutrition Technical Report Series 1, Rome 2004)第 5 章。该章表 5.3 给出 PAL 官方分级:久坐或轻度活动 1.40-1.69、活跃或中度活跃 1.70-1.99、剧烈活动 2.00-2.40。表 5.1 的析因计算显示,完全不含专门运动的久坐生活方式 24 小时时间分配对应 PAL = 1.53。
该系数刻意剥离训练:训练消耗单独记录后叠加。若沿用含训练的活动系数再叠加运动消耗,训练部分会被计算两次,单日缺口可虚高数百千卡。
安全阈值强制校验四项:摄入低于基础代谢、摄入低于绝对下限(女性 1200 / 男性 1500 kcal)、单日缺口超过 1000 kcal、预计周减重超过体重的 1%。
数据来源与核验标准
食物库支持四种来源等级,按可靠度区分处理:
| 等级 | 来源 | 处理 |
|---|---|---|
label |
预包装食品营养成分表 | 直接采用 |
user |
用户提供的数值或实测值 | 直接采用 |
authority |
中国食物成分表、USDA FoodData Central、FAO/WHO 等 | 直接采用 |
online |
联网检索所得 | 交叉核对并记录网址与日期 |
online 是唯一需要额外标注的等级,因为它是技能自己查来的中间环节,存在检索漂移。其余三种一律直接采信。
已入库示例数据均标注了具体来源,例如中国疾病预防控制中心营养与健康所的食物成分查询平台、USDA FoodData Central 的具体条目编号。
使用
技能加载后,用自然语言即可:
录入:午饭吃了 200 克米饭和一个肉包
运动:今天跑了 30 分钟,消耗 350
查询:帮我算一下今天的热量缺口
更新:我体重降到 68 了
也可以直接给定热量而不必倒推食物:午饭大概 600 卡。
数据存放位置
技能目录只读。用户数据固定在工作区:
<用户目录>\Documents\热量管理\
├── profile.json 身体档案
├── foods.json 食物库
├── logs\ 每日日志
└── reports\ 汇总输出
脚本默认解析该路径,可用 --workdir 参数或 CALORIE_WORKDIR 环境变量覆盖。
边界
本技能只做热量计算与缺口统计,不判断食物是否健康、不评价饮食结构优劣。不适用于医疗营养处方、疾病治疗饮食、进食障碍相关场景、孕期哺乳期营养方案、婴幼儿喂养与运动损伤诊疗。
所有消耗数值均为估算:基础代谢由人群回归公式得出,个体实测值通常存在约 ±10% 偏差;日常活动系数是区间估算。这也是置信度评分封顶 92 分而非满分的原因。
环境要求
Python 3.8 及以上,仅使用标准库,无第三方依赖。脚本已处理 Windows 控制台的中文编码问题,并在运行时禁用 __pycache__ 生成以保持技能目录整洁。
许可
MIT
No comments yet. Be the first to write one.