- 教程
- 人工智能
- 大模型
- RAG
【免费下载链接】all-in-rag
🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/
锅包肉是哈尔滨道台府厨师郑兴文在光绪年间创制的东北名菜,老式锅包肉以白醋调出标志性醋香,口味酸甜、外壳酥脆。本文以仓库中的 老式锅包肉食谱 为核心,逐项拆解原料配比、挂浆工艺与复炸油温控制等全部操作细节,并在此基础上结合 all-in-rag 项目第八章的"尝尝咸淡"食谱 RAG 系统源码,说明这份结构化食谱如何被加载、分块、检索与生成回答,帮助读者既学会做菜,也理解一份优质食谱数据在 RAG 全链路中的实际流转方式。
一、菜品溯源与风味特征
锅包肉原名"锅爆肉",由光绪年间哈尔滨道台府主厨郑兴文所创,后流传至东北各地,成为最具代表性的东北菜之一。"老式"与"新式"的核心区别在于调味:老式锅包肉的酸味完全来源于白醋汁,色泽偏白或浅黄,口味酸甜酥脆;新式版本则多以番茄酱调色调味,色泽红亮、酸甜味更柔和。
原食谱对这道菜给出了明确的难度预估:
预估烹饪难度:★★★★
对应仓库数据准备模块中的难度映射(data_preparation.py),四颗星会被解析为"困难"等级,作为检索与推荐时的元数据过滤条件。
二、必备原料与工具
根据原食谱,制作老式锅包肉需要以下原料与工具:
- 猪通脊肉
- 大葱
- 姜
- 蒜
- 胡萝卜(可无)
- 香菜
- 白醋(建议使用 9 度的醋,才会有较为突出的老式锅包肉特有的醋香)
- 白糖
- 料酒
- 盐
- 味精
- 土豆淀粉
- 中筋面粉
- 小苏打
- 白熟芝麻(可无)
- 食用油
其中两点值得特别说明:
- 白醋度数:原食谱明确建议使用 9 度的白醋。醋的度数即醋酸含量,度数越高酸味越冲、挥发越快,9 度白醋能在高温烹炒时迅速激发出醋香,同时不至于让菜品过酸,这是老式锅包肉"醋香突出"的关键。
- 小苏打:用于肉片嫩化。小苏打(碳酸氢钠)呈弱碱性,能破坏肉中蛋白质的部分结构,使纤维松弛,从而让炸出的肉片口感更嫩。
- 土豆淀粉与中筋面粉:挂浆的骨架。土豆淀粉黏性大、炸后酥脆不易回软;中筋面粉用于调节浆糊的挂附性与炸制后的口感层次,两者按 3:1 左右的比例混合。
三、用料配比计算(每份约 2 人份)
原食谱给出了完整的量化配比,按每份(约 2 人份)计算如下:
| 类别 | 原料 | 用量 |
|---|---|---|
| 主料 | 猪通脊肉 | 300g |
| 配菜 | 大葱 | 50g |
| 配菜 | 姜 | 30g |
| 配菜 | 蒜 | 3-4 瓣 |
| 配菜 | 胡萝卜 | 10g(可无) |
| 配菜 | 香菜 | 10g |
| 点缀 | 白熟芝麻 | 5g(可无) |
| 调味 | 白醋 | 40g |
| 调味 | 白糖 | 40g |
| 调味 | 料酒 | 20ml |
| 调味 | 盐 | 8g |
| 调味 | 味精 | 5g |
| 调味 | 米醋 | 5ml(可无) |
| 挂浆 | 土豆淀粉 | 210g |
| 挂浆 | 中筋面粉 | 70g |
| 挂浆 | 小苏打 | 5g |
| 炸制 | 食用油 | 1000ml(用于炸制) |
配比要点:
- 糖醋汁 1:1:白糖 40g 与白醋 40g 等量,这是老式锅包肉"酸甜平衡"的基础。米醋 5ml 可选,用于增加酸味的层次感。
- 盐分三段使用:8g 盐中,4g 用于腌制肉片,4g 调入糖醋汁,保证肉片有底味、汁水咸甜平衡。
- 小苏打两处用途:5g 小苏打中约 4g 用于肉片嫩化(见下文操作),1g 加入浆糊,利用其发泡特性让外壳更蓬松酥脆。
四、制作工序详解
原食谱将完整工序拆分为 9 个步骤,核心可以归纳为"嫩化—腌制—挂浆—调汁—三次复炸—快速翻炒"六道关口。
4.1 处理猪肉
- 将猪通脊肉切成厚度8mm的均匀肉片,去除白色筋膜。8mm 是兼顾"外酥里嫩"的关键厚度:过薄则炸后干柴、过厚则不易熟透且外壳与内芯口感割裂。
- 用清水冲洗肉片,去除血水。
- 加入小苏打 5g(实际约 4g),抓匀,静置 5 分钟。
- 用清水冲洗 1-2 次,去除多余小苏打。这一步不能省略:残留的小苏打会带来碱味,破坏成品的酸甜口感。
4.2 腌制肉片
在肉片中加入盐 4g、料酒 5ml,拌匀,腌制 15 分钟。料酒去腥,盐给肉片建立基础底味;腌制时间不宜过短,否则入味不足。
4.3 准备挂浆(两种方法)
原食谱提供了两种挂浆方案:
方法一(传统淀粉沉淀法):
- 将土豆淀粉 100g 加入 200ml 清水,搅匀,静置 20 分钟。
- 倒出上层 2/3 的清水,保留底部淀粉浆,搅匀至酸奶状。
这是传统做法中"水淀粉沉淀"的经典操作,利用静置分层获得浓度合适的湿淀粉浆。
方法二(推荐,混合粉法):
- 将土豆淀粉 210g 和中筋面粉 70g 混合(比例约 3:1)。
- 少量多次加入清水,搅拌至酸奶状:提起可拉丝,浆糊能在盆中堆积,不稀不稠。
- 加入食用油 10ml、小苏打 1g,搅拌均匀。加食用油能让外壳更酥脆,加小苏打能增加外壳的蓬松感。
方法二的优势在于无需静置等待,且通过面粉调节浆糊稠度,更稳定、可复现。
4.4 挂浆
将腌制好的肉片放入浆糊中,拌匀,使每片肉均匀裹上浆。挂浆要点是"薄而匀":浆太厚炸出来外壳过硬、口感发艮;太薄则外壳不酥、肉汁流失。
4.5 调制糖醋汁
混合白糖 40g、白醋 40g、盐 4g、味精 5g、米醋 5ml(可无),搅拌均匀,备用。糖醋汁必须提前调好,因为后续炒制环节时间极短,现调会手忙脚乱、导致糖未化开。
4.6 准备配菜
大葱、姜、胡萝卜切丝,香菜切段,蒜切片。配料全部切丝,既便于快速翻炒时均匀裹汁,也符合老式锅包肉"丝配片"的摆盘传统。
4.7 三次复炸(油温控制是灵魂)
炸制是决定锅包肉成败的核心工序,原食谱给出了明确的油温与时间参数:
| 次数 | 油温 | 时长 | 目的 |
|---|---|---|---|
| 第一次 | 150℃(五成热) | 约 30 秒 | 定型,表面浅黄 |
| 第二次 | 170℃(六成热) | 约 1 分钟 | 炸熟,外壳金黄酥脆 |
| 第三次(可选) | 200℃(七成热) | 10-20 秒 | 逼出余油,增强酥脆度 |
操作细节:
- 第一次炸制:油温 150℃,将肉片逐片下锅(一次性全部下锅会导致油温骤降、肉片粘连),炸至表面定型、颜色浅黄,捞出备用。
- 第二次炸制:油温升至 170℃,将所有肉片复炸,至外壳金黄酥脆,约 1 分钟。
- 第三次炸制(可选):油温升至 200℃,快速复炸 10-20 秒后捞出沥油。高温短炸能逼出外壳中多余的油,让酥脆度再上一个台阶,是"酥脆不回软"的进阶技巧。
没有温度计的情况下,可凭经验判断油温:插入筷子后周围迅速冒密集小泡约为五成热(150℃ 上下)。
4.8 炒制
- 锅中留 20ml 底油,加热后放入姜丝、蒜片,煸香 10 秒。
- 倒入调好的糖醋汁,大火加热至沸腾,熬至汤汁粘稠,约 30-60 秒。
- 放入炸好的肉片、葱丝、胡萝卜丝、香菜段,快速翻炒 3 次,使汤汁均匀裹在肉片上。
注意:老式锅包肉讲究"汁包肉",翻勺次数要少而快(约 3 次),目的是让汤汁均匀挂壁而不把外壳泡软——这正是"锅包"二字的工艺精髓。
4.9 出锅装盘
将锅包肉盛入盘中,撒上白熟芝麻(可无),即可上桌。
五、关键注意事项与常见误区
原食谱在"附加内容"中总结了三条注意事项,结合工序细节可进一步展开:
- 肉片厚度应为 8mm:过厚过薄都会影响口感。过厚不易熟透且外壳与内芯脱节,过薄则炸后干柴。
- 炸制时控制油温:油温过低会导致外壳吸油、口感油腻且不酥脆;油温过高则外壳焦黑、肉芯未熟。建议严格按"150℃ 定型 → 170℃ 炸熟 → 200℃ 复炸"三段走。
- 熬糖醋汁时注意火候:熬至粘稠但不结块,避免变成糖浆。糖醋汁含糖量高,大火久熬会焦化结块甚至发苦,出现"返砂"(糖重新结晶)现象,30-60 秒内见汁浓即下料翻勺。
另外还需留意:挂浆前肉片要充分沥干水分,否则浆糊挂不上;炒制全程保持大火,动作干脆,尽量减少肉片在锅中停留的时间。
六、从食谱到 RAG 知识库:结构化数据实战
这份老式锅包肉食谱并不是孤立的菜谱文本,它是 all-in-rag 项目第八章"尝尝咸淡"食谱问答 RAG 系统的知识库数据之一。理解它如何在系统中流转,能同时验证两件事:这份食谱的结构设计是否"为 RAG 而生",以及系统各模块如何消费它。
6.1 食谱文件在知识库中的位置与元数据
该食谱存放在data/C8/cook/dishes/meat_dish/老式锅包肉/老式锅包肉.md,位于知识库根目录data/C8/cook(配置见 config.py 的data_path)之下。目录路径本身就携带了分类信息。
当系统加载文档时,数据准备模块 的_enhance_metadata会从路径与内容中自动提取三层元数据:
- 菜品分类:通过路径中的
meat_dish目录名匹配到CATEGORY_MAPPING中的"荤菜"(data_preparation.py); - 菜品名称:直接取文件名
老式锅包肉作为dish_name; - 难度等级:用正则
r'★+'匹配内容中的星级,本例的四颗星被映射为"困难"(data_preparation.py)。
同时,系统基于文件相对路径的 MD5 哈希为该父文档分配确定性的parent_id,保证同一份食谱在多次运行中 ID 稳定,便于索引缓存复用。
6.2 Markdown 结构感知分块
这份食谱天然具备清晰的标题层级:#主标题(菜品名称)、##二级标题(必备原料和工具、计算、操作、附加内容)。系统使用MarkdownHeaderTextSplitter按三级标题切分(data_preparation.py),并设置strip_headers=False保留标题,保证每个子块自含上下文。
分块后的效果示意:
老式锅包肉.md(父文档) ├── 子块1:# 老式锅包肉的做法 + 简介 + 难度评级 ├── 子块2:## 必备原料和工具 + 原料清单 ├── 子块3:## 计算 + 用量配比 ├── 子块4:## 操作 + 详细制作步骤 └── 子块5:## 附加内容 + 注意事项每个子块继承父文档的全部元数据,并额外获得chunk_id、chunk_index、doc_type: child等字段,同时通过parent_child_map建立"子块 → 父文档"的映射,为后续"小块检索、大块生成"的父子文本块策略铺路。
6.3 查询链路:问"老式锅包肉怎么做"时发生了什么
以 main.py 中的ask_question为例,一条完整查询会经历以下流程:
- 查询路由:
query_router将"老式锅包肉怎么做"分类为detail(详细查询); - 查询重写:由于属于明确的具体菜品查询,
query_rewrite会保持原查询不变(generation_integration.py); - 混合检索:向量检索(
BAAI/bge-small-zh-v1.5语义匹配)与 BM25(关键词精确匹配,如"锅包肉""白醋")双路并行,再经 RRF(Reciprocal Rank Fusion)重排融合(retrieval_optimization.py); - 取父文档:根据命中子块的
parent_id找回完整食谱文档,按命中次数排序并去重(data_preparation.py); - 分步指导生成:
detail类型走generate_step_by_step_answer,按"菜品介绍 → 所需食材 → 制作步骤 → 制作技巧"的结构输出完整回答(generation_integration.py),回答中的食材清单、步骤说明直接源于本文第三、四节的内容。
若用户问的是"推荐几道荤菜"或"有什么困难的菜",系统还会通过_extract_filters_from_query从问题中提取分类/难度关键词,走metadata_filtered_search做元数据过滤检索(main.py),此时"荤菜""困难"这两个标签就派上了用场。
6.4 运行与体验
在配置好MOONSHAT_API_KEY环境变量后,可于 code/C8 目录下安装依赖并启动系统:
cd code/C8 pip install -r requirements.txt python main.py进入交互式问答后即可提问,例如"老式锅包肉怎么做""推荐一道荤菜""锅包肉需要什么食材"。系统架构与各模块的详细设计可继续阅读 docs/chapter8/01_env_architecture.md、docs/chapter8/02_data_preparation.md 与 docs/chapter8/03_index_retrieval.md。
七、参考资料
原食谱"附加内容"中引用了老饭骨、老东北美食两个版本的锅包肉做法作为参考来源。本文的全部用料数据、工序参数与注意事项均严格继承自 老式锅包肉食谱,RAG 相关实现细节以 code/C8 下的实际源码为准。
- 教程
- 人工智能
- 大模型
- RAG
【免费下载链接】all-in-rag
🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/
相关推荐
空气炸锅面包片:从减脂食谱到 all-in-rag 食谱 RAG 问答的完整流转
空气炸锅面包片:从减脂食谱到 all in rag 食谱 RAG 问答的完整流转 导读 本文以 all in rag 仓库中 data/C8/cook/dish
教程人工智能大模型RAGDatawhale All-in-RAG 食谱知识库实战:台式卤肉饭完整做法指南
Datawhale All in RAG 食谱知识库实战:台式卤肉饭完整做法指南 导读 本文以 Datawhale All in RAG 项目 C8 章节"尝尝
教程人工智能大模型RAGall-in-rag 食谱知识库实战:回锅肉(二刀肉)标准化做法全解 —— 原料配比、火候控制与 Markdown 结构化解析
all in rag 食谱知识库实战:回锅肉(二刀肉)标准化做法全解 —— 原料配比、火候控制与 Markdown 结构化解析 本文以 all in rag 项
教程人工智能大模型RAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考