Community研究与数据分析github.com

食谱转换

从 URL 或纯文本导入食谱并转换为 Cooklang 格式

食谱转换 是什么?

这是一个用于将食谱转换为 Cooklang 格式的 AI 技能。它支持通过 URL(使用 CookCLI)从主流食谱网站导入、通过纯文本手动解析,以及从 JSON、YAML、Markdown 等其他格式转换。该技能会引导用户完成从识别来源、提取元数据(如份量、烹饪时间、营养信息)到生成标准 Cooklang `.cook` 文件的完整流程。对于 CookCLI 导入失败的站点,它会优雅地回退至手动转换,并询问缺失信息(如份量、时间)以确保结果完整。它还能识别常见的食材、时间和设备模式,生成结构化的 Cooklang 代码,并最终向用户展示结果以供校对与保存。此技能对于希望通过 Cooklang 这种纯文本格式以结构化方式管理个人食谱库的开发者或烹饪爱好者尤为实用。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add 999Fritsch/Skills

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

转换食谱

概述

将现有食谱转换为 Cooklang 格式,来源包括:

  • URL - 使用 CookCLI 从食谱网站导入
  • 纯文本 - 手动解析粘贴的食谱
  • 其他格式 - JSON、YAML、Markdown 食谱

使用此技能的场景:

  • 将食谱从网站保存下来
  • 将手写食谱数字化
  • 从其他食谱格式转换

流程

第一步:识别来源

询问:“您想转换什么?”

  • URL - 要导入的网站链接
  • 粘贴的文本 - 从别处复制的食谱
  • 文件 - 现有其他格式的文件

第二步:导入或解析

对于 URL(使用 CookCLI):

cook import "https://example.com/recipe"

如果 CookCLI 导入失败(不支持的网站),回退到手动转换。

对于粘贴的文本或不支持的网站:

  1. 提取标题
  2. 识别份量/产出
  3. 解析食材列表(查找数量、单位)
  4. 将说明分解为步骤
  5. 记录提到的烹饪时间
  6. 识别所需设备

第三步:生成 Cooklang

创建格式正确的 .cook 文件:

  1. 元数据 - 包含提取信息的 YAML 前置元数据
  2. 食材 - 使用 @ 标记并带有正确的数量格式
  3. 厨具 - 使用 # 标记设备
  4. 计时器 - 提取时间并用 ~ 标记
  5. 步骤 - 每个步骤一个段落

第四步:填补空缺

提示缺失信息:

  • “食谱没有指定份量。这是多少人份?”
  • “没有提到烹饪时间。大约需要多长时间?”

第五步:审阅和保存

展示转换后的食谱并询问:

  • “这个转换看起来准确吗?”
  • “我应该把它保存到哪里?”

示例

用户: “转换 https://example.com/banana-bread”

执行:

cook import "https://example.com/banana-bread"

如果成功,输出保存。如果不成功,进行手动转换:

用户: “转换这个食谱: 香蕉面包 1 条 3 根熟香蕉,1/3 杯融化黄油,3/4 杯糖,1 个鸡蛋,1 茶匙香草精,1 茶匙小苏打,一小撮盐,1.5 杯面粉 预热烤箱至 350°F。将香蕉捣碎,加入黄油、糖、鸡蛋、香草精混合。加入干性材料。倒入面包模具。烘烤 60 分钟。”

生成的:

---
title: 香蕉面包
servings: 8
time: 1 小时 15 分钟
prep time: 15 分钟
cook time: 60 分钟
source: (添加原始来源(如果已知))
tags: [烘焙, 早餐, 甜点]
calories: 280 kcal
carbohydrates: 52 g
protein: 4 g
fat: 7 g
fiber: 2 g
---

将 #烤箱{} 预热至 350°F。

在 #大搅拌碗{} 中,将 @熟香蕉{3} 捣碎至顺滑。

加入 @融化黄油{1/3%杯}、@糖{3/4%杯}、@鸡蛋{1} 和 @香草精{1%茶匙} 混合。

加入 @小苏打{1%茶匙}、@盐{1%小撮} 和 @通用面粉{1.5%杯}。搅拌至刚好混合。

将面糊倒入抹油的 #面包模具{} 中。

烘烤 ~烤箱{60%分钟},或直到插入中心的牙签干净取出。

切片前冷却。

参考

CookCLI 导入

# 基本导入
cook import "https://example.com/recipe"

# 使用特定名称保存
cook import "https://example.com/recipe" -o "我的食谱.cook"

支持的网站: CookCLI 使用 recipe-scrapers 库。大多数主流食谱网站都可以。如果导入失败,请使用手动转换。

手动转换模式

要识别的食材模式:

  • “3 个大鸡蛋” → @大鸡蛋{3}
  • “1 杯面粉” → @面粉{1%杯}
  • “盐适量” → @盐
  • “2-3 瓣大蒜” → @大蒜{2-3%瓣}
  • “1/2 茶匙香草精” → @香草精{1/2%茶匙}

时间模式:

  • “烘烤 30 分钟” → ~烤箱{30%分钟}
  • “焖煮 1 小时” → ~{1%小时}
  • “静置 10-15 分钟” → ~{10-15%分钟}

设备模式:

  • “大碗” → #大搅拌碗{}
  • “9x13 模具” → #9x13 烤盘{}
  • “在煎锅中” → #煎锅{}

元数据提取

查找这些常见字段:

  • 标题: 食谱名称,通常是标题
  • 份量: “4 人份”、“做 12 个”、“产出 2 杯”
  • 时间: “总时间:45 分钟”、“准备时间 15 分钟,烹饪时间 30 分钟”
  • 来源: 原始 URL 或“改编自...”
  • 作者: 食谱创作者(如果署名)

营养价值(每份)— 如果存在则始终提取:

  • calories — kcal
  • carbohydrates — g(碳水化合物)
  • protein — g(蛋白质)
  • fat — g(脂肪)
  • fiber — g(膳食纤维)
  • sugar — g(糖)
  • saturated_fat — g(饱和脂肪酸)
  • sodium — mg(钠/盐)

对于通过 JS 渲染营养信息的网站(例如 lidl-kochen.de),始终获取 /print/ URL 变体 — 它会返回包含所有值的静态 PDF。

Cooklang 语法提醒

  • 使用 --- 的 YAML 前置元数据(绝不能使用 >>)
  • 多词食材:@研磨黑胡椒粉{}
  • 带单位的数量:{500%g} 而不是 {500g}
  • 步骤之间用空行分隔

相关技能