基于 LangChain + LangGraph + 多模态大模型的智能食谱推荐助手-AI 私人厨师 (Personal Chef)

📅 2026/8/10 9:34:55
基于 LangChain + LangGraph + 多模态大模型的智能食谱推荐助手-AI 私人厨师 (Personal Chef)
项目简介今天吃什么 这是每个家庭每天都在面对的难题。冰箱里有鸡蛋、番茄、青椒但能组合出什么菜营养搭配合理吗做起来难不难AI 私人厨师 (Personal Chef)正是为了解决这个痛点而生。它是一个基于LangChain 1.2 LangGraph构建的多模态智能体应用你只需上传一张冰箱或厨房的照片它就能识别食材— 多模态大模型看懂图片中的食材种类、新鲜度、可用量联网搜索— 以食材清单为关键词调用 Tavily 搜索引擎检索最新食谱智能评分— 从营养价值和制作难度两个维度量化打分优中选优结构化输出— 输出一份包含食谱信息、得分、推荐理由、参考图片的建议报告整个过程通过SSE 流式响应实时呈现就像跟一位真正的私人厨师在对话。✨ 核心特性特性说明多模态识别支持图片 文本混合输入无需手动列食材清单实时联网搜索集成 Tavily 搜索引擎获取最新、最热的食谱对话记忆基于 SQLite LangGraph Checkpointer多轮对话有上下文流式响应后端 SSE 流式输出前端逐字渲染体验丝滑多维评分营养价值 制作难度 双维度打分轻松决策️图片直传阿里云 OSS 预签名直传前端直接上传不走后端代理会话管理支持新建、清空、查询历史会话现代 UI基于 Next.js 构建的玻璃拟态风格前端️ 技术架构整体架构图关键技术栈类别技术选型为什么选它大模型通义千问 qwen3.5-plus多模态原生支持图片文本理解无需额外 OCR 管线Agent 框架LangChain 1.3.x LangGraph状态机管理、Checkpoint 持久化、流式输出Web 搜索Tavily Search API专为 AI Agent 设计的搜索引擎返回结构化结果后端框架FastAPI 0.109原生异步支持、SSE 流式、自动生成 OpenAPI 文档记忆存储SQLite langgraph-checkpoint-sqlite零配置、文件级存储轻量级首选对象存储阿里云 OSS 预签名直传前端直传节省后端带宽前端Next.js (静态导出) Tailwind CSS静态资源部署无需 Node 运行时 核心流程解析1. Agent 构建 — 私厨的大脑Agent 是项目的核心它使用 LangGraph 的create_agent工厂函数构建集成了多模态模型、联网搜索工具和持久化记忆。# app/agents/personal_chef.py — 核心代码 ​ # 1. 初始化多模态模型OpenAI 兼容协议对接阿里百炼 model init_chat_model( modelqwen3.5-plus, model_provideropenai, base_urlos.getenv(DASHSCOPE_BASE_URL), api_keyos.getenv(DASHSCOPE_API_KEY), ) ​ # 2. 初始化 SQLite Checkpointer对话记忆持久化 connection sqlite3.connect(str(db_path), check_same_threadFalse) checkpoint SqliteSaver(connection) checkpoint.setup() ​ # 3. 创建 Agent — LangGraph 编译产物 agent create_agent( modelmodel, tools[web_search], # Tavily 搜索工具 checkpointercheckpoint, # 记忆存储 system_promptsystem_prompt, )为什么用 LangGraph 而不是 LangChain 的 AgentExecutorLangGraph 的create_agent底层使用CompiledStateGraph相比传统的AgentExecutor它原生支持Checkpoint 持久化、循环控制和流式消息输出这些正是本项目需要的核心能力。2. 多模态消息处理 — 让 AI 看懂食材用户上传图片后Agent 需要将图片和文本组合成多模态消息。实现方式非常简单# 判断是否有图片封装不同格式的消息 if not image or image.strip() : message HumanMessage(contentprompt) else: message HumanMessage(content[ {type: image, url: image}, # 图片 URL {type: text, text: prompt} # 用户文本 ])这里的关键是HumanMessage的content支持传入一个列表每个元素可以指定不同的类型image、text。多模态模型qwen3.5-plus会同时理解图片内容和文字描述而不需要额外的 OCR 预处理。3. 流式调用 — 实时反馈的秘诀为了让用户体验像跟真人厨师聊天一样流畅我们使用 LangGraph 的流式模式# 流式调用 Agent for chunk, metadata in agent.stream( {messages: [message]}, {configurable: {thread_id: thread_id}}, stream_modemessages # 关键消息级流式 ): if isinstance(chunk, AIMessageChunk) and chunk.content: yield chunk.content # 逐块产出内容后端通过 FastAPI 的StreamingResponse包装这个生成器前端通过 EventSource 接收实现逐字渲染的效果。4. 系统提示词 — 私厨的工作流程system_prompt 你是一名私人厨师。收到用户提供的食材照片或清单后请按以下流程操作 1. 识别和评估食材若用户提供照片首先辨识所有可见食材评估新鲜度与可用量。 2. 智能食谱检索优先调用 web_search 工具以食材清单搜索可行菜谱。 3. 多维度评估与排序从营养价值和制作难度两个维度量化打分简单营养的排名靠前。 4. 结构化方案输出输出包含食谱信息、得分、推荐理由、参考图片的报告。 这个提示词定义了 Agent 的工作流——不是简单的问答而是识别 → 搜索 → 评估 → 输出的完整链路。 快速开始环境要求Python 3.10 ~ 3.13推荐 3.13推荐使用 Conda 管理虚拟环境一键安装# 1. 克隆项目 git clone https://github.com/Gavin2149161093/personal-chef-ai-agent.git cd personal-chef-ai-agent ​ # 2. 创建虚拟环境推荐 Conda conda create -n personal-chef python3.13 conda activate personal-chef ​ # 3. 安装依赖 pip install -r requirements.txt ​ # 4. 配置环境变量 cp .env.example .env # 编辑 .env 文件填入你的 API Key配置说明你需要申请以下 API Key服务用途申请地址阿里云百炼 (DashScope)多模态大模型大模型服务平台百炼控制台Tavily联网搜索Tavily阿里云 OSS (可选)图片存储阿里云登录 - 欢迎登录阿里云安全稳定的云计算服务平台启动服务python -m app.main启动后访问 前端界面http://127.0.0.1:8001 API 文档http://127.0.0.1:8001/docs使用示例打开浏览器访问 http://127.0.0.1:8001点击左下角图片按钮上传冰箱/食材照片在输入框中输入帮我看看这些食材能做些什么等待 Agent 流式输出食谱建议报告 项目展示交互流程用户: [上传一张冰箱照片 输入帮我看看能做什么] ↓ Agent: 识别到→ 鸡蛋×3、番茄×2、青椒×2、猪肉×200g [评估新鲜度食材新鲜建议尽快食用] ↓ Agent: 正在搜索食谱... [调用 Tavily 搜索 鸡蛋 番茄 青椒 猪肉 食谱] ↓ Agent: 搜索到 8 个候选食谱正在评分... ↓ Agent: 推荐排行 ┌─────────────────────────────────────────┐ │ 番茄炒蛋 │ │ 营养评分: 9.2/10 难度评分: 2.1/10 │ │ 推荐理由: 经典家常菜制作简单营养均衡│ ├─────────────────────────────────────────┤ │ 青椒肉丝 │ │ 营养评分: 8.7/10 难度评分: 3.5/10 │ │ 推荐理由: 荤素搭配口感丰富 │ ├─────────────────────────────────────────┤ │ 番茄肉丸汤 │ │ 营养评分: 9.0/10 难度评分: 4.2/10 │ │ 推荐理由: 汤品暖胃营养易吸收 │ └─────────────────────────────────────────┘前端界面截图预览基于 Next.js 构建的玻璃拟态 (Glassmorphism) 风格界面支持消息气泡展示用户/助手区分流式文本逐字渲染图片上传预览历史会话管理新建/清空会话 配套教程项目还附带了一套LangChain 入门实战教程位于notebooks/目录从零开始逐步讲解Notebook主题适合人群2.2_models.ipynbChatModel 初始化与多模型切换初学者2.3_messages.ipynb消息对象体系初学者2.4_prompt.ipynb提示词工程初学者2.5_tools.ipynb工具定义与使用进阶2.6_memory.ipynb短期/长期记忆机制进阶2.7_agent_project.ipynb私厨 Agent 完整项目实战实战2.8. LangSmith联调测试.ipynbLangSmith 调试追踪进阶推荐学习路径2.2 → 2.3 → 2.4 → 2.5 → 2.6 → 2.7 → 2.8 技术亮点回顾为什么这个项目值得关注真实落地的多模态 Agent不是简单的 Chatbot而是集成了看→搜→评→荐的完整工作流LangGraph 状态机的最佳实践Checkpointer 持久化、流式输出、工具调用编排生产级工程架构FastAPI SSE OSS 预签名直传 Next.js 静态前端零门槛上手配套 7 个 Jupyter Notebook 教程从模型到 Agent 步步为营可扩展性强切换模型、添加工具、修改评分维度都非常简单扩展思路接入更多工具添加营养数据库 API、食材价格查询、替代食材推荐增加评分维度在系统提示词中增加成本、烹饪时间等维度切换数据库从 SQLite 切换到 PostgreSQL支持多用户并发部署到云端使用 Docker 容器化部署配合 Nginx 反向代理 总结与展望AI 私人厨师这个项目展示了LangChain 1.x LangGraph在实际场景中的强大能力。从技术选型来看LangGraph 的CompiledStateGraph相比传统的AgentExecutor提供了更精细的控制能力——Checkpoint 持久化、循环控制、流式消息输出这些都让 Agent 的行为更加可靠和可预测。未来可以从以下几个方向继续优化多 Agent 协作引入食材管理 Agent、营养分析 Agent、成本计算 Agent形成私厨团队个性化推荐基于用户历史偏好建立用户画像实现千人千面的推荐语音交互集成 ASR 和 TTS实现真正的语音私厨体验移动端适配将前端适配为 PWA 或小程序方便在厨房使用 开源地址如果这个项目对你有帮助欢迎 ⭐ Star 支持平台链接Giteehttps://gitee.com/ganhaifeng/personal-chef-ai-agentGitHubhttps://github.com/Gavin2149161093/personal-chef-ai-agent/写在最后这个项目最初源于一个很朴素的想法——每次打开冰箱都不知道做什么菜。感谢 LangChain 生态和阿里云百炼提供的强大能力让我能用代码解决这个日常难题。如果你也有类似的 Idea欢迎 fork 项目一起玩耍