饮食记录与营养分析助手。当用户提到"饮食记录"、"记下我吃了"、"营养分析"、"统计饮食"、"最近X天吃了什么"等关键词时触发。功能包括:(1) 解析用户输入的饮食内容并查询营养数据;(2) 计算并记录全部营养素(热量、宏量营养素、脂肪酸、矿物质、维生素);(3) 将饮食记录存入 meal_log.json;(4) 支持阶段性营养统计(按日/周/月)。食物营养数据来源:foodwake (https://github.com/LuckyHookin/foodwake),烹调油和佐料使用内置参考数据。
references/food-table.json (1643条,JSON Lines格式)references/oils_seasonings.json{WORKSPACE}/meal_log.json{WORKSPACE}/user_profile.json
{WORKSPACE}=C:\Users\s\.openclaw\workspace
若 user_profile.json 不存在或不完整,主动询问:
| 字段 | 询问方式 | 说明 |
|---|---|---|
| 性别 | "请问您的性别是?" |
| 男/女,影响基础代谢计算 |
| 出生年月 | "请问您的出生年份是?" | 计算年龄 |
| 身高 | "请问您的身高是?" | cm |
| 体重 | "请问您的体重是?" | kg |
| 日常运动 | "您的日常运动量是?" | 久坐/轻度/中度/重度 |
| 健康目标 | "您目前的主要健康目标是?" | 减脂/维持/增肌/其他 |
| 饮食限制 | "有什么饮食限制或过敏吗?" | 素食/忌口/过敏等(可选) |
将档案保存为 user_profile.json(见下方格式)。
用户输入格式灵活,如:
解析步骤:
查询脚本用法:
python {WORKSPACE}/skills/diet-log/scripts/query_food.py -d {WORKSPACE}/skills/diet-log/references/food-table.json -o {WORKSPACE}/skills/diet-log/references/oils_seasonings.json -q "食物名" --top-k 5 --json-out
注意:脚本路径均为绝对路径(基于
{WORKSPACE}),不要使用相对路径scripts/。
匹配策略(三级):
米饭 → 查找name/nickname包含"米饭"的食物油和佐料处理(重要 — 必须纳入计算):
oils_seasonings.json无法识别的食物: 向用户提问确认,如"请问您说的【xxx】具体是什么食物?大概吃了多少?"
计算各食材营养之和,按以下分类汇总输出:
热量与宏量营养素:
脂肪酸:
矿物质:
维生素:
输出格式:
🍽️ 【午餐营养分析】2026-04-15 12:30
食物构成:
· 米饭 150g → 热量 174kcal | 蛋白质 3.9g | 脂肪 0.5g | 碳水 38.9g
· 红烧肉 100g → 热量 215kcal | 蛋白质 14g | 脂肪 17g | 碳水 2g
· 青菜 200g → 热量 34kcal | 蛋白质 2.4g | 脂肪 0.2g | 碳水 3.4g
· 花生油 10g → 热量 90kcal | 脂肪 10g
━━━━━━━━━━━━━━━━━━━━
合计:热量 513kcal | 蛋白质 20.3g | 脂肪 27.7g | 碳水 44.3g | 纤维 3.2g
钠 480mg | 铁 2.8mg | 锌 3.1mg | 维生素C 45mg | 维生素E 3.2mg
将本餐记录追加到 meal_log.json(JSON Lines格式,每行一条记录):
{"timestamp":"2026-04-15T12:30:00+08:00","meal_type":"lunch","foods":[{"name":"米饭","amount":"150g","energy_kcal":174,"protein_g":3.9,"fat_g":0.5,"carbs_g":38.9}],"total":{"energy_kcal":513,"protein_g":20.3,"fat_g":27.7,"carbs_g":44.3},"user_profile_summary":"..."}
重要: 每次记录后必须立即持久化到磁盘,不依赖任何中间缓存。
当用户要求统计(如"最近7天的饮食情况"):
统计脚本: 读取 meal_log.json,按日期/周/月聚合:
python {WORKSPACE}/skills/diet-log/scripts/stats_meal.py -d {WORKSPACE}/meal_log.json --days 7 --profile {WORKSPACE}/user_profile.json
统计内容:
输出格式:
📊 【最近7天饮食统计】2026-04-08 ~ 2026-04-15
总热量:13,245 kcal(日均 1,892 kcal)
目标缺口/超额:约 -108 kcal/天(维持体重目标下,偏低)
营养素比例:
蛋白质:日均 68g(占14%)✅ 建议15-20%
脂肪: 日均 56g(占27%)⚠️ 建议20-30%
碳水: 日均 268g(占59%)✅ 建议45-65%
矿物质(日均):
钠 3,200mg(⚠️ 超出建议上限5,000mg/天,偏高)
钙 420mg(⚠️ 建议800mg/天,偏低)
铁 13mg(✅ 正常)
建议:
· 脂肪摄入比例略高,建议减少烹调油用量或选择更瘦的肉类
· 钙摄入偏低,建议每天喝一杯牛奶或多吃豆制品
| 用户输入 | 数据库匹配 | 类型 |
|---|---|---|
| 米饭 | 粳米(米饭) | 谷类 |
| 面条/挂面 | 挂面 | 谷类 |
| 鸡蛋 | 鸡蛋(均值) | 蛋类 |
| 鸡胸/鸡肉 | 鸡肉(均值) | 畜肉 |
| 猪肉 | 猪肉(均值) | 畜肉 |
| 牛肉 | 牛肉(均值) | 畜肉 |
| 青菜/白菜 | 叶菜类 | 蔬菜 |
| 苹果 | 苹果(均值) | 水果 |
| 牛奶 | 牛奶(均值) | 乳类 |
| 豆腐 | 豆腐(均值) | 豆类 |
| 花生油 | 花生油 | 油类 |
| 盐 | 食盐 | 调味品类 |
| 酱油 | 酱油(生抽) | 调味品类 |
food-table.json 中的营养值格式需解析:
"37千卡" → 提取 37.0 kcal"1.5克" → 提取 1.5 g"毫克" / "克" 单独出现 → 视作 0使用 scripts/query_food.py 的 --json-out 模式可自动完成数值解析。