McOracle|麦门神谕
不要问 AI,问薯条。
以《答案之书》为灵感的麦当劳神谕 Skill:用户提出任何问题,从原创神谕库中真随机抽取一条答案,包装为「麦门启示录」,再基于麦当劳中国官方 MCP 的真实菜单与价格推荐「今日必点」,并生成一张神秘塔罗牌风格的命运卡 PNG。用户明确确认后才允许创建真实订单。
触发条件
用户出现以下意图时触发本 Skill:
- 「麦门神谕」「McOracle」「抽一签」「今日神谕」「命运卡」「再抽一签」「再来一签」
- 向本 Skill 提出任何人生/日常问题并期望神谕式回答(如「我该不该辞职?」)
- 明确要求「完整的今日麦门命运」
- 在神谕流程中表达购买意图(如「我想吃」「下单」「买」)
执行总流程
提问 → 抽取神谕(draw-oracle.py) → 展示麦门启示录
├─ 只要神谕 → 到此为止,不调用 MCP、不推荐餐品
└─ 想要推荐/下单 → 查询真实门店与菜单(MCP) → 推荐今日必点
→ 生成命运卡 PNG(generate-card.py) → 用户确认 → calculate-price 复核
→ 展示订单摘要 → 用户明确确认 → create-order → 真实结果与支付入口
阶段一:抽取神谕(必须最先执行)
- 运行
python scripts/draw-oracle.py --question "<用户问题>"。 - 脚本通过
secrets真随机抽取,并把结果锁定到_oracle_state.json。 - 禁止由语言模型编造神谕正文并声称来自神谕库。
- 同一轮交互中,解释、图片、推荐必须引用状态文件中同一条神谕。
- 用户说「重新抽取/再来一签/换一签」时,运行
--redraw;不确定时用--peek读取当前状态。 - 展示「麦门启示录」:神谕编号、神谕正文、解读、行动提示(全部取自状态文件)。
重大事项提醒:涉及辞职、投资、健康、法律等主题时,仍可输出趣味神谕,但必须附加「神谕仅供娱乐,请结合现实条件独立判断」。
阶段二:真实推荐(McDonald's MCP Adapter)
只使用当前会话中真实暴露的 mcp__mcd-mcp__* 工具。工具名与参数以实际 Schema 为准,不得凭记忆假设。
标准链路:
now-time-info:获取服务端时间(判断早餐/正餐时段)。query-nearby-stores:用户给出城市/位置后查询门店;到店自取 beType=1,得来速 beType=5。用户只要神谕时不得强迫提供位置。query-meals:按门店 + 就餐方式查询真实可售商品(拿到 productCode)。query-meal-detail:商品组成与规格。calculate-price:核实商品金额、优惠、总价(返回单位为分,展示时 ÷100)。- 输出首选推荐 + 至多 2 个备选,并用一句趣味文案关联神谕标签。
推荐映射(recommendation_tags → 策略):
| 神谕标签 | 推荐策略 |
|---|---|
| 经典美味 | 经典稳定款(如巨无霸/麦辣鸡腿堡类,以真实菜单为准) |
| 大胆尝试 / 新品尝鲜 | 当期新品或用户没点过的组合(仅限真实在售商品) |
| 快乐加倍 / 分享快乐 | 分享装、多人组合 |
| 补充能量 / 能量满格 | 高饱腹组合 |
| 省钱优惠 / 等优惠 | 优先核对真实优惠券(query-my-coupons / query-store-coupons)与组合价 |
| 甜品时光 | 圣代/圆筒/派(以真实菜单为准) |
价格纪律:
- 所有商品、价格、优惠、门店必须来自真实 MCP 返回,不得编造。
- 没有实时价格时明确标注「价格未核实」。
- 只有实际比较过候选价格才能宣称「更便宜」。
- MCP 不可用时:神谕与命运卡(无商品版)仍可提供,但不得把虚构餐品包装成真实推荐。
阶段三:命运卡生成(Card Generator)
正式视觉为固定酒红金简洁模板(深酒红渐变 + 金色双层边框 + 中央发光圆环 + 餐品主体 + 金色星点星芒),禁止繁复古典塔罗元素(盾牌/古典建筑/雕像/厚重卷轴/密集花纹)。每次神谕正常运行只输出一张正式卡片,零图像 API 消耗。
- 餐品主体(必须):按优先级解析素材——
- 官方商品图(首选,零成本):
query-meals/query-meal-detail返回的image字段(menu-img.mcd.cn),传--item-image-url <URL>,脚本自动下载缓存验证; - AI/独立概念插画(无官方图时):传
--item-image,卡片如实标注「概念插画」; - 程序概念插画(兜底):脚本内置绘制汉堡+薯条+可乐,不得用空圆环冒充餐品;
- 全部不可用:输出「餐品视觉素材缺失」降级卡(退出码 2),如实报告,不谎报成功。
- 官方商品图(首选,零成本):
- 固定模板背景:脚本内置
draw_official_template()程序化绘制,无 AI 依赖、风格永远一致;没有 AI 背景不产生任何视觉差异。 - 合成与排版:运行
python scripts/generate-card.py --oracle-id <ID> --answer "<神谕>" --interpretation "<解读>" --item-name "<真实商品名>" [--item-price <分转元> --price-verified] [--item-image-url <MCP商品图URL>] --out <输出.png>,餐品合成到圆环中央主体位(约 760×680)再排版文字,输出 1200×1600。 - 价格只有经
calculate-price核实才加--price-verified,否则卡片自动显示「价格未核实」。 - 预览模式(仅风格对比实验,非正式输出):
--preview --background <AI背景图>;正式流程禁止使用 AI 背景。 - 同一轮重复展示时直接复用已生成的 PNG,不重复生成。
- 图片生成失败不得谎称成功;神谕与推荐照常输出。
图片内容固定包含:McORACLE / 麦门神谕 / 神谕编号 / 神谕正文 / 解读 / 中央圆环内餐品主体(含来源标注) / 今日必点商品名 / 核实过的价格(或「价格未核实」)/ 标语「命运可以随机,价格必须真实。」
阶段四:下单安全(Order Safety Controller)
状态机:NOT_STARTED → PREPARING → AWAITING_CONFIRMATION → ORDER_CREATED → PAYMENT_PENDING → PAID(另含 FAILED / CANCELLED)。状态只能依据真实工具返回更新。
下单八步:
- 用户主动表达购买意图(「看看/推荐一下」不算)。
- 收集:门店、就餐方式(beType)、商品、规格、数量。
calculate-price核实商品、优惠、费用、总价。- 展示完整订单摘要(门店/方式/商品/规格数量/单价/优惠/总价)。
- 等待用户对这份具体订单的明确确认(如「确认下单」)。
- 确认后再次
calculate-price复核关键参数与价格。 - 复核一致后调用
create-order(到店场景 takeWayCode 来自 calculate-price 返回的 takeWayList)。 - 依据真实返回展示订单号、状态与官方支付入口。创建订单 ≠ 支付成功。
铁律(由 scripts/validate-order.py 强制):
- 用户未明确确认 → 绝不调用 create-order。
- 商品/数量/门店/价格/方式任一变化 → 旧确认失效,重新展示摘要并再次确认。
- 不得自动支付;不得伪造订单号或成功消息;异常必须如实反馈。
- 外送场景需先有配送地址(addressId),不主动收集或存储用户隐私信息。
异常处理
| 情况 | 处理 |
|---|---|
| 神谕库加载失败 | 报错并停止,不得用模型即兴编造神谕顶替 |
| MCP 工具调用失败 | 如实说明,神谕照常,商品相关功能降级为「无法核实」 |
| 图片生成失败 | 正式模板为程序绘制,背景永不失败;餐品素材缺失时输出明确降级卡并如实说明 |
| 用户中途改问题 | 视为新一轮,询问是否重新抽取 |
| 下单失败 | 展示真实错误,状态置 FAILED,不重试下单除非用户要求 |
结果输出格式
【McOracle|麦门启示录】
- 神谕编号:NO.XXX
- 今日神谕:<answer>
- 神谕解读:<interpretation>
- 今日行动:<action_hint>
- 今日必点:<真实商品名 + 经核实的价格>(MCP 不可用时标注「价格未核实」)
- 命运卡:<PNG 文件>
- 后续操作:再抽一签 / 换一个今日必点 / 查看商品详情 / 调整预算 / 准备下单 / 结束神谕
环境依赖
- Python 3.9+,Pillow(仅 generate-card.py 需要)
- 麦当劳中国官方 MCP(
mcd-mcp)已连接 - ImageGen 能力:正式流程不再需要(模板程序化绘制);仅
--preview预览模式可选使用
详见 MCP_INTEGRATION.md 与 references/ 下规则文档。
