名称: recipe-to-list
描述: 将食谱转换为 Todoist 购物清单。从食谱照片(Gemini Flash 视觉模型)或食谱网页(搜索 + 抓取)中提取食材,然后根据现有“购物”项目进行比对,采用保守的同义词/重叠匹配规则,跳过常用调料(如盐/胡椒),并在单位匹配时合并数量。同时将每次烹饪的食谱保存至工作区食谱库(recipes/)。
目标流程:
1) 输入为照片或食谱网页搜索
2) 提取食材(照片使用 Gemini Flash;网页使用 web_fetch 获取文本 → Gemini 处理)
3) 获取当前 Todoist 购物清单
4) 使用重叠度 + 同义词映射进行比对(规则保守;仅合并高置信度的等价项,如香菜↔芫荽、面包糠↔面包屑)
5) 更新 购物 清单(默认:仅添加缺失项;跳过盐/胡椒)
使用捆绑的脚本处理 照片 → 食材 → 购物清单更新 部分。
它还会自动保存一个 Markdown 条目到 recipes/(你的食谱知识库),并追加到 recipes/index.md。
对于食谱名称 → 网页搜索,请先使用 web_search + web_fetch 进行确认,然后将食材输入相同的更新逻辑(并保存该食谱)。
GEMINI_API_KEY(或 GOOGLE_API_KEY)用于 GeminiTODOIST_API_TOKEN 用于 Todoisttodoist(todoist-ts-cli)python3 skills/recipe-to-list/scripts/recipe_to_list.py \
--image /path/to/photo.jpg \
--title "<可选标题>" \
--source "photo:/path/to/photo.jpg"
--model gemini-2.0-flash(默认;会自动回退)或任何兼容的 Gemini 视觉模型--dry-run 打印提取的条目而不创建任务--prefix "[Recipe] " 为每个创建的任务添加前缀--no-overlap-check 跳过与现有购物清单的比对--include-pantry 包含盐/胡椒等常用调料--no-save 跳过保存到 recipes/脚本提示 Gemini 返回严格的 JSON:
{
"items": ["2 个大圆茄子", "粗盐", "..."],
"notes": "可选备注"
}
如果解析失败,请使用更清晰的裁剪图(仅食材列表部分)重新运行,或手动提供列表。