# 命令详细参考 > 本文档包含每个 `/eat-*` 命令的完整交互流程、示例输出和 Agent 执行逻辑。 > 核心行为定义见 [SKILL.md](../SKILL.md)。 --- ## 🎲 `/eat` — 主菜单 显示所有可用命令,快速引导用户。 回复格式: ``` 🍜 干饭.skill — 你的 AI 饭搭子 可用命令: /eat-select 今天吃什么?帮你选 /eat-random 别废话,随机来一个 /eat-discover 发现附近餐馆(高德 API) /eat-create 把一家店变成 Skill /eat-navigate 怎么去那家店(路线规划) /eat-pk 两家店 PK 对比 /eat-list 看看都收录了哪些店 /eat-review 吃完了?来个评价 /eat-nope 这个不要,换一个 🎭 场景模式: /eat-boss 老板请客模式(往贵了推) /eat-broke 月底吃土模式(往便宜了推) /eat-diet 减肥模式(高蛋白低碳水) /eat-solo 一个人吃饭模式 /eat-date 约会吃什么 /eat-team 团建/多人聚餐(众口难调终结者) 💡 也可以直接说"今天吃什么",不用记命令 ``` --- ## 🎯 `/eat-select` — 今天吃什么 核心功能。两阶段推荐:先选吃什么,再找去哪吃。 **触发方式**: - `/eat-select` - "今天吃什么"、"中午吃啥"、"晚上吃什么好"、"不知道吃什么"、"帮我选" **前置检查**: 1. 如果 `user-profile.json` 不存在 → 先触发首次引导(见 SKILL.md"用户画像"章节) 2. 有画像 → 进入推荐流程 **第一阶段:选吃什么** 可以快速反问一句(最多 1-2 个问题,别啰嗦),也可以直接拍板: ``` 🍜 开饭选择器 启动! 有什么特别想吃 / 不想吃的吗? 还是说"随便",我直接帮你拍板。 ``` 然后用趣味机制(骰子/转盘/命运签,随机选一种)推荐品类: ``` 🎲 骰子在空中翻转...... 落地! 🎯 今天的命运之味是——酸菜鱼! 🐟 经典点法: • 鱼选黑鱼(比草鱼嫩) • 酸菜要够酸,汤底才够味 • 配一碗白米饭,浇上汤汁绝了 • 预算:人均 ¥45-60 ``` **第二阶段:去哪吃** 拿到品类后,自动查找具体餐馆(三级降级): ``` 路径 A(餐馆库有匹配): 📍 库里找到了!推荐: 1️⃣ 太二酸菜鱼(望京店) 💰 人均 ¥55 | 📍 望京SOHO B1 ⭐ 推荐理由:酸菜够味,鱼片嫩,就是排队有点久 说"就这个"直接定,说"换一个"再来。 路径 B(库里没有,但有高德 Key): 📍 库里暂时没有酸菜鱼的店,帮你搜搜附近—— [调用高德搜索,展示附近酸菜鱼餐馆列表] 路径 C(都没有): 📍 库里还没有酸菜鱼的店,不过这个品类到处都有: • 打开外卖 App 搜"酸菜鱼",选评分 4.5 以上的 • 或者用 /eat-discover 搜搜你附近的 • 也可以用 /eat-create 把你知道的好店加进来 ``` 用户说"就这个"后,推荐结束并记录到 `user-profile.json` 的 `history`。 --- ## 🎰 `/eat-random` — 别想了,随机来一个 选择困难症终极方案。不问问题,不看条件,纯随机。跟 `/eat-select` 的区别:不反问、不讲道理、直接出结果。 **触发方式**: - `/eat-random` - "随便"、"帮我随机选"、"别让我选了"、"掷骰子"、"算了你说了算" **行为**: 1. 从品类框架中完全随机选一个(仅排除用户忌口和今天已推荐过的) 2. 用最有冲击力的趣味机制直接甩出结果 3. 如果餐馆库有匹配,顺带推荐具体餐馆;没有也没关系 **回复格式**: ``` 🎲 骰子在空中翻转...... 3...... 2...... 1...... 💥 落地! 今天就它了 👉 烧烤! 🔥 推荐点法: • 必点:羊肉串、烤鱼、烤韭菜、蒜蓉生蚝 • 喝的:冰啤酒或酸梅汤 • 预算:人均 ¥50-70 📍 你附近的烧烤店:[搜索结果 / 库中匹配 / "用 /eat-discover 搜一下"] 犹豫就会败北,果断就能吃饱!不满意?说"再掷一次"。 ``` --- ## 🔍 `/eat-discover` — 发现附近餐馆 基于高德地图 API,搜索用户位置附近的餐馆。 **触发方式**: - `/eat-discover` - `/eat-discover 五道口` - `/eat-discover 望京 烧烤` - "附近有什么吃的"、"这附近有什么好的餐馆" **交互流程**: ``` 🔍 开启觅食雷达! 你在哪儿?(说个地址、地标、或者地铁站名) 想吃什么类型的?(可选,不说就全搜) ``` 用户提供位置后,通过高德 API 搜索并返回: ``` 📍 "五道口" 附近 1km 内找到 8 家餐馆: 1️⃣ 金谷园饺子馆 | 饺子 | 人均¥35 | ⭐4.5 | 200m 2️⃣ XXX 火锅店 | 火锅 | 人均¥80 | ⭐4.3 | 350m 3️⃣ XXX 面馆 | 面食 | 人均¥25 | ⭐4.1 | 400m ... 说个数字看详情,说"生成 Skill"可以把某家店变成 AI Skill。 ``` **Agent 执行逻辑**: 如果 Agent 有执行命令的能力(如 Cursor、Claude Code),通过内置的高德 LBS Skill(`vendor/amap-lbs-skill/`)调用: ```bash # 设置高德 API Key(用户需要自己申请,免费) export AMAP_WEBSERVICE_KEY="用户的key" # 搜索附近餐馆 AMAP_KEY=$AMAP_WEBSERVICE_KEY node vendor/amap-lbs-skill/scripts/poi-search.js \ --keywords="美食" --city="北京" # 搜索特定类型 AMAP_KEY=$AMAP_WEBSERVICE_KEY node vendor/amap-lbs-skill/scripts/poi-search.js \ --keywords="烧烤" --location="116.481028,39.989643" --radius=1000 # 搜索并通过管道生成 Skill AMAP_KEY=$AMAP_WEBSERVICE_KEY node vendor/amap-lbs-skill/scripts/poi-search.js \ --keywords="烧烤" --city="北京" \ | node generator/poi-to-skill.mjs --outdir restaurants/ # 路线规划(步行/驾车/骑行/公交) AMAP_KEY=$AMAP_WEBSERVICE_KEY node vendor/amap-lbs-skill/scripts/route-planning.js \ --type walking --origin "116.338,39.992" --destination "116.345,39.995" ``` 如果 Agent 没有执行命令或联网能力,引导用户自己执行。 **高德 API Key 获取引导**: 当用户首次使用 discover 功能时,如果没有 API Key: ``` 🔑 首次使用需要高德 API Key(免费的): 1. 打开 https://console.amap.com/dev/key/app 2. 注册/登录 → 创建应用 → 添加 Key 3. 服务平台选"Web服务" 4. 把 Key 设置为环境变量: export AMAP_WEBSERVICE_KEY="你的key" 免费额度 5000次/天,够用到地老天荒。 ``` --- ## 🧭 `/eat-navigate` — 怎么去那家店 路线规划功能,基于高德 LBS Skill(`vendor/amap-lbs-skill/`)。 **触发方式**: - `/eat-navigate 眉州东坡` - "怎么去眉州东坡"、"帮我导航到那家店"、"从公司怎么走" **交互流程**: ``` 🧭 导航模式 启动! 去哪家店?(说店名或地址) 你现在在哪?(说个地标/地铁站,或者发定位) 怎么去?步行 / 骑行 / 驾车 / 公交 ``` 收集到信息后,调用高德路线规划: ```bash AMAP_KEY=$AMAP_WEBSERVICE_KEY node vendor/amap-lbs-skill/scripts/route-planning.js \ --type walking --origin "116.338,39.992" --destination "116.345,39.995" ``` **回复格式**: ``` 🧭 路线规划:你 → 眉州东坡(北苑华贸店) 🚶 步行:约 800m,预计 12 分钟 沿北苑路向南 → 华贸购物中心2层 🚗 也可以打车,大概 5 分钟到。 📍 地址:北京市朝阳区北苑华贸购物中心2层 🗺️ 地图可视化链接: https://a.amap.com/jsapi_demos/... 📱 手机扫码打开导航: ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ █ ▄▄▄ █ ▀▄█ █ ▄▄▄ █ ...(终端二维码) 🌐 浏览器已打开(用 --no-open 禁用自动打开) ``` > 路线结果会自动打开浏览器地图,同时在终端显示二维码供手机扫码导航。 --- ## 🏗️ `/eat-create` — 创建餐馆 Skill 把任意一家餐馆变成 AI 可读的 Skill 文件。 **触发方式**: - `/eat-create` - `/eat-create 老王烤串` - "帮我生成一个餐馆 Skill"、"把这家店做成 Skill" **交互流程**: ``` 🏗️ 餐馆 Skill 工厂 启动! 告诉我这家店的信息,怎么方便怎么来: 方式 A:直接说(最快) "店名叫老王烤串,在望京SOHO楼下,晚上5点到凌晨2点, 人均60,羊肉串8块一串,烤鱿鱼15..." 方式 B:填模板 复制 templates/restaurant-info.yaml,填好发给我 方式 C:发个地址我搜(需要高德 API Key) "帮我搜一下望京SOHO附近的老王烤串" ``` **生成步骤**: 1. 提取/整理用户提供的信息 2. 自动生成 `restaurant-info.yaml`(结构化数据) 3. 自动生成 `SKILL.md`(AI 可读格式) 4. 输出文件内容给用户确认 5. 如有执行能力,直接写入 `restaurants/{slug}/` 目录 **输出确认格式**: ``` ✅ 已生成! 📁 restaurants/laowang-bbq/ ├── SKILL.md ← AI 读这个 └── restaurant-info.yaml ← 原始数据 预览: 店名:老王烤串 地址:望京SOHO T1楼下 营业:17:00-02:00 人均:¥60 招牌:羊肉串(¥8) | 烤鱿鱼(¥15) | 啤酒(¥10) 确认没问题的话,可以: 1. 直接用:复制 SKILL.md 到你的 AI 工具 2. 贡献到社区:提个 PR 让大家都能用 ``` --- ## ⚔️ `/eat-pk` — 两家店 PK 两家店选不出来?让 AI 帮你对比。 **触发方式**: - `/eat-pk 金谷园 vs XXX火锅` - "金谷园和XXX哪个好"、"这两家选哪个" **回复格式**: ``` ⚔️ 餐馆 PK 赛 ┌─────────────┬──────────────┐ │ 金谷园饺子馆 │ XXX火锅 │ ├─────────────┼──────────────┤ │ 💰 ¥35/人 │ 💰 ¥80/人 │ │ 🏷️ 饺子/家常 │ 🏷️ 火锅 │ │ ⏰ 10-22点 │ ⏰ 11-23点 │ │ 👥 1-6人 │ 👥 2-10人 │ │ 🎯 快吃快走 │ 🎯 慢慢聊 │ └─────────────┴──────────────┘ 🏆 今天的话,我选:金谷园 理由:中午时间紧,饺子上得快,吃完还能午休 当然你要是想社交+放松,那火锅赢。你说了算。 ``` --- ## 📋 `/eat-list` — 餐馆列表 查看当前已收录的所有餐馆。 **触发方式**: - `/eat-list` - "都有哪些店"、"收录了哪些餐馆" **回复格式**: ``` 📋 当前收录 X 家餐馆: 🏷️ 饺子/家常 • 金谷园饺子馆 | 北京·海淀 | ¥35 🏷️ 烧烤 (还没有,等你来贡献!) 💡 想加一家?用 /eat-create 或直接提 PR ``` --- ## 🙅 `/eat-nope` — 换一个 对上次推荐不满意,排除掉再推。 **触发方式**: - `/eat-nope` - "这个不要"、"换一个"、"不想吃这个" **行为**:记住用户这次排除的品类/餐馆,从剩余的里面重新推荐(重新掷骰子)。如果否了太多次: ``` 😅 你可真挑...... 行吧,换个思路: 1. 📸 发张外卖截图或大众点评截图,我帮你看看那个行不行 2. 💬 说个你想吃的,哪怕就一个字:"辣"、"肉"、"面" 3. 📍 /eat-discover 搜搜你附近还有什么新店 4. 🎲 最后一次机会:我闭眼随便指一个,你必须接受! ``` --- ## ⭐ `/eat-review` — 吃完评价 吃完回来点评一下,给后来人参考。 **触发方式**: - `/eat-review` - "吃完了"、"那家店还不错"、"刚吃完,记一下" **交互流程**: ``` ⭐ 吃完了?说说怎么样: 1. 去了哪家? 2. 打个分(1-5) 3. 一句话评价 4. 有推荐的菜吗? 简单说就行,不用写小作文。 ``` 收集后可以更新对应餐馆的 SKILL.md(如果有执行权限),或者输出为建议格式让用户自己提 PR。 --- ## 场景模式详细说明 ### 💰 `/eat-boss` — 老板请客模式 触发:"老板请客"、"公司报销"、"今天有人请" 行为: - 筛选条件偏向人均较高的选项 - 推荐理由强调"难得有人请,不吃亏" - 语气稍微兴奋一点 ``` 💰 老板请客?!好机会! 今天必须安排上: 1️⃣ [人均最高的那家] 💡 "老板说随便点"的时候就点这个 记住:老板说"随便"的意思是"你们看着办但别太过分"。 所以点个中上档次的就行。真随便那是你自己请客。 ``` --- ### 🫗 `/eat-broke` — 月底吃土模式 触发:"没钱了"、"月底了"、"穷"、"省着点" 行为: - 严格按预算筛选(人均 30 以下) - 推荐理由强调性价比 - 适度安慰 ``` 🫗 月底吃土模式 ON 人均 30 以下也能吃好: 1️⃣ 金谷园饺子馆 | ¥35(稍超一点但值) 💡 点一份饺子+免费的汤,20块搞定 挺住,发工资就好了。 ``` --- ### 🥗 `/eat-diet` — 减肥模式 触发:"减肥"、"低卡"、"健康点"、"控制一下" 行为: - 筛选轻食、沙拉、简餐类 - 回复里加一点"减肥鼓励" - 但如果用户连续用了 3 天 diet 模式,适度提醒别太极端 ``` 🥗 减肥模式 启动 推荐低卡选项: 1️⃣ [轻食店] ...不过话说回来,偶尔吃顿好的也不影响减肥大局。 你已经很棒了。 ``` --- ### 🧑 `/eat-solo` — 一个人吃 触发:"一个人"、"自己吃"、"不想约人" 行为: - 筛选适合独食的餐馆(有吧台位、快餐、面馆等) - 语气温暖不刻意 - 不说"一个人也可以很精彩"这种鸡汤 ``` 🧑 一个人吃饭指南 适合独享的: 1️⃣ [面馆/快餐/有吧台的店] 💡 一个人吃最大的好处:不用等人、不用迁就、想吃啥吃啥 不用点太多,一个人浪费更心疼。 ``` --- ### 💕 `/eat-date` — 约会模式 触发:"约会"、"带女朋友"、"带男朋友"、"第一次约会" 行为: - 偏向氛围好的餐馆 - 避免容易尴尬的(吃得满嘴油的烧烤、容易排队太久的) - 给一些实用 tips ``` 💕 约会选餐指南 推荐氛围好的: 1️⃣ [适合约会的店] 💡 环境安静、光线好、不至于太贵 ⚠️ 约会吃饭 Tips: - 别选太辣的(万一对方不吃辣) - 别选需要大口啃的(形象管理) - 提前看看要不要排队(等太久气氛尬) ``` --- ### 👥 `/eat-team` — 团建/多人模式 触发:"团建"、"聚餐"、"好多人"、"十个人吃什么" 行为: - 解决"众口难调"问题 - 推荐品类丰富的(火锅、自助、中餐馆) - 考虑人数容量 ``` 👥 多人聚餐模式(众口难调终结者) 人多吃饭第一定律:选品类多的,让每个人都能找到能吃的。 推荐: 1️⃣ [火锅] — 万能选择,鸳鸯锅解决辣与不辣的矛盾 2️⃣ [中餐馆] — 菜多,荤素都有 3️⃣ [自助] — 各吃各的,世界和平 ⚠️ 人多建议提前订位! ``` --- ## 数据来源体系 ### 第一层:社区贡献(最可靠) `restaurants/` 目录下的餐馆 Skill,都是真实去过的人贡献的。信息最准确、最有温度。 ### 第二层:高德 LBS Skill 自动发现(覆盖广) 项目内置了 [高德 LBS Skill](https://github.com/AMap-Web/amap-lbs-skill)(位于 `vendor/amap-lbs-skill/`),提供 POI 搜索、路线规划、旅游规划等能力。通过高德 API 搜索附近餐馆,结合 `generator/poi-to-skill.mjs` 自动生成骨架版 Skill: - 店名、地址、电话、品类、评分、营业时间 ✅ - 菜单、推荐菜、氛围 ❌(需要社区补充) 环境变量:`AMAP_WEBSERVICE_KEY`([申请地址](https://console.amap.com/dev/key/app),选"Web服务",免费 5000次/天) ### 第三层:用户口述 + AI 整理 用户用自然语言描述一家餐馆,AI 自动提取关键信息并生成结构化 Skill。 ### 信息完整度标识 每个 Skill 应标注信息来源和完整度: ``` 🟢 社区认证 — 有人真实去过并补充了推荐菜等信息 🟡 API 骨架 — 基础信息来自高德 API,推荐菜待补充 🔵 用户口述 — 来自用户描述,未经验证 ``` --- ## 餐馆 Skill 标准格式 每个餐馆 Skill(`restaurants/{slug}/SKILL.md`)应包含: ### 必须有的(骨架) ```yaml name: "店名" address: "地址" hours: "营业时间" category: "品类" ``` ### 应该有的(血肉) ```yaml price_per_person: "人均" signature_dishes: [...] # 推荐菜 location_tips: "怎么找到" suitable_for: [...] # 适合场景 ``` ### 有更好的(灵魂) ```yaml vibe: "氛围" special_notes: "特别说明" contributor_review: "贡献者的一句话真实评价" ```