一个基于大型语言模型(LLM)的智能做菜推荐系统,利用 HowToCook 开源菜谱库,为用户提供个性化的菜单推荐、购物清单生成和做菜流程规划、做菜步骤,达到小白都知道“吃什么、怎么做”的目标。
docs 下为 AI 开发的基础文档,context_engineering 下为 AI 交互的实时文档。
docs 目录下:
- prd.md:需求文档
- sad.md:架构设计文档
context_engineering 目录下:
- context_chat.txt:生成代码、修复 bug 的全部交互
- context_generate-data.txt:生成做菜数据源、打标签的交互
- 基于用餐人数、口味偏好、特殊人群需求的个性化推荐
- 考虑食材相克和营养均衡的科学配餐
- 支持荤素搭配和难度适配
- 根据确认菜单自动生成详细购物清单
- 包含原料用量计算和工具准备提醒
- 原始菜谱内容完整呈现,确保信息准确
- 多菜品并行烹饪的时间优化规划
- 识别关键路径和设备使用冲突
- 适合厨房新手的分步指导
- 自然语言理解用户需求
- 多轮对话支持菜品替换和偏好调整
- 智能问答解决烹饪疑问
- 最终生成完整的烹饪指南在 cooking-guides/目录中
graph LR
    A[HowToCook MD文件] --> B[RecipeParser]
    B --> C[RawRecipe JSON]
    C --> D[LLM智能打标]
    D --> E[ProcessedRecipe]
    E --> F[双文件存储]
    F --> G[KnowledgeBase]
    G --> H[AI Agents]
    H --> I[CLI界面]
    - IntentExtractor: 用户偏好提取和意图识别
- MenuRecommender: 基于约束的智能菜单推荐
- WorkflowPlanner: 多任务并行的烹饪流程优化
- recipes_index.json: 轻量级索引,支持快速筛选
- recipes_data.json: 完整数据,按需O(1)访问
- 增量处理: SHA256哈希检测,最小化LLM调用成本
- Node.js >= 16.0.0
- npm 或 yarn 包管理器
- OpenAI API Key 或兼容的 LLM API
- 克隆项目
git clone <repository-url>
cd CookBookAgent- 安装依赖
npm install- 配置环境变量
cp .env.example .env编辑 .env 文件,配置你的 API 设置:
# OpenAI 配置
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1  # 可选:自定义API端点
OPENAI_MODEL=gpt-3.5-turbo
OPENAI_TEMPERATURE=0.3
# 数据处理配置
OPENAI_MAX_TOKENS=2048
BATCH_SIZE=10
REQUEST_DELAY_MS=1000- 启动应用
# 开发模式(推荐)
npm run dev
# 或编译后启动
npm run build
npm start👤 您: 我们家三口人想吃点辣的菜,有小孩不要太辣
🤖 CookingAgent: 🎯 根据您的需求,我为您推荐以下菜单:
1. **微辣宫保鸡丁**
   适合家庭聚餐,微辣口感小朋友也能接受
2. **清炒时蔬**
   清爽素菜,平衡荤腥,提供丰富维生素
3. **紫菜蛋花汤**
   温和汤品,有助消化,丰富用餐层次
您可以:
• 输入"确认"接受这个菜单
• 输入"换掉[菜名]"来替换某道菜
• 告诉我您的具体要求来调整菜单
- 退出程序: 输入 退出、quit或exit
- 重新开始: 输入 重新开始或重新规划
- 菜品替换: 换掉[菜名]或不要[菜名]
- 确认菜单: 确认、好的、就这些
CookBookAgent/
├── src/                      # 源代码
│   ├── agents/              # AI 智能体
│   ├── lib/                 # 核心库
│   ├── components/          # UI 组件
│   └── types/               # 类型定义
├── scripts/                 # 数据处理脚本
│   └── data-processing/     # 数据处理模块
├── data/                    # 处理后的菜谱数据
├── docs/                    # 项目文档
└── HowToCook/              # 外部数据源(需单独获取)
如果需要更新菜谱数据或重新处理:
- 获取数据源
# 克隆 HowToCook 仓库到项目目录
git clone https://github.com/Anduin2017/HowToCook.git- 运行数据处理
npm run build-data此过程将:
- 解析所有 .md菜谱文件(321+ 道菜)
- 使用 LLM 进行智能标签提取
- 生成优化的索引和数据文件
- 仅处理新增或变更的菜谱(增量处理)
# 类型检查
npm run type-check
# 代码格式化(如果配置了)
npm run lint
# 测试核心功能(无UI)
npx ts-node src/test-cli.ts- 增量处理: 基于 SHA256 哈希的变更检测
- 内存优化: 完整数据加载,避免运行时 I/O
- 查询优化: 双文件架构,索引筛选 + O(1) 详细查询
- 容错机制: LLM 调用失败时的智能降级
- 数据验证: Zod schema 确保结构化输出
- 错误恢复: 单点失败不影响整体流程
- 多模型支持: 支持 OpenAI、Claude、Gemini 等
- 配置驱动: 环境变量控制所有关键参数
- 模块化设计: 清晰的关注点分离
当前版本包含的菜谱数据:
- 总菜谱数: 321+ 道
- 分类覆盖: 荤菜、素菜、汤品、主食、甜品等 11 个分类
- 口味标签: 酸、甜、苦、辣、微辣、咸、鲜、麻、香
- 烹饪方式: 炒、蒸、炖、炸、凉拌、烤、烧、焖、煮、煎、烙、汆
- 适用性: 儿童友好、孕妇安全标识
- Fork 项目
- 创建特性分支 (git checkout -b feature/AmazingFeature)
- 提交更改 (git commit -m 'Add some AmazingFeature')
- 推送到分支 (git push origin feature/AmazingFeature)
- 开启 Pull Request
- 使用 GitHub Issues 报告 Bug
- 提供详细的复现步骤和环境信息
- 欢迎功能建议和改进意见
本项目采用 ISC 许可证 - 查看 LICENSE 文件了解详情
- HowToCook - 优质的开源菜谱数据库
- Vercel AI SDK - 强大的 LLM 集成工具
- Ink - React 构建 CLI 的神器
- 项目维护者: [AnswerZhao]
- Email: [[email protected]]
- 项目地址: [https://github.com/AnswerZhao/CookingAgent]
🌟 如果这个项目对您有帮助,请给个 Star 支持一下!