老妈蹄花菜谱数据解析:以结构化 Markdown 驱动的 RAG 食谱问答实战
教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载老妈蹄花是“尝尝咸淡 RAG 系统”项目实战章节中一道典型的荤菜类菜谱数据其文件 老妈蹄花.md 完整遵循了 HowToCook 风格的结构化模板——一级标题、简介与难度评级、必备原料和工具、计算、操作、附加内容。在 docs/chapter8 的实战项目中这类菜谱正是“小块检索、大块生成”父子文本块架构的直接训练语料系统会按标题层级将其切分为子块用于精确检索并在生成时回传完整父文档保证上下文完整。读完本文你将掌握这类结构化菜谱的解析方法、元数据增强规则、Markdown 结构分块逻辑以及如何把它接入code/C8中可运行的 RAG 检索链路。一、菜谱文档的数据结构剖析1.1 一级标题与难度评级老妈蹄花这道菜的文件以“# 老妈蹄花的做法”作为一级标题紧接着是一段简介和星级难度标记# 老妈蹄花的做法 [![result 3](https://raw.gitcode.com/datawhalechina/all-in-rag/raw/583a61b09869bc3afc4552289171f6ec188f2c76/data/C8/cook/dishes/meat_dish/老妈蹄花/result3.jpg?utm_sourcegitcode_repo_files)](https://link.gitcode.com/i/1a8cc09b18241f969f9111ee80e4a58b) 红烧猪蹄营养丰富口感细腻软烂脱骨配上酸辣汁简直太香 预估烹饪难度★★★★这段内容在 data_preparation.py 的_enhance_metadata中被专门解析源码使用正则re.search(r★, content)匹配连续星号再按{5: 非常困难, 4: 困难, 3: 中等, 2: 简单, 1: 非常简单}映射到难度标签。因此“★★★★”会被识别为“困难”这一难度标签会写入文档元数据供后续 retrieval_optimization.py 的元数据过滤检索使用——例如用户问“有什么难度高的硬菜”时可以按 difficulty 过滤出此类菜谱。1.2 结构化小节H2正文被严格划分为 4 个 H2 小节这是数据准备模块按标题分块的核心依据小节标题语义作用对应分块## 必备原料和工具食材清单子块原料与工具## 计算用量配比子块计算## 操作制作步骤子块操作## 附加内容变化做法与补充说明子块附加内容在 docs/chapter8/02_data_preparation.md 中这种结构与“西红柿炒鸡蛋”示例完全一致说明这是整个菜谱数据集的通用约定一级标题提供菜名二级标题提供章节语义让“用户问食材、步骤、用量”这类问题可以精确命中对应子块。二、元数据增强从文件路径到结构化标签老妈蹄花位于data/C8/cook/dishes/meat_dish/目录下这一路径信息在数据准备阶段被转化为分类标签。源码 data_preparation.py 定义了CATEGORY_MAPPINGCATEGORY_MAPPING { meat_dish: 荤菜, vegetable_dish: 素菜, soup: 汤品, dessert: 甜品, breakfast: 早餐, staple: 主食, aquatic: 水产, condiment: 调料, drink: 饮品 }由于文件路径包含meat_dish系统会为该文档打上category 荤菜标签文件名老妈蹄花则被提取为dish_name。这三个元数据字段category、dish_name、difficulty与parent_id、doc_type一起构成了后续检索过滤和去重的关键依据。在 main.py 中_extract_filters_from_query会从用户问题中识别“荤菜”“困难”等关键词并自动转为过滤条件。三、Markdown 结构分块与父子文本块3.1 分块器的标题层级配置data_preparation.py 的_markdown_header_split使用 LangChain 的MarkdownHeaderTextSplitter按三级标题切分headers_to_split_on [ (#, 主标题), # 菜品名称 (##, 二级标题), # 必备原料、计算、操作等 (###, 三级标题) # 简易版本、复杂版本等 ] markdown_splitter MarkdownHeaderTextSplitter( headers_to_split_onheaders_to_split_on, strip_headersFalse # 保留标题便于理解上下文 )strip_headersFalse表示分割后保留标题文本这样每个子块自带章节语义例如“## 操作”既便于理解上下文也让向量检索能捕捉到标题关键词。以老妈蹄花为例分割后的子块结构为父文档老妈蹄花.md完整菜谱 ├── 子块1# 老妈蹄花的做法 简介 难度评级 ├── 子块2## 必备原料和工具 食材清单 ├── 子块3## 计算 用量配比 ├── 子块4## 操作 详细制作步骤 └── 子块5## 附加内容3.2 父子关系的建立每个子块都会继承父文档的全部元数据并额外写入chunk_id、parent_id、doc_typechild、chunk_index同时parent_child_map[child_id] parent_id维护映射。父文档的parent_id由文件相对路径经 MD5 生成确定性 ID保证同一文件多次加载 ID 一致。3.3 为什么用小块检索、大块生成结合 docs/chapter8/01_env_architecture.md 中的分析若直接拿整个菜谱文档做向量检索用户问“老妈蹄花需要什么食材”时“必备原料和工具”在整个文档中的占比很小可能检索不到或排名靠后而按标题切成小块后该子块能精确匹配。生成阶段则通过 get_parent_documents 回传完整父文档避免只拿到“操作”章节却缺失原料信息从而保证 LLM 回答的上下文完整。四、菜谱内容与关键参数说明4.1 必备原料和工具原文列出猪蹄优先猪前蹄肉多筋多骨头少、葱、姜、料酒、生抽、白芷、当归可选、鸡精、盐、蒜、小米椒、白胡椒粉、生抽、香醋、花椒油、油泼辣子可选、白芸豆没有可用海带替换。其中白芷、当归属于川渝风味炖煮的去腥增香药材白芸豆是蹄花汤的灵魂配料若买不到可退而求其次使用海带。4.2 计算用量配比原文给出的标准用量原料用量猪蹄3 根白芸豆200g当归2g白胡椒粉5g姜片30g蒜末8g鸡精2g生抽25g葱花10g“计算”小节的意义在于它把“做几份”的变量与固定比例分离方便按人数缩放。这类配比数据在 RAG 问答中会被单独检索例如用户问“老妈蹄花要放多少白芸豆”时直接命中本子块即可给出 200g 的精确答案。4.3 操作制作步骤原文步骤可归纳为三个关键阶段每一步都有明确的技术要点预处理200g 白芸豆提前一晚清水浸泡猪前蹄请摊主从中间劈开用喷火枪去除毛囊后清洗干净。焯水去腥冷水锅中放入猪蹄、大葱段、姜片、料酒焯水十分钟撇去浮沫捞出洗净备用。高压炖煮高压锅中放入猪蹄、当归、白芷、白胡椒粉、姜片上汽后压三十分钟放入白芸豆再压十分钟。汤底呈奶白色即说明成功中途如需加水只能加热水否则蛋白质遇冷水凝固会影响汤色与口感。调味揭盖后加盐、鸡精、葱花调味。4.4 灵魂蘸汁附加内容原文的“灵魂汁子”配方为葱、蒜、小米椒、白胡椒粉、生抽、香醋、油泼辣子、花椒油并兑入猪蹄原汤。这道菜以白汤蹄花搭配酸辣蘸水食用蘸汁的“原汤”是关键——用炖煮原汤代替清水能让蘸汁与蹄花风味统一。五、把这道菜接入 RAG 系统的运行验证5.1 数据路径与默认配置在 config.py 中默认数据路径为../../data/C8/cook即仓库中的 data/C8/cook 目录老妈蹄花正是其dishes/meat_dish/下的一个文件。项目使用BAAI/bge-small-zh-v1.5作为嵌入模型、kimi-k2-0711-preview作为生成模型检索top_k3。5.2 运行链路按 docs/chapter8/01_env_architecture.md 的说明cd code/C8 pip install -r requirements.txt # 依赖见 code/C8/requirements.txt python main.py运行python main.py后系统会经历加载*.md文档 → 元数据增强 → Markdown 结构分块 → FAISS 向量索引构建首次构建后缓存到本地后续秒级加载→ 混合检索向量 BM25 RRF 重排→ 父子去重 → LLM 生成。当用户提问“老妈蹄花怎么做”时系统会先通过 RRF 混合检索命中“## 操作”子块再经 get_parent_documents 回传完整文档最终以分步指导模式输出制作步骤。5.3 过滤检索验证在 main.py 中查询“推荐一道荤菜”会触发category过滤此时系统只会检索category 荤菜的文档老妈蹄花、红烧肉等 meat_dish 类菜谱即为候选。同理带“困难”的查询会命中老妈蹄花标注的四星难度。六、小结老妈蹄花这道菜谱是 data/C8/cook 数据结构化程度的缩影它的 H1 与难度星级、H2 小节结构、路径中的分类信息分别对应元数据增强难度、菜名、分类与结构分块原料/计算/操作/附加内容两条处理管线。理解这份文档就理解了整个 RAG 项目“小块检索、大块生成”的数据基础其余数百道菜谱遵循同一模板因此同一套数据准备、索引构建与混合检索代码可以无缝覆盖整个知识库。如果你希望进一步调整这道菜在检索中的表现可以从 config.py 的top_k、嵌入模型或 data_preparation.py 的标题层级配置入手。赞分享教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载相关推荐黔式腊肠娃娃菜食谱基于 Markdown 结构化数据构建 RAG 菜谱问答系统黔式腊肠娃娃菜食谱基于 Markdown 结构化数据构建 RAG 菜谱问答系统 黔式腊肠娃娃菜是一道源自西南菜系、却罕见地不辣的咸鲜快手菜全程只需煮一锅水教程人工智能大模型RAG泰国手标红茶食谱实战从结构化 Markdown 菜谱到 all-in-rag 食谱 RAG 知识库泰国手标红茶食谱实战从结构化 Markdown 菜谱到 all in rag 食谱 RAG 知识库 泰国手标红茶是泰国街头随处可见的奶茶味道香纯绵密。在教程人工智能大模型RAG小酥肉菜谱的RAG实战从Markdown结构化文档到尝尝咸淡食谱问答系统小酥肉菜谱的RAG实战从Markdown结构化文档到尝尝咸淡食谱问答系统 本文以仓库 data/C8/cook/dishes/meat_dish/小酥肉.教程人工智能大模型RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Qi2 vs MagSafe实测:iPhone无线充电协议、功率与发热真相

Qi2 vs MagSafe实测:iPhone无线充电协议、功率与发热真相

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:06:25 阅读更多 →
Byte Buddy 委托编程实战:MethodDelegation 实现抽象类方法并注入自定义注解

Byte Buddy 委托编程实战:MethodDelegation 实现抽象类方法并注入自定义注解

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、…

2026/9/24 8:06:25 阅读更多 →
DeepSeek 高效使用与集成:10 个技巧让输出稳定可控

DeepSeek 高效使用与集成:10 个技巧让输出稳定可控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:06:25 阅读更多 →

最新新闻

20页的复盘只动3页,AI改完其他页没乱

20页的复盘只动3页,AI改完其他页没乱

20页里只动3页 一位每天跟表格、文档打交道的人,手上刚做完一份月度复盘:一份数据表,加一份20页的汇报文件。开会前一天,他往表格里加了一张决策看板,又在汇报文件里挑出3页重排——其余17页,全都没动。 整…

2026/9/24 8:41:58 阅读更多 →
AI科研工具助力科研效率提升 解锁前沿学术研究新路径

AI科研工具助力科研效率提升 解锁前沿学术研究新路径

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

2026/9/24 8:41:58 阅读更多 →
Flink Hive 方言查询(Queries)完全指南:从 SELECT 语法到 Sort/Cluster/Join/CTE 实战

Flink Hive 方言查询(Queries)完全指南:从 SELECT 语法到 Sort/Cluster/Join/CTE 实战

大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 导读 Hive 方言是 Flink 为兼容 Hive 生态提供的 SQL 解析与执行模式:启用后,你可以直接在 Flink 中编写 HiveQ…

2026/9/24 8:41:58 阅读更多 →
EMC四大测试CE/RE/CS/RS本质解析与协同设计

EMC四大测试CE/RE/CS/RS本质解析与协同设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:41:58 阅读更多 →
LanceDB Node.js 多向量搜索:理解 MultiVector 类型别名与多向量查询实战

LanceDB Node.js 多向量搜索:理解 MultiVector 类型别名与多向量查询实战

向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 MultiVector 是 lancedb/lan…

2026/9/24 8:41:58 阅读更多 →
2026届美术生如何平衡专业课集训与文化课的学习节奏?

2026届美术生如何平衡专业课集训与文化课的学习节奏?

写作方向:实操方法型2026届美术生平衡专业课集训与文化课节奏的核心逻辑,不是每天对半切分学习时间,而是顺着集训全周期的阶段目标动态调整精力占比,把文化课拆解成“日常碎片化积累考后集中冲刺”两个模块,从根源上避…

2026/9/24 8:40:57 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →