all-in-rag 食谱知识库实战:以一份简易红烧肉菜谱为例的数据准备全流程解析
教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载在 Datawhale 的 all-in-rag 项目中第 8 章基于 HowToCook 风格的菜谱数据构建了一个名为尝尝咸淡的食谱问答 RAG 系统而data/C8/cook/dishes/meat_dish/红烧肉/简易红烧肉.md正是该系统知识库中的一份典型数据样本。本篇文章以这份菜谱为绝对主体先完整讲解其菜谱内容再结合仓库源码data_preparation.py 等深入剖析它从一份普通 Markdown 文件一步步转化为可精确检索、可完整生成的知识单元的全过程。读完你将掌握结构化菜谱文档如何被加载与元数据增强、如何按 Markdown 标题层级分块、父子文本块架构如何保证小块检索、大块生成以及该系统如何运行验证。一、这份菜谱文档的完整内容简易红烧肉.md是知识库中荤菜分类下的一份菜谱全文采用规范的 Markdown 结构一级标题为菜品名正文包含简介与难度评级随后是必备原料和工具、计算、操作、附加内容四个二级章节。这种高度规整的结构正是第 8 章数据准备模块能够直接按标题分块的前提详见 02_data_preparation.md。1.1 菜品简介与难度这份红烧肉教程是一道新手不败的菜谱。配着米饭好吃的停不下来香糯无敌棒色泽诱人肥而不腻。建议搭配米饭食用。文档中标注预估烹饪难度★★★。这一星级标记并非普通文本它会被数据准备模块的正则逻辑自动解析为结构化的难度元数据详见下文 2.2 节。1.2 必备原料和工具类别原料/工具主料大肉、鸡蛋可选、豆皮可选辅料生姜、冰糖、生抽、老抽、料酒、香叶、八角、盐、水、葱记得要开水工具刀原文档特别提示如果有可能请尽量把刀磨得锋利一些1.3 计算用量配比原文档要求每次制作前需要确定计划做几份一份正好够 2~3 人吃如果只有 1 人食用可以考虑食材减半。具体用量如下猪五花肉约 3~4 斤姜6 片冰糖15 克约 7 块生抽10ml老抽15ml料酒5ml开水没过食材的量需要 600ml~900ml香叶3 片八角2 个鹌鹑蛋可选没有鹌鹑蛋可以用同等重量的鸡蛋代替0~2 个豆皮可选0~80g盐2~3g1.4 操作步骤原材料准备猪五花肉切大块约 4.5cm冷冻半小时至一小时更好切豆皮切 2cm 的宽度生姜切片每片厚度约 3mm水烧开鹌鹑蛋煮熟并用叉子/牙签扎孔尽量多些好入味大葱取白色的部分葱白开始制作冷水锅中放入切好的猪五花肉加入料酒与葱姜煮 15 分钟去掉血腥锅中放入两片生姜提味开中小火后直接加入五花肉不需要放入食用油每块五花肉六个面都煎一下煎至出油即可将煎出的油倒出备用并将五花肉推至一边加入 15g 冰糖翻炒至冰糖融化融化后将五花肉与冰糖炒至融合上色加入生抽 10ml、老抽 15ml、料酒 5ml翻炒至上色加入烧好的开水炖煮 40 分钟刀工差的同学切的过大请自觉延长炖煮时间并放入生姜 2 片、香叶 3 片、八角 2 个盖上锅盖煮至沸腾后加入煮好扎好孔的鹌鹑蛋和豆皮开中小火等待 40 分钟中途可适当翻搅防止粘锅打开锅盖待汤汁快没有的时候开大火收汁切记不可收干加入 2~3g 盐翻炒一下就可以出锅了。原文档末尾的附加内容章节为空这并不影响其作为知识库样本的价值——生成模块的提示词设计见 generation_integration.py明确要求如果原文的附加内容与烹饪无关或为空可以基于制作步骤总结关键要点或者完全省略此部分保证回答不会强行填充无关内容。二、这份菜谱在 RAG 系统中的定位2.1 数据源路径与目录约定系统的数据根路径在 config.py 中配置为../../data/C8/cook相对于code/C8目录而这份红烧肉菜谱恰好位于该路径下的dishes/meat_dish/红烧肉/子目录。meat_dish这个目录名不是随意取的它是元数据增强时推断菜品分类的关键依据。2.2 加载与元数据增强一份菜谱如何获得标签在 data_preparation.py 中load_documents()使用Path.rglob(*.md)递归扫描数据目录下的所有 Markdown 文件读取原始内容并创建Document对象。每个父文档的parent_id由相对路径经 MD5 哈希得到确定性 ID重复构建不产生新 IDdoc_type标记为parent。随后_enhance_metadata()为每份菜谱补充三类核心元数据data_preparation.py菜品分类category通过CATEGORY_MAPPING字典在文件路径中匹配目录名meat_dish → 荤菜、vegetable_dish → 素菜、soup → 汤品等九类。因此简易红烧肉.md会被自动打上荤菜标签菜品名称dish_name直接取文件名不含扩展名file_path.stem即简易红烧肉难度等级difficulty使用正则re.search(r★, content)精确匹配连续星号数量再经映射表{5: 非常困难, 4: 困难, 3: 中等, 2: 简单, 1: 非常简单}转换。本菜谱的三颗星会被解析为中等。这些元数据不仅用于展示还直接服务于检索阶段的过滤能力main.py的_extract_filters_from_query()会从用户问题中抽取分类与难度关键词如简单的荤菜命中后调用metadata_filtered_search()缩小检索范围见 main.py。2.3 Markdown 结构感知分块分块逻辑位于chunk_documents()与_markdown_header_split()data_preparation.py它使用 LangChain 的MarkdownHeaderTextSplitter按三级标题进行分割headers_to_split_on [ (#, 主标题), # 菜品名称 (##, 二级标题), # 必备原料、计算、操作等 (###, 三级标题) # 简易版本、复杂版本等 ] markdown_splitter MarkdownHeaderTextSplitter( headers_to_split_onheaders_to_split_on, strip_headersFalse # 保留标题便于理解上下文 )对于本菜谱分块结果如下对应 02_data_preparation.md 中分块效果示例描述的父子文本块映射父文档简易红烧肉.md完整菜谱 ├── 子块1# 简易红烧肉的做法 简介 难度评级 ├── 子块2## 必备原料和工具 食材清单 ├── 子块3## 计算 用量配比 ├── 子块4## 操作 详细制作步骤 └── 子块5## 附加内容空章节每个子块都会继承父文档的全部元数据并额外获得chunk_idUUID、doc_typechild、chunk_index在父文档中的位置、batch_index与chunk_size同时self.parent_child_map[child_id] parent_id建立起子块到父文档的映射关系。strip_headersFalse意味着标题文本被保留在子块内容中便于 LLM 理解上下文。2.4 父子文本块为什么小块检索、大块生成这是本项目数据准备设计的核心思想。如果只问红烧肉需要什么食材整份菜谱文档中只有必备原料和工具和计算两个章节与该问题高度相关直接向量化整篇文档会导致该部分被稀释、排名靠后而按标题切成小块后子块 2/3 能精确命中。但反过来如果只把命中的小块喂给 LLM又会丢失完整上下文如缺少操作步骤。因此检索阶段使用小块精确匹配生成阶段则通过get_parent_documents()data_preparation.py把命中的多个子块聚合回完整父文档再传给 LLM统计每个父文档被匹配的子块数量相关性指标按命中次数降序排序命中子块越多的菜谱排名越靠前每个父文档只输出一次实现智能去重避免同一道菜被重复拼接。这也正是用户问宫保鸡丁怎么做时可能同时检索到操作、原料等多个子块最终合并为一个完整菜谱的去重机制。三、从分块到检索与生成整条调用链这份菜谱生成的子块会继续流入后续模块形成完整的 RAG 链路索引构建IndexConstructionModule使用BAAI/bge-small-zh-v1.5嵌入模型CPU 推理、向量归一化将子块向量化构建 FAISS 向量索引并持久化到./vector_index见 index_construction.py。第二次启动时可直接加载已保存索引实现秒级启动。混合检索与 RRF 重排RetrievalOptimizationModule同时使用向量检索语义与 BM25 检索关键词再用 RRFReciprocal Rank Fusion公式1/(krank1)k60融合两个榜单的排名见 retrieval_optimization.py最终按config.top_k3截取结果。查询路由与重写GenerationIntegrationModule先将问题路由为list推荐列表/detail详细做法/general一般问题三类detail类走分步指导提示词general类走基础回答提示词均支持流式输出见 generation_integration.py。生成默认使用kimi-k2-0711-preview模型通过 MoonshotChat 接入需设置MOONSHOT_API_KEY环境变量temperature0.1、max_tokens2048见 config.py。上下文构建器_build_context()会把每个父文档的dish_name、category、difficulty元数据连同全文一起格式化后送入提示词。例如用户问红烧肉怎么做系统会命中该菜谱的多个子块去重聚合回完整父文档最终以菜品介绍 → 所需食材 → 制作步骤 → 制作技巧的分步结构输出回答。四、运行与验证按第 8 章环境配置01_env_architecture.md操作conda create -n cook-rag-1 python3.12.7 conda activate cook-rag-1 cd code/C8 pip install -r requirements.txt export MOONSHOT_API_KEY你的API密钥 # 或在 .env 中配置 python main.py依赖清单见 requirements.txt核心包括langchain0.3.26、langchain-community0.3.27、langchain-huggingface0.3.1、faiss-cpu、rank_bm25等。程序启动后会先构建/加载知识库并打印统计信息文档总数、文本块数、分类与难度分布随后进入交互式问答输入红烧肉需要什么食材推荐几个简单的荤菜等即可验证本菜谱在系统中的检索与生成效果。小结一份看似普通的简易红烧肉.md在 all-in-rag 第 8 章的数据准备模块中经历了递归加载 → 元数据增强 → 三级标题分块 → 父子关系建立 → 智能去重的完整流水线目录名meat_dish变成荤菜标签、三颗星变成中等难度、四个章节变成五个可精确检索的子块最终在混合检索与 RRF 重排的配合下为小块检索、大块生成的问答体验提供了坚实的数据底座。理解这一过程你就掌握了如何把任何高度结构化的 Markdown 语料转化为高质量 RAG 知识库的通用方法论。赞分享教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载相关推荐红烧猪蹄的完整做法all-in-rag 菜谱知识库中的标准化荤菜食谱实战红烧猪蹄的完整做法all in rag 菜谱知识库中的标准化荤菜食谱实战 红烧猪蹄是一道汤汁浓郁、软糯下饭的经典家常硬菜其标准做法文档完整收录在 all i教程人工智能大模型RAG冷吃兔食谱实战all-in-rag 中一份 Markdown 菜谱如何成为 RAG 知识库的数据源冷吃兔食谱实战all in rag 中一份 Markdown 菜谱如何成为 RAG 知识库的数据源 冷吃兔是川渝地区经典的自贡菜也是 Datawhale a教程人工智能大模型RAGall-in-rag 食谱知识库实战徽派红烧肉的完整做法与结构化数据解析all in rag 食谱知识库实战徽派红烧肉的完整做法与结构化数据解析 导读 本文以开源仓库 datawhalechina/all in rag 中 C8教程人工智能大模型RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AutoCAD硬件加速与显卡驱动优化指南

AutoCAD硬件加速与显卡驱动优化指南

/* 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 3:45:44 阅读更多 →
陪诊行业爆发:平台 + 陪诊师 + 医院 + 渠道多方分账怎么解?

陪诊行业爆发:平台 + 陪诊师 + 医院 + 渠道多方分账怎么解?

随着老龄化加剧、优质医疗资源紧张和城市就医流程复杂化,陪诊服务正在从 “小众帮忙” 变成城市家庭的高频刚需。一线城市陪诊平台数量已超过 200 家,不少项目从医院周边的小团队,快速成长为连接患者、陪诊师、医院渠道、保险公司和推荐人的医…

2026/9/24 3:45:43 阅读更多 →
先验证谁付钱——「2026年,手机就能做」可复制的 AI 步骤拆解

先验证谁付钱——「2026年,手机就能做」可复制的 AI 步骤拆解

**项目名片(学习向)**赛道:内容创作变现模式:广告/橱窗(公开常见路径)启动门槛:低到中适合人群:图文创作者核心承诺:先验证谁付钱重要声明:本文为 **AI 应用与…

2026/9/24 3:45:43 阅读更多 →

最新新闻

WorkBuddy能给企业带来什么?从AI工具到业务智能体

WorkBuddy能给企业带来什么?从AI工具到业务智能体

很多公司现在已经在用 AI 了。但你去问员工“平时怎么用”,答案通常都差不多。写个方案的时候让 AI 帮忙改一下,开完会把录音或者文字丢进去整理纪要,销售写客户邮件时让 AI 润色几句。财务手里有一张乱七八糟的 Excel,也可能先让…

2026/9/24 4:29:14 阅读更多 →
为什么Jev诞生在OpenAI之外:System One模型与RLHF的隐藏代价

为什么Jev诞生在OpenAI之外:System One模型与RLHF的隐藏代价

Diogo Almeida(迭戈阿尔梅达)这周过得并不轻松。作为TypeSafe的联合创始人兼CEO,他刚刚发布了Jev——一个在整条时间线上刷屏的产品,而他自己形容当下的状态是"情绪上从未这么糟过",像一具被各种突发状况拖垮…

2026/9/24 4:29:14 阅读更多 →
鼎讯信通G-4000B光缆路由追踪仪的手机远程操作解析

鼎讯信通G-4000B光缆路由追踪仪的手机远程操作解析

在光缆故障追踪中,一个常见的尴尬是:仪表在机房或井口,人却在另一端敲击光缆,两边沟通全靠对讲机,效率低还容易出错。鼎讯光缆路由追踪仪G-4000B针对这个痛点,加入了手机APP远程控制功能,让单人…

2026/9/24 4:29:14 阅读更多 →
小米数字系列迎来史上最大升级,卢伟冰:AI全面改造智能手机的开始

小米数字系列迎来史上最大升级,卢伟冰:AI全面改造智能手机的开始

9月23日,小米秋季新品发布会在北京举行。小米18 Pro、小米18 Pro Max正式发布,性能、屏幕、背屏、影像等全面升级;小米平板9系列、小米手环11、小米手表S5以及多款科技家电新品同步亮相。小米18 Pro系列带来多项产品创新。全系搭载超级像素2.…

2026/9/24 4:29:13 阅读更多 →
人声音色怎么克隆

人声音色怎么克隆

如果需要统一视频中同一角色的跨片段声线,或是为旁白配置指定音色,可以借助专业剪辑工具的音色克隆功能完成处理。目前剪映专业版已支持基础的音色克隆与角色音色配置功能,处理前需要确认你使用的音色样本已获得合法授权,本文将基…

2026/9/24 4:29:13 阅读更多 →
LPC2388实战指南:AMBA总线与ARM7嵌入式开发深度解析

LPC2388实战指南:AMBA总线与ARM7嵌入式开发深度解析

/* 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 4:28:13 阅读更多 →

日新闻

基于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 阅读更多 →