山西过油肉菜谱全解析:从传统晋菜做法到「尝尝咸淡」RAG 系统的结构化实战
2026/9/23 12:57:08 网站建设 项目流程

山西过油肉菜谱全解析:从传统晋菜做法到「尝尝咸淡」RAG 系统的结构化实战

【免费下载链接】all-in-rag🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/项目地址: https://gitcode.com/datawhalechina/all-in-rag

过油肉是山西传统名菜,历经多年传承,几乎家家都会做。本文以仓库中 data/C8/cook/dishes/meat_dish/山西过油肉.md 这份结构化菜谱为样本,一方面完整还原这道经典晋菜的原料配比、操作步骤与烹饪技巧,另一方面借助 all-in-rag 项目第 8 章「尝尝咸淡」食谱问答系统的源码实现,剖析这份 Markdown 菜谱从入库、元数据增强、按标题分块,到混合检索与 LLM 生成回答的完整 RAG 链路,帮助读者同时掌握一道家常硬菜的做法与一套可落地的菜谱 RAG 数据工程方法。

一、菜品概览与难度评估

山西过油肉是典型的晋菜代表,主料为猪里脊,辅以蒜苔、木耳、葱头,通过「过油滑肉 + 快炒」的技法成菜,讲究肉片滑嫩、咸鲜微醋香。

原菜谱对烹饪难度给出了明确的星级评估:

预估烹饪难度:★★★★

这个星级标记在「尝尝咸淡」RAG 系统中并非摆设。参考 data_preparation.py 中的_enhance_metadata实现,系统会使用正则r'★+'匹配文档中的连续星号数量,并映射为五档难度标签:

difficulty_map = {5: '非常困难', 4: '困难', 3: '中等', 2: '简单', 1: '非常简单'} doc.metadata['difficulty'] = difficulty_map.get(star_count, '未知')

因此,★★★★会被自动解析为「困难」级别,并作为结构化元数据写入该菜谱的索引,供后续按难度过滤与查询路由使用。这与 docs/chapter8/02_data_preparation.md 中「从内容中的星级标记自动提取难度等级」的设计完全对应——菜谱只要保持统一的星级书写规范,系统就能零标注地完成难度画像。

二、必备原料与工具清单

制作山西过油肉所需的原料与工具如下:

类别原料/工具
主料猪里脊、鸡蛋
配菜蒜苔、木耳、葱头
调料盐、酱油(生抽)、料酒、陈醋、花椒粉、鸡精
辅料葱姜蒜、淀粉(建议红薯淀粉)、食用油

其中木耳需提前泡发,蒜苔提供清甜口感,陈醋是点睛之笔——起锅前淋醋是这道菜「咸鲜中带微酸」风味的关键。工具方面一口炒锅即可,无需特殊设备。

从 RAG 数据工程视角看,这张清单对应菜谱文档中的## 必备原料和工具小节。在 data_preparation.py 的_markdown_header_split中,系统配置了三级标题分割器:

headers_to_split_on = [ ("#", "主标题"), # 菜品名称 ("##", "二级标题"), # 必备原料、计算、操作等 ("###", "三级标题") # 简易版本、复杂版本等 ]

也就是说,这份菜谱会被自动切分成「菜名+简介」「必备原料和工具」「计算」「操作」「附加内容」等多个独立子块。当用户问「山西过油肉需要什么食材」时,检索系统能精确命中「必备原料和工具」这一子块,这正是 docs/chapter8/01_env_architecture.md 中强调的「小块检索」优势。

三、用量计算:一人份的精确配比

原菜谱基于作者本人饭量给出了一人份用量,单位明确、便于按比例缩放:

原料用量
猪里脊150 g
蒜苔6 根
食用油300 ml(其中约 10 ml 用于炒菜)
葱姜蒜50 g
生抽20 ml
食盐10 g
鸡蛋1 个
淀粉10 g
木耳20 g
葱头100 g
其他调料(料酒、陈醋、花椒粉、鸡精)20 g

几个值得注意的配比要点:

  • 油量偏大是这道菜的底色:300 ml 食用油主要用于滑肉(过油),并非全部下锅食用,炸完后需倒出余油,仅留约 10 ml 炒菜。
  • 蛋液 + 淀粉双重上浆:一个鸡蛋搭配 10 g 红薯淀粉,保证里脊肉片在高温过油时形成保护层,锁住水分,口感滑嫩。
  • 盐与生抽分工明确:生抽在腌制时加入入底味,食盐在出锅前调味,两者互补避免过咸。

在 RAG 系统中,这个## 计算小节是「用量配比」类查询的高频命中区。用户提问「山西过油肉一人份要多少肉」,系统通过向量检索 + BM25 关键词检索即可定位到该子块,再经父子文档映射取回完整菜谱交给 LLM 生成答案。

四、操作步骤详解

4.1 准备工作

  1. 泡发木耳:木耳提前泡发好,如果着急可以用热水泡发,以缩短等待时间。
  2. 腌制肉片:猪里脊切片放入碗中,加入 20 ml 生抽、料酒、花椒粉,打入一个鸡蛋,搅拌均匀后加入淀粉(建议红薯淀粉)拌匀,最后倒入 300 ml 食用油封浆,腌制 15 分钟。食用油封浆的作用是隔绝空气、锁住水分,同时让肉片下锅时更易打散。
  3. 切配辅料:蒜苔切段约 3 cm,葱头切菱形块备用。菱形块受热均匀、成熟度一致,也利于摆盘美观。

4.2 过油与快炒

  1. 滑肉:起锅烧油,油量要多,油温五成热(约 150 ℃,筷子插入周围泛起细密小泡)下入腌制好的肉片,迅速将肉片打散,待表面微焦后捞出控油备用。五成热油温下肉片既不会脱浆,又能快速定型。
  2. 爆香:将锅中多余油倒出,留 10 ml 油,油温七成热(约 180 ℃,微微冒烟)下入葱姜蒜爆香。
  3. 炒配菜:先下蒜苔炒至断生,再下木耳、葱头,加入生抽、花椒粉,翻炒几下。
  4. 合炒调味:将之前炸好的肉片下入翻炒,加 10 g 盐,起锅前加 10 ml 醋和鸡精,翻炒均匀后起锅装盘。

4.3 附加技巧(原文档要点)

  • 火候控制:炸肉片时表面微焦即可出锅,过度油炸会导致肉质变老、失去滑嫩口感。
  • 薄芡提口感:起锅前也可以打一个薄薄的水淀粉(水淀粉勾芡),让汤汁略微挂在肉片和配菜上,口感更佳。

五、纵深视角:这份菜谱在「尝尝咸淡」RAG 系统中的完整流转

5.1 元数据增强:文件路径即分类依据

这份菜谱位于data/C8/cook/dishes/meat_dish/目录下,文件名即菜品名。系统在加载时通过 data_preparation.py 的_enhance_metadata完成三项自动标注:

  • 菜品分类:匹配路径中的meat_dish目录,标注为「荤菜」;
  • 菜品名称:取文件主干名山西过油肉
  • 难度等级:按前文所述正则解析★★★★为「困难」。

最终该菜谱的元数据可概括为{dish_name: 山西过油肉, category: 荤菜, difficulty: 困难},这些字段被复制到其下所有子块中,成为检索过滤与回答路由的关键依据。

5.2 结构分块与父子映射

按标题分割后,本菜谱形成类似如下的子块结构:

山西过油肉的做法.md(父文档) ├── 子块1:# 山西过油肉的做法 + 简介 + 预估难度 ├── 子块2:## 必备原料和工具(原料清单) ├── 子块3:## 计算(用量配比表) ├── 子块4:## 操作(详细制作步骤) └── 子块5:## 附加内容(火候与勾芡技巧)

每个子块都会继承父文档的parent_id并生成独立的chunk_id,映射关系记录在parent_child_map中。这正是 docs/chapter8/02_data_preparation.md 所讲的「小块检索,大块生成」:用户问「过油肉怎么做」时,检索阶段命中「操作」子块实现精确召回;生成阶段则通过get_parent_documents按命中次数排序并去重,取回完整的山西过油肉菜谱交给 LLM,保证回答上下文完整。

5.3 查询流转与回答生成

用户输入「山西过油肉怎么做」后,main.py 中的主流程会依次执行:

  1. 查询路由:LLM 将问题分类为detail(详细查询),走分步指导模式;
  2. 查询重写:因问题包含具体菜名,按规则保持原查询不变;
  3. 混合检索:向量检索(BGE 嵌入模型)与 BM25 关键词检索并行,再经 retrieval_optimization.py 的 RRF 重排融合,取 top_k 子块;
  4. 父子还原:命中子块回溯父文档,按相关性排序去重;
  5. 分步生成:调用 generation_integration.py 中的烹饪导师提示词,产出包含「菜品介绍 / 所需食材 / 制作步骤 / 制作技巧」的结构化回答——其「制作技巧」小节会优先采用本菜谱「附加内容」中的火候与勾芡建议。

5.4 配置说明与运行前提

本菜谱作为知识库数据的一份子,参与系统构建时无需任何额外标注。相关运行配置见 config.py,其中data_path默认指向../../data/C8/cook,即本菜谱所在目录的父级;嵌入模型默认使用BAAI/bge-small-zh-v1.5,LLM 默认使用 Moonshot(Kimi)系列模型,需要预先配置MOONSHOT_API_KEY环境变量。按 docs/chapter8/01_env_architecture.md 的说明,在code/C8目录执行pip install -r requirements.txt安装依赖后运行python main.py,即可启动交互式问答,向系统提问「山西过油肉怎么做」或「推荐一道困难级别的荤菜」。

小结

山西过油肉这道菜本身浓缩了传统晋菜「过油滑肉、旺火快炒、陈醋收尾」的技法精髓;而它在 all-in-rag 项目中的意义远不止一份菜谱——它同时是「尝尝咸淡」RAG 系统数据管道的一个典型样本:路径提供分类、星级提供难度、标题结构提供分块边界、附加内容提供生成阶段的技巧素材。掌握这份菜谱的做法,也就顺带理解了结构化菜谱数据如何零标注地流入 RAG 索引并产出高质量问答,这正是本项目第 8 章实战的核心价值所在。

【免费下载链接】all-in-rag🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/项目地址: https://gitcode.com/datawhalechina/all-in-rag

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询