OpenClaw美食助手:Qwen2.5-VL-7B根据冰箱照片推荐菜谱
OpenClaw美食助手:Qwen2.5-VL-7B根据冰箱照片推荐菜谱
1. 为什么需要AI美食助手
每次打开冰箱看着满满当当的食材却不知道做什么菜,这种困扰我持续了整整三年。直到上个月在星图平台发现Qwen2.5-VL-7B这个多模态模型,突然意识到OpenClaw+视觉大模型的组合或许能解决这个世纪难题。
传统菜谱App的痛点很明确——需要手动输入已有食材,而实际场景中我们更习惯用手机随手拍下冰箱内容。Qwen2.5-VL-7B的视觉理解能力可以直接分析照片中的食材,配合OpenClaw的自动化流程,实现了从"拍照"到"菜谱"的无缝衔接。这个方案最吸引我的是整个过程完全在本地完成,不用担心食材照片上传到云端的安全隐患。
2. 环境准备与模型部署
2.1 基础组件安装
我的实验环境是一台MacBook Pro(M1芯片,16GB内存),首先通过Homebrew安装OpenClaw:
brew install node@22
npm install -g openclaw@latest
openclaw --version
Qwen2.5-VL-7B的部署选择了星图平台的GPTQ量化镜像,主要考虑是:
- 7B模型在消费级显卡上可流畅运行
- GPTQ量化后显存占用控制在8GB以内
- 自带chainlit前端方便调试
在平台控制台完成镜像部署后,记下API访问地址(如http://192.168.1.100:8000/v1),这个地址后续需要配置到OpenClaw中。
2.2 OpenClaw对接视觉模型
修改OpenClaw配置文件~/.openclaw/openclaw.json,增加模型提供商配置:
{
"models": {
"providers": {
"qwen-vl": {
"baseUrl": "http://192.168.1.100:8000/v1",
"apiKey": "your-api-key",
"api": "openai-completions",
"models": [
{
"id": "qwen2.5-vl-7b",
"name": "Qwen-Vision",
"contextWindow": 32768,
"maxTokens": 4096
}
]
}
}
}
}
配置完成后执行命令验证连接:
openclaw gateway restart
openclaw models list
3. 构建食材识别工作流
3.1 拍照与上传机制
在OpenClaw的Web控制台,我创建了一个专用工作区food-helper,主要包含两个自动化脚本:
- 图片接收脚本(
upload.py):
from openclaw.sdk import workspace
import base64
def handle_image(file_path):
with open(file_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode('utf-8')
workspace.store("current_fridge", image_data)
- 模型调用脚本(
analyze.py):
from openclaw.sdk import models, workspace
def analyze_fridge():
image_data = workspace.get("current_fridge")
prompt = """请分析这张冰箱照片,列出所有可见的完整食材(排除调味品和已开封的包装食品),
用JSON格式返回,字段包括:name(食材名称)、quantity(估算数量)、freshness(新鲜程度1-5)"""
response = models.generate(
model="qwen2.5-vl-7b",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": f"data:image/jpeg;base64,{image_data}"}
]
}]
)
return response.choices[0].message.content
3.2 实际测试中的调优
第一次测试时就遇到了典型问题——模型把酱油瓶识别成了"深色液体食材"。通过调整prompt增加了"排除调味品"的明确指令后,识别准确率显著提升。另一个发现是,明确要求返回JSON格式比自然语言描述更利于后续处理。
经过20次不同冰箱场景的测试,最终确定的优化prompt包含:
- 食材完整性要求(排除开封包装)
- 数量估算标准(如"1个胡萝卜"而非"一些胡萝卜")
- 新鲜度评估标准
- 严格的JSON输出格式
4. 菜谱推荐系统实现
4.1 从食材到菜谱的转换
获得食材清单后,第二阶段是生成可行的菜谱方案。这里我设计了两步走策略:
- 食材预处理:将模型返回的JSON数据转换为自然语言描述
- 菜谱生成:结合用户偏好生成3个候选方案
关键实现代码:
def generate_recipes(ingredients_json):
# 转换食材数据
ingredients = json.loads(ingredients_json)
ingredient_desc = "、".join([f"{i['name']}{i['quantity']}" for i in ingredients])
# 生成候选菜谱
prompt = f"""根据以下食材:{ingredient_desc},请推荐3道家常菜。
每道菜需要包含:
1. 菜名
2. 所需食材及用量(必须在给定食材范围内)
3. 简要烹饪步骤
4. 预估准备时间
返回格式为Markdown表格"""
response = models.generate(
model="qwen2.5-vl-7b",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
4.2 个性化偏好设置
通过~/.openclaw/workspace/prefs.json文件存储用户偏好:
{
"cuisine_preference": ["中式", "日式"],
"cooking_time_max": 40,
"avoid_ingredients": ["香菜"],
"skill_level": "中级"
}
在生成prompt时会自动注入这些参数,例如:
用户偏好:中式或日式料理,烹饪时间不超过40分钟,避免使用香菜,烹饪技能为中级水平
5. 完整工作流体验
实际使用时的操作流程非常简单:
- 用手机拍摄冰箱内部照片
- 通过OpenClaw网页端上传图片
- 等待约30秒获取分析结果
- 查看系统推荐的3个菜谱方案
- 点击选择后生成详细的步骤图
最令我惊喜的是模型生成的步骤图——Qwen2.5-VL不仅能描述步骤,还能生成对应的示意图。比如选择"番茄炒蛋"后,得到的反馈包含:
- 食材预处理示意图(番茄切块大小、鸡蛋打散程度)
- 火候控制示意图(中火炒蛋、大火收汁)
- 装盘建议图
6. 实践中的经验与教训
这个项目最大的收获是认识到多模态模型在实际应用中的潜力。但过程中也踩了不少坑:
- 光照条件影响识别:最初在夜间拍摄的照片识别准确率明显下降,后来增加了"请在光线充足环境下拍摄"的提示
- 模型响应时间控制:复杂prompt可能导致响应超时,最终设置了15秒的硬性超时限制
- 本地资源占用:长时间运行后内存占用会累积,现在每天定时重启OpenClaw服务
一个意外发现是,这个系统还能帮助减少食物浪费。通过记录每次识别的食材和最终选择的菜谱,一个月后就能看到哪些食材经常被剩下,从而调整采购策略。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐




所有评论(0)