# AI菜谱知识图谱生成器 ## 基于Kimi大模型的智能菜谱解析系统 ### 🌟 新功能特性 - **🤖 AI智能解析**: 使用Kimi大模型准确提取菜谱信息 - **📊 结构化输出**: 自动生成标准化的知识图谱数据 - **🔄 批量处理**: 支持大规模菜谱目录的批量转换 - **💾 多格式导出**: 支持Neo4j和CSV两种输出格式 - **🎯 高精度**: AI模型确保食材分类、步骤解析的准确性 - **📁 智能目录识别**: 自动扫描dishes/目录,根据子目录名推断分类 - **⚡ 优化处理**: 减少AI分类工作,提高处理效率和准确性 ### 🚀 快速开始 #### 1. 安装依赖 ```bash pip install -r requirements.txt ``` #### 2. 配置API密钥 方法一:设置环境变量 ```bash export KIMI_API_KEY="your_api_key_here" ``` 方法二:编辑config.json ```json { "kimi": { "api_key": "your_api_key_here" } } ``` #### 3. 测试AI解析功能 ```bash python run_ai_agent.py test ``` #### 4. 批量处理菜谱 ```bash # 处理HowToCook项目(会自动扫描dishes/目录) python run_ai_agent.py /path/to/HowToCook-master # 处理其他菜谱目录 python run_ai_agent.py /path/to/your/recipes ``` ### 📁 项目结构 ``` cook-rag-example/ ├── recipe_ai_agent.py # AI解析核心引擎 ├── run_ai_agent.py # 简化运行脚本 ├── batch_manager.py # 批次管理工具 ├── amount_normalizer.py # 用量标准化工具 ├── config.json # 配置文件 ├── requirements.txt # 依赖列表 └── ai_output/ # AI输出目录 ├── nodes.csv # Neo4j节点数据 ├── relationships.csv # Neo4j关系数据 └── neo4j_import.cypher # Neo4j导入脚本 ``` ### 📁 智能目录处理 #### 自动分类识别 系统会智能识别HowToCook项目的目录结构: - **专门扫描**: 只处理 `dishes/` 目录下的菜谱文件 - **自动分类**: 根据子目录名自动推断菜谱分类 - **排除无关文件**: 自动跳过 `template/`、`.github/` 等目录 #### 目录分类映射 ``` vegetable_dish/ → 素菜 meat_dish/ → 荤菜 aquatic/ → 水产 breakfast/ → 早餐 staple/ → 主食 soup/ → 汤类 dessert/ → 甜品 drink/ → 饮料 condiment/ → 调料 semi-finished/ → 半成品 ``` #### 处理优化 - **减少AI工作量**: 分类信息直接从目录结构获取,无需AI推理 - **提高准确性**: 避免AI分类错误,确保分类一致性 - **加快处理速度**: 减少API调用复杂度和处理时间 ### 🤖 AI解析能力 #### 智能信息提取 AI系统能够从Markdown菜谱中准确提取: 1. **基本信息** - 菜谱名称 - 难度等级(1-5星) - 菜谱分类(素菜/荤菜/水产等) - 菜系归属(川菜/粤菜等) 2. **食材信息** - 食材名称和分类 - 用量和单位 - 主要食材识别 3. **烹饪步骤** - 步骤描述和顺序 - 使用的烹饪方法 - 需要的工具 - 时间估计 4. **额外信息** - 准备时间/烹饪时间 - 供应人数 - 营养信息(当可用时) - 相关标签 #### 示例:AI解析结果 输入菜谱: ```markdown # 红烧茄子的做法 预估烹饪难度:★★★★ ## 必备原料和工具 - 青茄子 - 大蒜 - 酱油 - 面粉 ``` AI解析输出: ```json { "name": "红烧茄子", "difficulty": 4, "category": "素菜", "ingredients": [ { "name": "青茄子", "category": "蔬菜", "is_main": true }, { "name": "大蒜", "category": "蔬菜", "is_main": false } ] } ``` ### 📊 知识图谱结构 #### Neo4j数据模型 **节点类型**: - `Recipe`: 菜谱 - `Ingredient`: 食材 - `CookingStep`: 烹饪步骤 **关系类型**: - `has_ingredient`: 菜谱包含食材 - `has_step`: 菜谱包含步骤 - `belongs_to_category`: 属于分类 - `has_difficulty`: 具有难度 #### 示例查询 ```cypher // 查找所有包含茄子的菜谱 MATCH (recipe:Concept)-[:has_ingredient]->(ing:Concept) WHERE ing.name CONTAINS "茄子" RETURN recipe.name, recipe.difficulty // 查找四星难度的素菜 MATCH (recipe:Concept)-[:belongs_to_category]->(cat:Concept) WHERE cat.name = "素菜" AND recipe.difficulty = 4 RETURN recipe.name // 推荐基于现有食材的菜谱 MATCH (recipe:Concept)-[:has_ingredient]->(ing:Concept) WHERE ing.name IN ["茄子", "大蒜", "酱油"] WITH recipe, count(ing) as matches WHERE matches >= 2 RETURN recipe.name, matches ORDER BY matches DESC ``` ### ⚙️ 配置选项 #### config.json详细配置 ```json { "deepseek": { "api_key": "your_api_key", "base_url": "https://api.deepseek.com", "model": "deepseek-chat", "max_retries": 3, "timeout": 30 }, "processing": { "batch_size": 10, "delay_between_requests": 1, "max_concurrent_requests": 5 }, "output": { "format": "neo4j", "directory": "./ai_output", "include_nutrition": true, "include_tags": true } } ``` ### �️ 辅助工具 #### 批次管理工具 (batch_manager.py) 用于管理分批处理的进度和数据: ```bash # 查看处理状态 python batch_manager.py status # 继续中断的处理 python batch_manager.py continue /path/to/recipes # 合并批次数据 python batch_manager.py merge # 清理进度文件 python batch_manager.py clean-progress # 清理批次数据 python batch_manager.py clean-batches # 显示批次详情 python batch_manager.py details ``` #### 用量标准化工具 (amount_normalizer.py) 提供食材用量的标准化处理: ```python from amount_normalizer import AmountNormalizer normalizer = AmountNormalizer() # 标准化用量 normalized, estimated = normalizer.normalize_amount("适量", "毫升") # 返回: ("适量", 10.0) # 获取可比较的数值 comparable = normalizer.get_comparable_value("一把", "") # 返回: 50.0 # 格式化显示 display = normalizer.format_for_display("2-3个", "") # 返回: "2-3个" ``` ### �🔧 高级用法 #### 1. 自定义分类映射 ```python # 在recipe_ai_agent.py中修改 category_mapping = { "素菜": "710000000", "荤菜": "720000000", "自定义分类": "999000000" } ``` #### 2. 扩展AI提示词 ```python # 修改extract_recipe_info方法中的prompt prompt = f""" 请分析菜谱并按以下格式提取信息: - 添加您的自定义要求 - 特殊的分类规则 - 额外的营养信息要求 """ ``` #### 3. 批量处理优化 ```python # 调整处理参数 builder = RecipeKnowledgeGraphBuilder(ai_agent) builder.batch_size = 20 # 增加批次大小 builder.delay = 0.5 # 减少请求间隔 ``` ### 📈 性能优化 #### API调用优化 1. **合理的请求频率**: 默认每秒1次请求,避免API限制 2. **错误重试机制**: 自动重试失败的请求 3. **批量处理**: 分批处理大量菜谱文件 #### 内存优化 1. **流式处理**: 逐个处理菜谱文件,避免内存溢出 2. **定期清理**: 处理完成后及时释放内存 3. **进度监控**: 实时显示处理进度 ### 🔍 故障排除 #### 常见问题 1. **API密钥错误** ``` 错误: API调用失败: 401 解决: 检查API密钥是否正确设置 ``` 2. **网络连接问题** ``` 错误: API调用超时 解决: 检查网络连接,或增加timeout设置 ``` 3. **JSON解析错误** ``` 错误: JSON解析错误 解决: AI响应格式异常,会自动使用备用解析方法 ``` 4. **菜谱格式问题** ``` 错误: 无法提取菜谱信息 解决: 检查Markdown格式是否符合要求 ``` #### 调试模式 ```bash # 启用详细日志 export DEBUG=true python run_ai_agent.py /path/to/recipes # 测试单个菜谱 python run_ai_agent.py test ``` ### 📋 使用场景 #### 1. 菜谱网站构建 - 自动分类和标签 - 智能推荐系统 - 营养分析 #### 2. 烹饪应用开发 - 食材识别 - 步骤指导 - 工具推荐 #### 3. 营养研究 - 食材营养分析 - 膳食搭配研究 - 健康饮食推荐 #### 4. 餐饮业务 - 菜单优化 - 成本分析 - 客户偏好分析 ### 🌐 扩展开发 #### 添加新的AI模型 ```python class CustomAIAgent(DeepSeekRecipeAgent): def __init__(self, api_key, model_name="custom-model"): super().__init__(api_key) self.model_name = model_name def call_custom_api(self, messages): # 实现您的自定义AI调用逻辑 pass ``` #### 支持新的输出格式 ```python def export_to_custom_format(self, output_dir): """导出为自定义格式""" # 实现您的导出逻辑 pass ``` ### 📊 数据质量保证 #### AI解析准确性 - **多轮验证**: AI提取后进行格式验证 - **备用解析**: AI失败时使用规则解析 - **人工审核**: 提供数据审核接口 #### 数据一致性 - **标准化分类**: 统一的食材和菜谱分类 - **关系验证**: 确保图谱关系的逻辑一致性 - **重复检测**: 自动识别和处理重复数据 --- **享受AI驱动的菜谱知识图谱构建体验!** 🎉 现在你可以安全地进行批量处理了!使用以下命令处理整个HowToCook项目: ```bash python run_ai_agent.py HowToCook-master ``` 系统会: 1. 🎯 专门扫描 `HowToCook-master/dishes/` 目录 2. 📁 根据子目录自动识别分类 (vegetable_dish→素菜, meat_dish→荤菜等) 3. 🚫 自动排除template、.github等非菜谱目录 4. 🤖 用AI智能解析每个菜谱的详细信息 5. 📊 生成完整的知识图谱数据