AI味觉管家:基于Qwen2-7B的智能菜谱系统

1. 项目介绍

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

1.1 主要功能特点

  1. 智能菜谱搜索:支持按关键词、菜系和标签进行灵活搜索
  2. 个性化推荐:根据用户口味偏好、过敏食材、烹饪技能等提供定制化菜谱推荐
  3. 详细菜谱信息:提供完整的食材、调料列表、烹饪步骤、难度和时间估算
  4. AI 生成内容:利用大模型动态生成烹饪步骤、营养分析、烹饪小贴士等
  5. 分量调整:根据用户需求智能调整菜谱分量
  6. 食材推荐:根据用户现有食材推荐可用菜谱
  7. 烹饪问答:提供专业的烹饪问题解答
  8. 用户系统:支持用户资料管理、菜谱收藏和烹饪历史记录

1.2 项目价值

该系统不仅为用户提供了丰富的菜谱资源,还通过人工智能技术增强了用户体验,使得烹饪过程更加智能化和个性化。对于烹饪新手,系统提供了详细的指导和提示;对于有经验的厨师,系统则提供了更多创新思路和食材利用建议。

2. 环境介绍

2.1 依赖包配置

项目使用以下主要依赖包,通过requirements.txt管理:

  1. 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 硬件配置

  1. 处理器:建议至少4核CPU
  2. 内存:推荐16GB以上,用于加载大模型
  3. 存储:至少20GB可用空间,用于存储模型文件
  4. 加速器:支持昇腾NPU,用于加速模型推理

2.3 模型配置

系统使用了上海昇思的Qwen2-7B-Instruct模型,通过openmind_hub进行下载和管理:

  1. MODEL_NAME = "Shanghai_Ascend/Qwen2-7B-Instruct"
    model_path = snapshot_download(MODEL_NAME, resume_download=True)

模型部署在NPU上进行推理加速,使用以下配置:

  1. model = AutoModelForCausalLM.from_pretrained(
        model_path, trust_remote_code=True
    ).to("npu").eval()

2.4 部署配置

系统通过Gradio提供Web界面服务,部署配置如下:

  1. demo.launch(
        server_name="0.0.0.0",  # 允许所有IP访问
        server_port=7861,       # 服务端口
        share=False,           # 不创建公共链接
        debug=False            # 关闭调试模式
    )

3. 代码分析

3.1 核心代码

3.1.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 回复生成函数

该函数是系统的核心,负责与模型交互并生成回复:

  1. 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

该函数使用了以下参数来控制生成文本的质量:

  1. max_new_tokens:控制生成文本的最大长度
  2. temperature:控制生成文本的随机性,0.7表示中等随机性
  3. top_p:控制采样空间的大小,0.9表示考虑90%的概率质量
  4. repetition_penalty:防止生成重复内容
3.1.3 菜谱搜索与获取

系统提供了灵活的菜谱搜索功能,并通过AI生成补充数据:

  1. 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构建了丰富的交互式界面,包括多个标签页:

  1. 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生成来提供个性化推荐:

  1. 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生成的内容质量高且符合要求:

  1. 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)

提示词策略包括:

  1. 明确的任务指令
  2. 结构化的输出要求
  3. 包含必要的上下文信息(如用户技能水平)
  4. 格式和风格要求

4.项目总结

智能菜谱系统成功地将大语言模型技术应用于烹饪领域,提供了丰富的功能和良好的用户体验。系统的主要优势包括:

  1. 智能化程度高:利用先进的大语言模型生成内容,提供个性化服务
  2. 功能丰富:涵盖了从菜谱搜索到烹饪辅助的完整场景
  3. 用户体验良好:直观的界面设计和流畅的交互体验
  4. 可扩展性强:模块化设计便于后续功能扩展

通过不断的技术创新和功能扩展,智能菜谱系统有望成为用户烹饪生活中不可或缺的智能助手,为人们的饮食健康和生活品质提升做出更大贡献。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值