news 2026/9/23 14:39:59

all-in-rag 食谱知识库精讲:酸梅汤的做法全解析——从结构化菜谱到 RAG 可检索数据资产

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
all-in-rag 食谱知识库精讲:酸梅汤的做法全解析——从结构化菜谱到 RAG 可检索数据资产

all-in-rag 食谱知识库精讲:酸梅汤的做法全解析——从结构化菜谱到 RAG 可检索数据资产

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

导读

本文以 all-in-rag 开源仓库第 8 章实战项目"尝尝咸淡 RAG 系统"中的一道经典饮品菜谱《酸梅汤的做法》为核心,完整还原这道古法酸梅汤的原料配比、头煎二煎工艺与冷藏饮用要点,并进一步揭示该菜谱文档在仓库中的定位:它不仅是可照做的家常菜谱,更是 code/C8 食谱 RAG 系统data/C8/cook数据源中的一份结构化 Markdown 数据资产。读完本文,你既能按方熬出一锅冰镇酸梅汤,也能理解这类菜谱文件如何被 数据准备模块 按 Markdown 标题分块、做元数据增强,最终成为可被检索、可被 LLM 引用的知识库单元。


一、菜谱在 all-in-rag 中的位置:一份饮品类的 RAG 数据资产

在 code/C8/main.py 中,食谱 RAG 系统通过RAGConfig将数据路径指向../../data/C8/cook,随后递归加载该目录下全部 Markdown 菜谱文件。酸梅汤文档位于:

  • 数据文件:data/C8/cook/dishes/drink/酸梅汤/酸梅汤.md
  • 成品图片目录:data/C8/cook/dishes/drink/酸梅汤/imges/

从目录层级dishes/drink/可以看出,系统在加载文档后,会依据文件路径自动推断分类。在 data_preparation.py 的 CATEGORY_MAPPING 中,'drink': '饮品'正是为这类路径准备的映射——酸梅汤因此被自动打上category="饮品"的元数据标签,用户向系统提问"有什么饮品推荐"时,即可通过元数据过滤精准命中。

这份菜谱同时具备该实战项目对数据的两点核心要求(见 docs/chapter8/01_env_architecture.md 的数据分析章节):

  1. 结构高度规整:每个菜谱文件都严格使用统一的小标题组织内容;
  2. 内容篇幅适中:单篇菜谱约数百字,适合直接按标题结构分块,无需与长度类分割器组合。

二、文档结构解读:与 Markdown 结构分块的天然契合

酸梅汤菜谱原文遵循标准的五段式结构,这与 MarkdownHeaderTextSplitter 的三级标题分割策略一一对应:

菜谱章节标题层级分割器标签分块后检索用途
# 酸梅汤的做法一级标题主标题菜品名称与整体定位
## 必备原料和工具二级标题二级标题用户问"需要什么食材"时精确命中
## 计算二级标题二级标题用量配比,可回答"做几份要多少乌梅"
## 操作二级标题二级标题制作步骤,回答"怎么做"
## 附加内容二级标题二级标题保存与饮用的补充建议

分割器设置strip_headers=False保留标题信息,使得每个子块都能独立理解上下文;同时每个子块会继承父文档的parent_id,建立"小块检索、大块生成"的父子关系——当用户问"酸梅汤怎么做"时,系统可能只检索到"操作"子块,但生成回答时会通过 get_parent_documents 取回包含原料、计算在内的完整父文档,保证 LLM 回答不缺失上下文。

此外,元数据增强逻辑(_enhance_metadata)还会为这份文档打上另外两个标签:

  • dish_name:从文件名提取,即酸梅汤
  • difficulty:用正则★+匹配连续星号。原文档标出预估烹饪难度:★★★★(4 星),按映射{5:'非常困难', 4:'困难', ...}会被自动判定为"困难"等级。

也就是说,这道酸梅汤在 RAG 系统眼中是一条"饮品 + 困难 + 酸梅汤"的元数据完备记录,可用于按分类/难度过滤检索。


三、必备原料和工具

原文档列出的原料清单如下(9 种):

  • 乌枣
  • 乌梅
  • 山楂片(生)
  • 黄冰糖
  • 甘草
  • 陈皮
  • 红豆蔻
  • 干桂花

从制作工艺看,这组原料可归为三类:主料(乌枣、乌梅——酸梅汤酸香与枣香的主要来源)、辅料(山楂片、甘草、陈皮、红豆蔻——提供酸甜层次与回甘)、调味与增香(黄冰糖——甜度来源、干桂花——出锅增香)。工具方面,需要一口可加盖炖煮的锅(砂锅、不锈钢锅均可)与一个足够大的盆或容器用于混合冰糖水,以及用于沥出药渣的滤具。

注意:原文档要求"冲洗材料(干桂花和冰糖除外)",即乌枣、乌梅、山楂片、甘草、陈皮、红豆蔻在浸泡前需先流水冲洗去除浮尘,而冰糖与干桂花不洗直接使用。


四、计算:一份 2 升装的标准配比

原文档给出的是以两升水为基准的标准用量,所有用量可等比例增加或减小,方便按需扩量:

原料用量
2000 ml(两升)
乌枣25 克
乌梅25 克
黄冰糖100 克
山楂片(生)30 克
甘草2 克
陈皮4 克
红豆蔻1 克
干桂花3 克

几点解读:

  • 冰糖是甜度主体(100 克),用量约为乌梅/乌枣的 4 倍,提供"甜适度"的平衡感;
  • 乌梅与乌枣等量(各 25 克),一酸一甜互为骨架;
  • 香辛料用量极轻:甘草 2 克、陈皮 4 克、红豆蔻 1 克,仅作风味点缀,不宜过量,否则会盖过主味;
  • 干桂花 3 克为最后增香所用,不计入浸泡与煎煮。

在 RAG 系统中,"计算"章节作为一个独立子块存在,当用户询问"酸梅汤放多少冰糖""两升水配多少乌梅"时,该子块即可被精确检索并引用。


五、操作步骤详解:头煎、二煎与桂花增香

原文档的操作流程可拆解为五个阶段,完整保留如下:

  1. 浸泡(2 小时以上):冲洗材料(干桂花和冰糖除外),用 1.5 升水常温浸泡两小时以上;
  2. 头煎(40 分钟):开中大火煮沸,盖盖,转小火煮 40 分钟;
  3. 冰糖水:将冰糖放入盆内,再将沥好药材的头汤趁热倒入,搅拌至冰糖完全融化;
  4. 二煎(20 分钟):药材重新装回锅内,加 600 毫升水,开大火煮沸,盖盖转中火再煮 20 分钟;
  5. 混合与增香:将二煎与冰糖水趁热混合为成品;在成品 60–70℃ 时加入干桂花(不要超过 80℃),加盖晾凉后放入冰箱冷藏 3 小时以上。

关键技术点说明:

  • 为什么分头煎与二煎:头煎以小火慢煮 40 分钟,充分萃取出乌梅、乌枣、山楂的酸香与果胶;二煎仅 20 分钟,进一步榨取剩余风味物质,两次汤液合并,风味浓度更高。这比单次长时间煮制更能兼顾"出味充分"与"不苦涩"。
  • 水量分配:浸泡用 1.5 升 + 二煎加水 0.6 升 ≈ 2.1 升,其中头煎汤液在熬煮中会有所蒸发,二煎与冰糖水混合后最终约得 2 升成品。
  • 干桂花温度红线:80℃ 以上高温会迅速破坏桂花香气物质,因此必须在 60–70℃ 区间加入,且加完后立即加盖闷香、缓慢降温。
  • 冷藏熟成:冷藏 3 小时以上不仅让饮品冰凉适口,也让桂花香与酸梅味进一步融合。

饮用时记得将干桂花沥出。原文档描述成品风味为:"如饮茶般细啜,冰凉振齿,酸醒人、甜适度,滋味丰满而悠长"。


六、附加内容与保存建议

原文档在"附加内容"中给出的核心建议是:放入冰箱冷藏后再饮用效果更佳。这与第五步"冷藏 3 小时以上"的要求一致——低温既带来口感上的"振齿"清凉感,也给予各风味物质充分的融合时间。

可操作层面的引申建议(均为基于原文工艺的合理推断,非新配方):

  • 冷藏保存期间应加盖密封,避免串味与香气挥发;
  • 干桂花在饮用前过滤沥出,可避免长时间浸泡导致香气转涩;
  • 若一次制作量大,可按比例缩减冷藏时间观测风味变化,再决定后续批量制作的冷藏时长。

七、从菜谱到 RAG:这份文档在系统中的完整流转

为方便读者把"做酸梅汤"与"用 RAG"两条线索串起来,这里梳理该文档在 all-in-rag 第 8 章实战项目中的完整数据流转(模块调用链可对照 docs/chapter8/02_data_preparation.md):

  1. 加载:DataPreparationModule.load_documents 通过rglob("*.md")递归扫描data/C8/cook,读入酸梅汤.md,并以相对路径的 MD5 生成稳定的parent_id
  2. 元数据增强_enhance_metadata从路径提取category="饮品"、从文件名提取dish_name="酸梅汤"、从★★★★提取difficulty="困难"
  3. 结构化分块MarkdownHeaderTextSplitter#/##/###将文档切成"做法标题、必备原料、计算、操作、附加内容"等子块,每个子块记录chunk_idparent_idchunk_index并写入parent_child_map
  4. 建索引与检索:子块经 索引构建模块 用 BGE-small-zh-v1.5 向量化存入 FAISS;用户提问后由 检索优化模块 执行向量 + BM25 的 RRF 混合检索,命中"操作"等子块;
  5. 取回父文档get_parent_documentsparent_id去重取回完整菜谱,交由 生成集成模块 生成分步骤回答。

也就是说,本文讲解的这份酸梅汤文档,正是"尝尝咸淡"食谱 RAG 系统数据管线的真实样本:data/C8/cook下每一篇规整的 Markdown 菜谱,都会经历上述"加载 → 增强 → 分块 → 索引 → 检索 → 生成"的完整链路。


八、常见问题(FAQ)

Q1:用量可以调整吗?可以。原文档明确说明"上述所有用量可以等比例增加或减小",即按两升基准乘以/除以比例系数即可,各原料间配比关系保持不变。

Q2:为什么浸泡要用 1.5 升水,而二煎只加 600 毫升?浸泡用水承担了大部分萃取的"溶剂"角色,量多利于食材充分吸水出味;二煎的 600 毫升用于补提剩余风味,两次汤液合并后恰好接近 2 升成品量,避免过量稀释。

Q3:干桂花什么时候加?在成品温度降至 60–70℃ 时加入(不要超过 80℃),加后加盖闷香,晾凉冷藏。饮用前将桂花沥出。

Q4:在 RAG 系统里搜索"酸梅汤怎么做"会命中哪个子块?会命中"操作"子块(向量检索按语义匹配"怎么做"),生成阶段再取回包含原料与计算在内的完整父文档,保证回答完整。

Q5:系统如何知道酸梅汤属于"饮品"、难度是"困难"?由 数据准备模块 的元数据增强完成:分类来自文件路径中的drink目录映射,难度来自内容中星级的正则匹配,菜名来自文件名。这些标签无需人工标注,是 RAG 系统中"从非结构化数据自动提取结构化元数据"的典型实践。


附:原始菜谱全文

以下为 data/C8/cook/dishes/drink/酸梅汤/酸梅汤.md 的完整原始内容,供读者对照本文研读:

# 酸梅汤的做法 预估烹饪难度:★★★★ ## 必备原料和工具 - 水 - 乌枣 - 乌梅 - 山楂片(生) - 黄冰糖 - 甘草 - 陈皮 - 红豆蔻 - 干桂花 ## 计算 - 两升水 - 乌枣 25 克 - 乌梅 25g - 黄冰糖 100 克 - 山楂片 30 克 - 甘草 2 克 - 陈皮 4 克 - 红豆蔻 1 克 - 干桂花 3 克 上述所有用量可以等比例增加或减小。 ## 操作 - 冲洗材料(干桂花和冰糖除外),1.5 升水常温浸泡两小时以上(干桂花和冰糖除外) - 开中大火煮沸,盖盖,转小火煮 40 分钟,为头煎 - 将冰糖放入盆内,再将沥好用材的头汤趁热倒入,搅拌至冰糖融化。 - 药材重新装回锅内再 600 毫升的水,开大火煮沸,盖盖,转中火,再煮 20 分钟为二煎 - 最后将二煎和冰糖水趁热混合为成品。在成品 60-70℃ 加入干桂花(不要超过 80℃)加盖晾凉再放入冰箱冷藏 3 小时以上。 - 饮用时记得将干桂花沥出。如饮茶般细啜,冰凉振齿,酸醒人、甜适度,滋味丰满而悠长 ## 附加内容 放入冰箱冷藏后再饮用效果更佳。

这份全文约 40 行、数百字的文档,正是 all-in-rag"尝尝咸淡 RAG 系统"所期望的标准数据样本——结构化、可拆分、元数据可自动提取,读罢既能照方熬汤,也理解了它为何能成为 RAG 知识库中一条高质量的"饮品·困难·酸梅汤"条目。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 14:39:52

坦克检测数据集实战:VOC转YOLO与yolov8训练全流程

简介:这份资源是面向目标检测初学者与算法工程师的坦克检测数据集,采用Pascal VOC与YOLO双格式标注,可直接用于YOLO系列模型的训练与验证,适合军事目标识别、遥感图像分析等场景的入门实践与算法调优。压缩包共2000个文件&#xf…

作者头像 李华
网站建设 2026/9/23 14:39:50

OpenHarmony中React Native AsyncStorage批量操作优化实践

1. 项目背景与核心价值在OpenHarmony生态中集成React Native技术栈时,数据持久化一直是开发者面临的痛点问题。AsyncStorage作为React Native官方推荐的轻量级存储方案,其批量操作能力在实际业务场景中尤为重要。想象一下电商应用的购物车同步、社交应用…

作者头像 李华
网站建设 2026/9/23 14:39:51

手游脚本软件哪个好用:源码解析避坑指南

手游脚本软件哪个好用:源码解析避坑指南 版本升级后 API 全变了?昨天还能跑的代码,今天一启动直接闪退,报错信息还看不懂。别急着骂娘,这时候去翻 源码解析 ,比盲目试错快十倍。很多老手都在坑里躺过,今天就把几款主流手游脚本工具的底层逻辑拆开了讲,告诉你到底哪款适合你,怎么改代码才能稳住。 1.…

作者头像 李华
网站建设 2026/9/23 14:39:35

ps怎么做印章手写实现:3个避坑指南让性能提升10倍

ps怎么做印章手写实现:3个避坑指南让性能提升10倍 配置环境就卡半天?别慌。很多转岗做前端或后端的朋友,一接触图像处理就头大,装库、配依赖、调参数,半天过去了代码还没跑通。这篇避坑指南,直接给你能跑通的代码和性能数据,不整虚的。 性能瓶颈:为什么你的印章生成慢如蜗牛…

作者头像 李华
网站建设 2026/9/23 14:39:29

手写实现PosCMS核心逻辑,避开这3个致命坑

手写实现PosCMS核心逻辑,避开这3个致命坑 官方文档翻了三遍还是没搞懂 PosCMS 的底层调度机制?别慌,大多数开发者都卡在这一步。文档太厚、术语太杂,根本抓不住重点。今天我不讲虚的,直接带你 手写实现 PosCMS 的核心调度片段,用代码把那些模糊的概念钉死在内存里。…

作者头像 李华
网站建设 2026/9/23 14:39:21

ADmall 如何保障账户资金安全

跨境出海采购海外广告账户资源,资金安全是采购方重点关注的问题。大量交易长期流转在社交私域环境,经常出现付款之后卖家失联、货不对版、发生纠纷无凭证维权的情况。很多从业者会疑惑,第三方撮合平台通过哪些机制降低采购环节的资金风险。 这…

作者头像 李华