Communitygithub.com

TongyiDai/what-to-eat-skill

結合口味、忌口、飯點和近期飲食,幫你決定這頓吃什麼的 AI 技能

what-to-eat-skill 是什麼?

這個 AI 技能旨在成為你的個人餐飲決策助手,解決「中午吃什麼」這類日常難題。它會綜合考量你的口味偏好、飲食禁忌、過敏資訊、當前用餐時間以及近期的飲食記錄,給出三個具體、可執行的餐點建議。技能內建了一套完整的狀態管理機制,透過 Python 腳本 `meal_memory.py` 來記錄用戶設定檔、用餐歷史、短期記憶以及每次的推薦與回饋。支援 Claude Code、Cline 等以 SKILL.md 為核心的 AI 編碼代理平台。其運作邏輯包括:首次使用時進行輕量引導收集安全資訊(如過敏源)、根據用戶當地時間和飯點自動建議、避免重複近期推薦過的菜色、並依據六種回饋代碼(1-6)動態調整後續推薦。此外,技能還支援設定排程提醒,在用戶同意後,可透過 cron 自動化在早午晚餐前推送建議。整體設計強調快速決策、從實際行為中學習,並將過敏和明確排斥視為硬性約束,確保建議的安全與實用性。

相容平台~Claude Code✓Codex CLI~Cursor
npx skills add TongyiDai/what-to-eat-skill

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

吃什麼 / What to Eat

快速給出具體決策,從實際進食行為中學習,並避免重複建議。將過敏、飲食限制和明確排斥視為硬性約束。

每次開始對話時

  1. 在此技能目錄下執行 python3 scripts/meal_memory.py snapshot。
  2. 在推薦或解釋編號回饋之前,先讀取 JSON 快照。
  3. 使用使用者明確提到的餐別或時間參考。否則,在使用者的當地時區推斷:早餐在 07:00–09:30,午餐在 11:30–13:30,晚餐在 17:30–20:00。如果都不適用,詢問這是早、午還是晚餐。
  4. 除非對應的腳本指令成功執行,否則切勿聲稱設定檔、歷史記錄或回饋已被儲存。

腳本將私有狀態儲存在 ~/.codex/state/what-to-eat/ 之下。在測試中可透過 --state-dir PATH 覆蓋此路徑。

處理首次使用

如果 profile.completed 為 false,詢問一個輕量的引導問題。每次對話最多問兩個問題;優先收集安全相關的限制:

  1. 過敏、飲食限制以及使用者從不吃的食物。
  2. 偏好的口味和菜系。
  3. 當前目標:健康/清淡、體重控制、補充能量、滿足感、方便、經濟、舒適或無。
  4. 接受的辣度。
  5. 輸出偏好:僅菜名、附理由、搭配建議或簡便方法。
  6. 通常的早、午、晚餐時間,用一個低成本的問題一起詢問。解釋排程建議是可選的。

如果已知足夠的安全資訊,不要阻止立即推薦。使用合理的預設值,簡短標註,並透過後續回饋繼續引導。使用以下命令儲存已收集的欄位:

python3 scripts/meal_memory.py update-profile --data '{"allergies":[],"dietary_restrictions":[],"taste_preference":["鮮香"]}'

一旦安全限制加上至少兩個偏好欄位已知,就將 "completed" 設為 true。用一句簡短的話總結設定檔。

設定排程建議

當使用者想要主動建議時,或當核心設定檔完成且排程建議尚未配置時:

  1. 詢問:「你通常幾點吃早飯、午飯和晚飯?」接受一行回答,例如「8:00、12:30、19:00」。如果缺少某些餐別,則分別詢問。
  2. 確認使用者的當地時區,並說明每條建議將在餐前約 10 分鐘到達。如果時區已從環境可靠得知,則直接說明而非詢問。
  3. 將 meal_times 和 notification_lead_minutes 儲存到設定檔。時間儲存為 24 小時制的 HH:MM 字串。
  4. 使用應用程式的自動化工具為每一餐建立三個有效的重複性 Codex cron 自動化任務。使用使用者的當地日常時鐘排程,時間設為 用餐時間 - 提前分鐘數。將它們命名為 吃什麼|早餐建議、吃什麼|午餐建議 和 吃什麼|晚餐建議。
  5. 使用當前的本地工作區和本地執行環境。每個自動化提示必須是自包含的,並說明:
    • 使用已安裝的 $what-to-eat 技能來處理指定的餐別;
    • 讀取本地設定檔、最近的餐點、推薦和活躍的短期記憶;
    • 套用硬性約束和重複控制;
    • 生成並記錄一個全新的前 3 名;
    • 發送標準的簡潔推薦,附上回饋選項 1–6;
    • 在排程執行期間,除非缺少安全關鍵資訊,否則不要詢問常規的引導問題。
  6. 將三個返回的自動化 ID 儲存在 meal_automation_ids 中。在所有三個自動化呼叫都成功之前,切勿聲稱排程設定成功。

當使用者更改用餐時間或提前時間時,透過已儲存的 ID 更新現有自動化,而不是建立重複項。當使用者停用某餐提醒時,僅暫停或刪除該餐的自動化,如果刪除則清除其已儲存的 ID。未經使用者明確同意,不要建立排程建議。

推薦前三名

套用 references/recommendation-rules.md 中的詳細規則。使用 references/dish-catalog.zh.json 作為種子菜單,而非封閉清單。

在排序之前:

  1. 移除所有可能違反過敏、限制、宗教/文化約束或明確排斥的菜色。當成分不確定時,排除該菜色或說明需要的驗證。
  2. 排除過去 3 天內推薦過的同一個菜色。如果過去 7 天內實際吃過,則強烈懲罰。
  3. 懲罰近期餐點中重複的菜系、口味、食材和形式模式。
  4. 優先遵循當餐的指示而非普通偏好,但絕不能凌駕於硬性約束之上。
  5. 組成前三名:偏好命中、相鄰變化、安全探索。確保至少兩個維度在菜系、口味、形式、主料或烹飪風格上有所不同。

使用口味契合度 + 餐別契合度 + 目標契合度 + 便利性 + 飽足感 + 舒適度 + 探索性來定性評分候選項,減去重複性和風險。除非被問到,否則不要暴露數字分數。

輸出:

現在是午餐時間。今天建議你吃這 3 個:

Top 1|菜名
理由:一句具體理由。
提示:一句與近期記錄或當下狀態相關的提示。

Top 2|菜名
理由:...
提示:...

Top 3|菜名
理由:...
提示:...

回覆:1 吃 Top 1|2 吃 Top 2|3 吃 Top 3|4 換一批|5 都不想吃|6 我吃了別的

如果使用者要求僅菜名,保留三個角色但省略理由和提示。在回覆後記錄確切的批次:

python3 scripts/meal_memory.py record-recommendation --meal lunch --dishes '[{"dish":"番茄牛腩飯","cuisine":"家常菜","taste_tags":["鹹香","微酸"],"form_tags":["米飯","燉煮"]}]'

處理回饋

將 1–6 解釋為針對最新的未解決推薦批次。

  • 1/2/3 或指定的名稱:將選中的菜色記錄為已選餐點,使用 --source selected_top3。確認它被暫時視為已食用,並允許後續更正。
  • 4 或「換一批」:僅問一個原因——太油、太淡、太辣、沒有飯、沒有麵、最近吃膩了或沒有原因。執行 mark-latest-action --action refresh --feedback-text '原因',然後生成新批次。
  • 5 或「都不想吃」:僅問一種狀態——放縱、清淡/舒適、快速/方便、熱或食慾不振。執行 mark-latest-action --action reject_all --feedback-text '狀態',然後生成新批次。
  • 6 或「我吃了別的」:詢問實際吃了什麼,除非已陳述。
  • 自然語言描述的實際餐點:立即標記並記錄。實際行為優先於先前的選擇。
  • 短語如「最近別推薦麵」或「這週少吃辣」:使用 add-memory --scope short_term 儲存並設定到期日。
  • 長期短語如「我不吃香菜」或「我喜歡有湯汁的」:更新設定檔;安全限制歸入 restrictions,一般厭惡歸入 disliked_foods 或 disliked_forms。

範例:

python3 scripts/meal_memory.py record-meal --meal lunch --dish '黃燜雞米飯' --source user_input --tags '{"cuisine":"家常菜","taste":["鹹香","濃醬"],"form":["蓋飯"],"ingredients":["雞肉","米飯"]}'
python3 scripts/meal_memory.py add-memory --scope short_term --kind exclude --value '麵食' --days 7
python3 scripts/meal_memory.py rate-latest-meal --satisfaction satisfied

最多問一次餐後滿意度。如果使用者忽略兩次確認,則停止發起。在使用者自願記錄餐點後,不要強制進行確認。

安全邊界

  • 不要提供醫療診斷或醫療級別的飲食計劃。
  • 對於懷孕、手術恢復、嚴重慢性病、飲食失調或嚴重過敏,保持建議的一般性,並建議諮詢合格的臨床醫生或營養師。
  • 不要鼓勵極端限制、暴食、催吐或補償行為。
  • 保持健康提醒簡短且不帶評判。
  • 不要虛構附近的餐廳、商家、價格、供應情況或訂購連結。

檢查或修復儲存狀態時,使用 references/state-schema.md。

相關技能