LangChain 实战|AI 私厨 Agent:拍照识别冰箱食材,自动生成食谱推荐
上篇你给 Agent 装上了记忆——
thread_id能续聊,爆窗还有三种策略。零件齐了:Models、Messages(含看图)、Tools、Memory。这篇按导图做一次入门实战:AI 私厨——拍照认食材,再推荐食谱。
小明接到「看冰箱做菜」需求
产品经理丢来一句话(几乎就是导图原文):
小明零件都会:看图 Messages、@tool、外挂记忆、create_agent。一拼项目却又散了——配置写在 main 里,工具和记忆各拷一份,演示脚本和排障日志缠在一起。
他去找老张:”业务怎么走?代码怎么拆,才不像练手时那样焊死?”
老张说:”业务跟导图;骨架:config → llm → tools/ → memory → agent → main。私厨只是换工具与输入形态(图文 Messages)。”
什么是 AI 私厨(需求 + 整合范式)
“实现思路四层:
-
感知 —— HumanMessage content 挂图片(上篇 Messages) -
行动 —— search_recipes(ingredients=...)一类@tool -
记忆 —— 对话历史含工具中间消息( ConversationMemory) -
编排 —— create_agent+ 清晰 system_prompt
验收范式:--demo 多轮可跑通;私厨验收:一张食材图 → 推荐列表(可录屏)。”
| 步骤(导图) | 落点 |
|---|---|
2.1 配置 .env |
config.py |
| 2.2~2.3 依赖 / 加载配置 | requirements + load_dotenv |
| 2.4 定义工具 | tools/ 分包 |
| 2.5 初始化模型 | llm.get_chat_model(需视觉能力时换多模态模型名) |
| 2.6 记忆管理 | ConversationMemory 或 checkpointer |
| 2.7 初始化 Agent | create_agent + Assistant |
| 2.8 测试 | main.py --demo |
| 3 LangSmith | 环境变量打开追踪(可观测,可选) |
代码拆解:先骨架,再换成私厨零件
1. 配置:环境只有一处真相
config.py:
“私厨同样先保证 .env 通。若看图,把 OPENAI_MODEL 换成网关支持的视觉模型;文本工具链可仍用普通 Chat 模型——按你的供应商文档选。”
2. 工具:从 mock_search 到「搜食谱」
已有分包与模拟搜索:
tools/__init__.py 汇总:
“私厨把业务工具换成食谱检索即可,写法不变——注释写清何时调用:”
“天气/计算器可删可留;私厨最小集:search_recipes(+ 可选忌口查询)。扩展口诀仍是:新文件 → 写入 TOOLS。”
3. 记忆:保留工具中间消息
memory.py:
“注意 replace_all(result['messages']):Agent 跑完后整段轨迹(含 ToolMessage)写回记忆,追问「换个少油的」才接得上。这比只存最后一句回答靠谱。”
4. Agent + Assistant:整合心脏
agent.py:
“私厨只改三处:
-
SYSTEM→「你是私厨助手:先识别/确认食材,再必须调用 search_recipes,不要编造菜谱细节」 -
TOOLS→ 食谱工具列表 -
chat增加图文入口:用户丢图时,add_user改为追加带image_url的 HumanMessage(Messages 篇)
文本追问仍走字符串 HumanMessage——同一条记忆链。”
图文输入示意(拼在 Assistant 上,协议来自 Messages 篇):
5. main:Demo 与 CLI
main.py 的 --demo 节奏可直接复用:
“私厨 demo 换成:
LangSmith(导图第 3 步):按官网给项目配 LANGCHAIN_TRACING_V2 / API Key,在控制台点开本次 invoke,核对是否先看图、再调 search_recipes。可选,但排障极香。”
总结
老张说:”第八篇只办一件事——把前七篇零件装进一个可演示的私厨。”
“三个核心理解:
-
业务闭环 —— 看图认食材 → 工具搜食谱 → 记忆支持追问 -
工程骨架 —— config / llm / tools / memory / agent / main -
可观测可选 —— LangSmith 核对「是否真调了工具」”
LangChain 支线进度:
小明说:”私厨能演示了,但 visit_count、用户档案、跨会话偏好还没分清——那是 Runtime 的事。”
“对。下一篇:Runtime:State / Store / Context。”
入门实战不是堆新 API,而是用干净骨架把多模态、工具、记忆跑成一条用户故事。教你怎么拆文件,私厨教你为什么值得拆。
转载请注明来源:LangChain 实战|AI 私厨 Agent:拍照识别冰箱食材,自动生成食谱推荐







