每周菜单生成器(Weekly Menu Generator)
交互式菜单规划技能。用户一句话触发后,通过多轮主动追问收集关键信息,
再结合时令、减脂热量、老人慢病、年龄质地、忌口、人数生成个性化菜单与采购清单,并输出精美 HTML。
何时使用
用户表达菜单规划意图时立即触发,典型触发语(命中其一即可):
- "帮我生成一份每日菜单" / "周菜单" / "今日菜单" / "一周菜谱"
- "这周吃什么" / "帮我安排一周的饭" / "出个菜单" / "帮我规划下伙食"
- 任何含「菜单 / 菜谱 / 吃什么 / 伙食安排」且面向家庭或个人的规划请求
注意:本技能专注「家庭/个人饮食菜单 + 采购清单」。纯菜谱做法查询、餐厅推荐、体重体脂精确医学测算等不在范围内(可正常回答,不必触发)。减脂菜单提供估算热量缺口与饮食方案,非医疗处方。
工作流程
严格按阶段执行。每阶段在得到所需信息后再进入下一步;缺少关键信息时务必先问,不要凭空假设。
阶段 0 — 触发与范围判定
识别到触发语后,先判定生成范围:
- 含「日 / 今日 / 今天 / 单日」→ 单日菜单(1 天,早/午/晚 + 可选加餐)
- 含「周 / 一周 / 每周 / 7 天」→ 整周菜单(7 天)
- 模糊不清 → 在首轮提问中用 AskUserQuestion 询问范围
阶段 1 — 首轮提问(4 个结构化问题,一次性问出)
使用 AskUserQuestion 工具,一次性提出以下 4 题:
- 生成范围
header: 范围
- 整周菜单(7 天 × 3 餐)(推荐)
- 单日菜单(今天 3 餐) - 需要哪些菜单版本
header: 版本(多选 multiSelect:true,可勾选多项)
- 成人普通版(家常均衡)
- 成人减脂版(控制热量,需体重)
- 老人版(清淡软烂,需基础病)
- 小朋友版(按年龄质地)(如家庭有娃则勾选)
> 至少勾选一项;常见家庭组合「成人普通 + 小朋友」或「成人普通 + 减脂 + 老人 + 小朋友」。 - 所在地区
header: 地区(用于判定时令菜,提供常用大区 + 其他自由输入)
- 华北(北京/天津/河北/山西/内蒙古)
- 东北(辽宁/吉林/黑龙江)
- 华东(上海/江苏/浙江/安徽/福建/江西/山东)
- 华中(河南/湖北/湖南)
- 华南(广东/广西/海南)
- 西南(四川/重庆/云南/贵州/西藏)
- 西北(陕西/甘肃/宁夏/青海/新疆)
- 其他(请文字补充省份/城市) - 采购清单
header: 采购清单
- 需要(推荐,含按人数计算的菜量)
- 不需要
> 用户选「其他」地区时,在后续文本中追问具体省份/城市。
阶段 2 — 减脂版补充提问(条件触发)
仅当用户在阶段 1 勾选了「成人减脂版」时执行。 使用 AskUserQuestion 提出 1 题,再用纯文本追问精确数值:
- 减脂人数
header: 减脂人数
- 1 位成人需要减脂
- 2 位成人需要减脂
- 全部成人都需要减脂
随后纯文本追问(必问,因体重为数值):
> "请提供减脂需求者的:① 当前体重(kg);② 目标体重(kg);③ 是否有运动习惯(久坐/轻度运动/规律运动)。我会据此估算每日热量缺口并设计减脂菜单。"
将信息记为 fatloss = {count, current_weight, target_weight, activity}。
阶段 3 — 老人版补充提问(条件触发)
仅当用户在阶段 1 勾选了「老人版」时执行。 使用 AskUserQuestion 提出 2 题:
- 老人人数
header: 老人数
- 1 位老人
- 2 位老人
- 3 位及以上 - 基础病/饮食限制
header: 基础病(多选 multiSelect:true)
- 高血糖 / 糖尿病
- 高血压
- 高血脂
- 痛风 / 高尿酸
- 消化不良 / 牙口不好(软烂)
- 无特殊(仅清淡软烂)
随后纯文本追问(可选,补充细节):
> "如老人有上述基础病,请补充:具体病种细节或正在服用的相关药物(便于更精准地通过食谱辅助调理);若无补充可忽略。"
将信息记为 elderly = {count, conditions: [...]}。详见 references/elderly-guide.md。
阶段 4 — 小朋友版补充提问(条件触发)
仅当用户在阶段 1 勾选了「小朋友版」时执行。 使用 AskUserQuestion 提出 3 题:
- 小朋友年龄段
header: 年龄段(决定食物质地,详见 references/kids-feeding-guide.md)
- 婴幼儿 6–12 个月(糊状/泥状为主)
- 幼儿 1–3 岁(软烂切碎)
- 学龄前 3–6 岁(小块软质)
- 儿童 6 岁以上(接近成人,清淡版) - 忌口
header: 忌口(多选 multiSelect:true)
- 辛辣 / 油腻 / 动物内脏 / 腥膻 / 无特殊 - 过敏食物
header: 过敏(多选 multiSelect:true)
- 鸡蛋 / 牛奶 / 海鲜河鲜 / 坚果 / 花生 / 大豆 / 芒果 / 无
随后纯文本追问(必问,因年龄与人数需精确数值):
> "请补充:① 每位小朋友具体年龄(如:大宝 2 岁半、二宝 9 个月);② 除勾选外还有哪些忌口/过敏请直接说。"
将信息记为 kids、kids_detail。
阶段 5 — 人数与汇总确认(纯文本)
若前面阶段未一次性收集到全部人数,用纯文本追问一次:
> "请确认总用餐人数:成人普通版几位?需要减脂的成人几位?老人几位?小朋友几位?(多个小朋友请分别说明年龄)"
汇总为 household = {adults, adults_fatloss, elderly, kids, kids_detail, elderly_detail}。
阶段 6 — 生成菜单
收集齐信息后开始生成。先确定季节:用当前日期月份映射
(3–5 月春 / 6–8 月夏 / 9–11 月秋 / 12–2 月冬;若系统时间不可靠则向用户确认季节)。
然后按勾选的版本分别产出菜单文本:
A. 成人普通版菜单
- 参考 references/seasonal-ingredients.md,优先选用「地区 × 当前季节」的时令食材与代表菜。
- 每日三餐荤素搭配、粗细搭配、口味轮换,避免连续两餐重复主食材。
- 若用户提供了成人忌口/过敏,从菜单中剔除对应食材与菜品。
B. 成人减脂版菜单(仅当勾选)
- 依据 fatloss 计算热量缺口:以当前体重估算 TDEE(久坐×22~24、轻度×28、规律×32 kcal/kg),
目标体重侧给 300–500 kcal/天缺口(不低至安全下限以下,女性≥1200、男性≥1500 kcal/天)。
- 三大营养素配比:蛋白质 30–40%(保肌)、碳水 35–45%(优先低 GI)、脂肪 20–25%。
- 食材:高蛋白低脂蛋白(鸡胸、鱼虾、瘦牛肉、豆腐、蛋清)、高纤维蔬菜、低 GI 主食(燕麦、糙米、红薯、杂豆);
严格规避添加糖、油炸、精白米面过量、奶茶、酒精。
- 餐次:早/午/晚 + 可选加餐(如希腊酸奶/坚果一小把);详见 references/fatloss-guide.md。
- 菜单顶部标注当前/目标体重与每日热量目标横幅。
C. 老人清淡版菜单(仅当勾选)
- 通用原则:少盐(<5 g/天)、少油、软烂易消化、优质蛋白、足量蔬菜、细嚼慢咽。
- 按 elderly.conditions 叠加慢病方案(详见 references/elderly-guide.md):
- 高血糖/糖尿病:低 GI、控糖、定时定量、全谷物优先、蔬菜先行、规避精制糖与粥类过量。
- 高血压:限钠(腌制品/酱菜/咸鱼禁用)、高钾(菠菜、土豆、海带、香蕉)。
- 高血脂:低饱和脂肪、高纤维、规避动物内脏/肥肉/油炸/蛋黄限量。
- 痛风/高尿酸:低嘌呤、多饮水、规避海鲜/动物内脏/浓肉汤/酒(尤其啤酒)、豆制品适量。
- 菜单顶部标注基础病横幅,并在菜品命名上体现「软/烂/清淡」。
D. 小朋友版菜单(仅当勾选)
- 先按 references/kids-feeding-guide.md 的年龄段质地规则确定食物质地与餐次:
- 6–12 月:糊状/泥状/羹汤为主,禁盐禁糖禁蜜,单一食材引入观察过敏,禁块状坚硬与呛噎风险食物(如 9 个月 → 全部糊状,绝不可出现块状、整粒、坚硬食物)。
- 1–3 岁:软烂切碎,少盐少糖,避免整粒坚果、整颗葡萄、果冻、爆米花等呛噎物。
- 3–6 岁:小块软质,可咀嚼训练,去骨去刺,避免过辣过咸。
- 6 岁+:接近成人但清淡、少油少辣、均衡。
- 严格剔除用户提供的忌口与过敏食物(含其制品,如过敏鸡蛋则不用蛋糕/蛋羹/含蛋酱料)。
- 餐次:婴幼儿 2–3 正餐 + 1–2 加餐;幼儿及以上 3 正餐 + 1–2 加餐。
组合输出规则:勾选了哪些版本,就分别生成对应的独立菜单(各自遵循上述 A/B/C/D 规则,互不混淆)。
典型「成人普通 + 减脂 + 老人 + 儿童」全选时,输出为:成人普通食谱、成人减脂食谱、老人清淡食谱、儿童食谱,四份独立菜单 + 合并采购清单。
阶段 7 — 采购清单(条件触发)
仅当用户在阶段 1 选择「需要」采购清单时执行。
- 以阶段 6 各菜单中出现的新鲜食材为清单来源;按
household中各人群的人数分别估算采购量后合并: - 叶菜/瓜果类:成人约 150–200 g/餐,儿童约 80–120 g/餐,老人约 120–160 g/餐
- 肉禽鱼:成人约 120–150 g/餐,减脂成人约 100–130 g/餐(偏瘦肉),儿童约 60–80 g/餐,老人约 80–100 g/餐
- 蛋:成人约 1 个/天,减脂成人可用蛋清/1 个,儿童约 0.5–1 个/天(按年龄),老人约 0.5 个/天(高血脂限量)
- 主食米面:成人约 100–150 g/餐,儿童约 50–80 g/餐,老人约 80–120 g/餐(优选全谷物)
- 调料/油:按家庭周用量估算,标注「约」
- 剔除因忌口/过敏/慢病被排除的食材;清单按类别分组(蔬菜 / 肉蛋 / 水产 / 主食 / 水果 / 调料 / 其他),
每项含「名称、数量、单位、适用对象(如 成人/减脂/老人/儿童/全家)、备注」。 - 单人份量基准再乘以对应人数与该版本的天数(整周×7,单日×1);易腐食材可提示「分次购买」。
阶段 8 — 渲染 HTML 网页
将阶段 6(及阶段 7)的成果整理为一份 JSON 规格,调用本技能自带脚本渲染为精美 HTML:
- 在工作区(当前目录)写入
menu_spec.json,结构见下方「JSON 规格」。 - 运行脚本(脚本位于本技能
scripts/目录,仅用 Python 标准库,无需安装依赖):
bash python <技能目录>/scripts/generate_menu.py --spec menu_spec.json --out menu.html
> 若环境中python指向系统版本不可用,使用受管解释器:
>C:/Users/Administrator/.workbuddy/binaries/python/versions/3.13.12/python.exe <技能目录>/scripts/generate_menu.py --spec menu_spec.json --out menu.html - 用
present_files工具呈现生成的menu.html,并附一句简短说明。
HTML 自动包含:标题与季节/地区/人数徽章、成人普通菜单、成人减脂菜单(含体重/热量横幅)、老人清淡菜单(含基础病横幅)、儿童菜单(含年龄质地横幅)、采购清单(按类别分组、数量高亮、打印友好)、忌口/过敏/慢病提示脚注。
JSON 规格(阶段 8 输入)
menu_spec.json 示例(字段可缺省,脚本已做容错):
{
"meta": {
"title": "本周家庭菜单",
"range": "week",
"season": "夏季",
"region": "华北",
"generated_at": "2026-07-07",
"notes": ["时令优先", "儿童忌蛋/海鲜", "老人限钠", "减脂控热量"]
},
"household": {
"adults": 2,
"adults_fatloss": 1,
"elderly": 1,
"kids": 1,
"kids_detail": "3岁(小块软质)",
"elderly_detail": "高血压、高血糖"
},
"versions": {
"adult": true,
"adult_fatloss": true,
"elderly": true,
"kids": true
},
"avoid": {
"adult": ["香菜"],
"fatloss": [],
"elderly": ["腌制食品"],
"kids": ["鸡蛋", "海鲜"]
},
"fatloss": { "current_weight": 78, "target_weight": 68, "activity": "轻度运动", "calorie_target": 1650 },
"elderly_conditions": ["高血压", "高血糖"],
"adult_menu": { "days": [ { "label": "周一", "date": "07-07", "meals": { "早餐": ["小米粥","煮鸡蛋"], "午餐": ["番茄炒蛋","米饭"], "晚餐": ["冬瓜排骨汤","米饭"] } } ] },
"fatloss_menu": { "days": [ { "label": "周一", "date": "07-07", "meals": { "早餐": ["燕麦牛奶杯","水煮蛋(1个)"], "午餐": ["鸡胸肉沙拉","糙米饭"], "晚餐": ["清蒸鱼","蒜蓉西兰花","红薯"] } } ] },
"elderly_menu": { "days": [ { "label": "周一", "date": "07-07", "meals": { "早餐": ["小米粥","蒸蛋羹(少盐)"], "午餐": ["清蒸鱼柳","软烂白菜","杂粮饭"], "晚餐": ["豆腐汤","碎菜软饭"] } } ] },
"kids_menu": { "age_note": "3岁", "texture": "小块软质", "days": [ { "label": "周一", "date": "07-07", "meals": { "早餐": ["配方奶","软面包"], "午餐": ["鸡肉蔬菜碎","土豆泥"], "晚餐": ["豆腐羹","软米饭"] } } ] },
"shopping": {
"enabled": true,
"items": [
{ "name": "番茄", "qty": 8, "unit": "个", "cat": "蔬菜", "for": "全家", "note": "" },
{ "name": "鸡胸肉", "qty": 700, "unit": "g", "cat": "肉蛋", "for": "减脂", "note": "去皮" },
{ "name": "燕麦", "qty": 300, "unit": "g", "cat": "主食", "for": "减脂", "note": "低GI" }
]
}
}
range:"day"或"week"versions.adult/versions.adult_fatloss/versions.elderly/versions.kids:布尔,决定渲染哪几份菜单fatloss/elderly_conditions:用于减脂横幅与老人横幅展示meals的键(早/午/晚/加餐等)自由,脚本按出现顺序渲染shopping.enabled=false或无shopping字段 → 不渲染采购清单
资源文件
references/seasonal-ingredients.md— 季节×地区时令食材与代表菜知识库(阶段 6 必读)references/kids-feeding-guide.md— 儿童年龄段质地、忌口过敏、呛噎风险、餐次份量指南(阶段 4/6 必读)references/fatloss-guide.md— 成人减脂热量估算、三大营养素配比、低 GI 食材与减脂餐模板(阶段 2/6 必读)references/elderly-guide.md— 老人慢病(高血糖/高血压/高血脂/痛风)清淡饮食方案与通用原则(阶段 3/6 必读)scripts/generate_menu.py— 读取 JSON 规格,输出自包含精美 HTML(阶段 8 调用)
注意
- 先问后做:任何缺失的关键信息(版本/地区/人数/儿童年龄/减脂体重/老人基础病)都必须主动追问,不得臆测。
- 四套菜单可任意组合,组合时必须生成各自独立的菜单,分别遵循对应规则,互不混淆。
- 减脂版必须给出基于体重的热量缺口估算;老人版必须体现基础病对应的清淡/限钠/低嘌呤等方案。
- 时令优先:地区与季节已知时,尽量用 references 中的时令食材设计菜品。
- 采购量随各人群人数与天数变化;成人/减脂/老人/儿童份量基准不同,见阶段 7。