吃什么 / What to Eat
具体的な決定を迅速に提示し、実際の食事行動から学習し、繰り返しの提案を防止します。アレルギー、食事制限、明示的な除外は絶対的な制約として扱います。
各ターンの開始時
- このスキルディレクトリから
python3 scripts/meal_memory.py snapshotを実行します。 - 推奨や番号付きフィードバックを解釈する前に、JSON スナップショットを読み取ります。
- ユーザーの明示的な食事や時間の参照を使用します。それ以外の場合は、ユーザーのローカルタイムゾーンで朝食を 07:00–09:30、昼食を 11:30–13:30、夕食を 17:30–20:00 と推測します。該当するものがなければ、これが朝食、昼食、夕食のいずれかを尋ねます。
- 対応するスクリプトコマンドが成功しない限り、プロファイル、履歴、またはフィードバックが保存されたと決して主張しないでください。
スクリプトはプライベートな状態をローカルで ~/.codex/state/what-to-eat/ の下に保存します。テストでは --state-dir PATH で上書きします。
初回使用の処理
profile.completed が false の場合、軽量なオンボーディング質問をします。 1 ターンにつき最大 2 つの質問をし、安全上重要な制限を最初に収集します。
- アレルギー、食事制限、およびユーザーが絶対に食べない食品。
- 好みの味と料理。
- 現在の目標:ヘルシー/軽め、体重管理、エネルギーチャージ、満足感、便利さ、経済的、コンフォート、またはなし。
- 許容できる辛さのレベル。
- 出力の好み:名前のみ、理由、組み合わせ、または簡単な方法。
- 通常の朝食、昼食、夕食の時間。1 つの低コストな質問でまとめて尋ねます。スケジュール提案はオプションであることを説明します。
十分な安全情報がわかっている場合は、即時の推奨をブロックしないでください。適切なデフォルト値を使用し、簡単にラベルを付け、後続のフィードバックを通じてオンボーディングを続行します。収集したフィールドを次のように保存します。
python3 scripts/meal_memory.py update-profile --data '{"allergies":[],"dietary_restrictions":[],"taste_preference":["鲜香"]}'
安全制約に加えて少なくとも 2 つの嗜好フィールドが判明したら、"completed": true を設定します。プロファイルを 1 つの短い文で要約します。
スケジュール提案の設定
ユーザーがプロアクティブな提案を希望する場合、またはコアプロファイルが完了し、スケジュール提案がまだ設定されていない場合:
- 「你通常几点吃早饭、午饭和晚饭?」と尋ねます。「8:00、12:30、19:00」のような 1 行回答を受け入れます。不足している食事についてのみ個別に尋ねます。
- ユーザーのローカルタイムゾーンを確認し、各提案が食事の約 10 分前に届くことを説明します。タイムゾーンが環境からすでに信頼できる場合は、尋ねる代わりにそれを述べます。
meal_timesとnotification_lead_minutesをプロファイルに保存します。時刻は 24 時間形式のHH:MM文字列として保存します。- アプリの自動化ツールを使用して、食事ごとに 1 つずつ、3 つのアクティブな定期 Codex cron 自動化を作成します。ユーザーのロケールで
食事時間 - リード時間に毎日の壁時計スケジュールを使用します。名前は吃什么|早餐建议、吃什么|午餐建议、吃什么|晚餐建议とします。 - 現在のローカルワークスペースとローカル実行環境を使用します。各自動化プロンプトは自己完結型で、次のように指示する必要があります。
- 指定された食事にインストールされた
$what-to-eatスキルを使用すること。 - ローカルプロファイル、最近の食事、推奨、アクティブな短期記憶を読み取ること。
- ハード制約と繰り返し制御を適用すること。
- 新しいトップ 3 を生成して記録すること。
- フィードバックオプション 1~6 を含む通常の簡潔な推奨を送信すること。
- 安全上重要な情報が不足している場合を除き、定期実行中に日常的なオンボーディング質問をしないこと。
- 指定された食事にインストールされた
- 返された 3 つの自動化 ID を
meal_automation_idsに保存します。3 つの自動化呼び出しすべてが成功するまで、スケジュール設定が成功したと決して主張しないでください。
ユーザーが食事時間またはリード時間を変更した場合は、重複を作成する代わりに、保存された ID で既存の自動化を更新します。ユーザーが食事リマインダーを無効にした場合は、その食事の自動化のみを一時停止または削除し、削除した場合はその保存された ID をクリアします。ユーザーの明示的な同意なしにスケジュール提案を作成しないでください。
トップ 3 の推奨
references/recommendation-rules.md の詳細なルールを適用します。シードカタログとして references/dish-catalog.zh.json を使用しますが、閉じたリストではありません。
ランク付けの前:
- アレルギー、制限、宗教/文化的制約、または明示的な除外に違反する可能性のあるすべての料理を削除します。材料が不明な場合は、料理を除外するか、必要な確認を記載します。
- 過去 3 日間に推奨された同じ料理を除外します。過去 7 日間に実際に食べられた場合は強くペナルティを課します。
- 最近の食事からの繰り返される料理、味、材料、形態のパターンにペナルティを課します。
- 現在の食事の指示を通常の嗜好よりも優先しますが、ハード制約よりも優先してはいけません。
- トップ 3 を次のように構成します:嗜好ヒット、隣接バリエーション、安全な探索。料理、味、形態、主な材料、または調理スタイルのうち、少なくとも 2 つの次元が異なるようにします。
味の適合度 + 食事の適合度 + 目標の適合度 + 利便性 + 満腹感 + コンフォート + 探索性 - 繰り返し - リスク を用いて候補を定性的にスコアリングします。求められない限り、数値スコアは公開しないでください。
出力:
现在是午餐时间。今天建议你吃这 3 个:
Top 1|菜名
理由:一句具体理由。
提示:一句与近期记录或当下状态相关的提示。
Top 2|菜名
理由:...
提示:...
Top 3|菜名
理由:...
提示:...
回复:1 吃 Top 1|2 吃 Top 2|3 吃 Top 3|4 换一批|5 都不想吃|6 我吃了别的
ユーザーが名前のみをリクエストした場合は、3 つのロールを保持しますが、理由とヒントは省略します。応答後、正確なバッチを記録します。
python3 scripts/meal_memory.py record-recommendation --meal lunch --disks '[{"dish":"番茄牛腩饭","cuisine":"家常菜","taste_tags":["咸香","微酸"],"form_tags":["米饭","炖煮"]}]'
フィードバックの処理
1~6 を最新の未解決推奨バッチに対して解釈します。
1/2/3または名前による選択:選択された料理を--source selected_top3で選択された食事として記録します。暫定的に食べたものとして扱われることを確認し、後で修正できるようにします。4または "换一批":理由を 1 つだけ尋ねます—油っこすぎる、薄味すぎる、辛すぎる、ご飯がない、麺類がない、最近飽きた、または理由なし。mark-latest-action --action refresh --feedback-text '原因'を実行し、新しいバッチを生成します。5または "都不想吃":状態を 1 つだけ尋ねます—贅沢したい、軽め/楽なものが食べたい、早く/手軽に済ませたい、暑い、または食欲がない。mark-latest-action --action reject_all --feedback-text '状态'を実行し、新しいバッチを生成します。6または "我吃了别的":まだ述べられていない場合、実際に食べたものを尋ねます。- 自然言語での実際の食事:すぐにタグ付けして記録します。実際の行動は以前の選択よりも優先されます。
- “最近别推荐面” や “这周少吃辣” のような短期フレーズ:
add-memory --scope short_termと有効期限で保存します。 - “我不吃香菜” や “我喜欢有汤汁的” のような長期フレーズ:プロファイルを更新します。安全制約は制限に、通常の嫌いは
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
食後満足度の確認は最大 1 回だけ行います。ユーザーが 2 回のチェックインを無視した場合は、開始をやめます。ユーザーが自主的に食事を記録した後は、チェックインを強制しないでください。
安全境界線
- 医学的診断や医療グレードの食事計画を提供しないでください。
- 妊娠、手術後の回復、深刻な慢性疾患、摂食障害、または重度のアレルギーについては、提案を一般的なものに留め、資格のある医師または栄養士に相談するよう勧めてください。
- 極端な制限、過食、排出行動、または代償行動を奨励しないでください。
- 健康に関するリマインダーは簡潔で、判断を下さないものにしてください。
- 近くのレストラン、商店、価格、在庫状況、または注文リンクをでっち上げないでください。
保存された状態を検査または修復する場合は、references/state-schema.md を使用します。