1. 项目介绍
智能菜谱系统是一个基于人工智能的交互式烹饪助手应用,旨在帮助用户发现美食、学习烹饪技巧并享受健康生活。该系统集成了本地大语言模型(LLM)技术,提供个性化的菜谱推荐、详细烹饪指导、营养分析以及智能化的烹饪辅助功能。

1.1 主要功能特点
- 智能菜谱搜索:支持按关键词、菜系和标签进行灵活搜索
- 个性化推荐:根据用户口味偏好、过敏食材、烹饪技能等提供定制化菜谱推荐
- 详细菜谱信息:提供完整的食材、调料列表、烹饪步骤、难度和时间估算
- AI 生成内容:利用大模型动态生成烹饪步骤、营养分析、烹饪小贴士等
- 分量调整:根据用户需求智能调整菜谱分量
- 食材推荐:根据用户现有食材推荐可用菜谱
- 烹饪问答:提供专业的烹饪问题解答
- 用户系统:支持用户资料管理、菜谱收藏和烹饪历史记录
1.2 项目价值
该系统不仅为用户提供了丰富的菜谱资源,还通过人工智能技术增强了用户体验,使得烹饪过程更加智能化和个性化。对于烹饪新手,系统提供了详细的指导和提示;对于有经验的厨师,系统则提供了更多创新思路和食材利用建议。
2. 环境介绍
2.1 依赖包配置
项目使用以下主要依赖包,通过requirements.txt管理:
-
gradio>=4.0.0 # Web界面框架 torch>=2.1.0 # 深度学习框架 torch_npu>=2.1.0 # 昇腾NPU支持 transformers>=4.41.0 # 模型加载与推理 accelerate>=0.28.0 # 模型加速 sentencepiece>=0.1.98 # 文本分词 einops>=0.8.0 # 张量操作工具 matplotlib # 数据可视化
2.2 硬件配置
- 处理器:建议至少4核CPU
- 内存:推荐16GB以上,用于加载大模型
- 存储:至少20GB可用空间,用于存储模型文件
- 加速器:支持昇腾NPU,用于加速模型推理
2.3 模型配置
系统使用了上海昇思的Qwen2-7B-Instruct模型,通过openmind_hub进行下载和管理:
-
MODEL_NAME = "Shanghai_Ascend/Qwen2-7B-Instruct" model_path = snapshot_download(MODEL_NAME, resume_download=True)
模型部署在NPU上进行推理加速,使用以下配置:
-
model = AutoModelForCausalLM.from_pretrained( model_path, trust_remote_code=True ).to("npu").eval()
2.4 部署配置
系统通过Gradio提供Web界面服务,部署配置如下:
-
demo.launch( server_name="0.0.0.0", # 允许所有IP访问 server_port=7861, # 服务端口 share=False, # 不创建公共链接 debug=False # 关闭调试模式 )
3. 代码分析
3.1 核心代码
3.1.1 模型初始化与配置
系统首先导入所需的库,并初始化语言模型和分词器:
-
import gradio as gr import torch from openmind import AutoModelForCausalLM, AutoTokenizer from openmind_hub import snapshot_download # 加载本地模型 MODEL_NAME = "Shanghai_Ascend/Qwen2-7B-Instruct" model_path = snapshot_download(MODEL_NAME, resume_download=True) tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_path, trust_remote_code=True ).to("npu").eval()
3.1.2 AI 回复生成函数
该函数是系统的核心,负责与模型交互并生成回复:
-
def generate_response(prompt, max_new_tokens=768): inputs = tokenizer(prompt, return_tensors="pt").to("npu") outputs = model.generate( **inputs, max_new_tokens=max_new_tokens, do_sample=True, temperature=0.7, top_p=0.9, repetition_penalty=1.1, pad_token_id=tokenizer.eos_token_id ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) # 移除可能的重复提示文本 clean_response = response.replace(prompt, "").strip() return clean_response
该函数使用了以下参数来控制生成文本的质量:
- max_new_tokens:控制生成文本的最大长度
- temperature:控制生成文本的随机性,0.7表示中等随机性
- top_p:控制采样空间的大小,0.9表示考虑90%的概率质量
- repetition_penalty:防止生成重复内容
3.1.3 菜谱搜索与获取
系统提供了灵活的菜谱搜索功能,并通过AI生成补充数据:
-
def fetch_recipes_from_internet(keyword, cuisine, max_results=5): # 构建优化的提示词 prompt = f"""请生成{max_results}个关于'{keyword}'的{cuisine_text}菜谱,必须严格满足以下要求: # 提示词内容... """ # 使用模型生成菜谱数据 max_tokens = get_max_tokens("recipe_search") response = generate_response(prompt, max_new_tokens=max_tokens) # 解析JSON响应并过滤结果 # ... return filtered_recipes
该函数的设计考虑了容错性,当JSON解析失败时会尝试使用后备方案生成菜谱。
3.1.4 Gradio 界面构建
系统使用Gradio构建了丰富的交互式界面,包括多个标签页:
-
with gr.Blocks( theme=gr.themes.Soft( primary_hue="orange", secondary_hue="blue", neutral_hue="slate" ), title="�� 智能菜谱系统", css=""" # CSS样式定义... """ ) as demo: # 界面组件定义和布局 # ... # 回调函数绑定 # ...
界面设计注重用户体验,使用了现代的UI设计元素和响应式布局。
3.2 关键算法
3.2.1 菜谱推荐算法
系统结合了规则匹配和AI生成来提供个性化推荐:
-
def recommend_by_ingredients(ingredients_input): # 分割用户输入的食材列表 user_ingredients = [ing.strip() for ing in ingredients_input.split("、")] # 计算匹配度 matches = [] for recipe in recipe_database: recipe_ingredients = [ing["name"] for ing in recipe["ingredients"]] # 计算匹配度(用户拥有的食材在菜谱中的比例) matched_count = sum(1 for ing in user_ingredients if any(ing in recipe_ing for recipe_ing in recipe_ingredients)) match_ratio = matched_count / len(recipe_ingredients) if recipe_ingredients else 0 # 记录匹配结果和缺失食材 if match_ratio > 0: missing_ingredients = [ing["name"] for ing in recipe["ingredients"] if not any(user_ing in ing["name"] for user_ing in user_ingredients)] matches.append((recipe, match_ratio, missing_ingredients)) # 按匹配度排序并生成推荐 # ...
该算法通过计算用户拥有的食材与菜谱所需食材的匹配比例,找出最匹配的菜谱,并提供还需要准备的食材列表。
3.2.2 提示词工程策略
系统精心设计了提示词,以确保AI生成的内容质量高且符合要求:
-
def generate_cooking_tips(recipe): # 构建详细的提示词 prompt = f"""请为以下菜品提供烹饪小贴士,考虑用户的烹饪技能水平({user_profile['cooking_skill']}): 菜品名称:{recipe['name']} 烹饪步骤: {steps_text} 请提供以下内容: 1. 烹饪过程中的关键点和注意事项 2. 常见失误及避免方法 3. 根据用户烹饪技能水平的个性化建议 4. 食材替换或升级建议(如果适用) 5. 保存和食用建议 请使用简洁、实用的语言,使用适当的表情符号增强可读性。""" return generate_response(prompt, max_new_tokens=max_tokens)
提示词策略包括:
- 明确的任务指令
- 结构化的输出要求
- 包含必要的上下文信息(如用户技能水平)
- 格式和风格要求
4.项目总结
智能菜谱系统成功地将大语言模型技术应用于烹饪领域,提供了丰富的功能和良好的用户体验。系统的主要优势包括:
- 智能化程度高:利用先进的大语言模型生成内容,提供个性化服务
- 功能丰富:涵盖了从菜谱搜索到烹饪辅助的完整场景
- 用户体验良好:直观的界面设计和流畅的交互体验
- 可扩展性强:模块化设计便于后续功能扩展
通过不断的技术创新和功能扩展,智能菜谱系统有望成为用户烹饪生活中不可或缺的智能助手,为人们的饮食健康和生活品质提升做出更大贡献。

被折叠的 条评论
为什么被折叠?



