孜然牛肉食谱全解析:从家常做法到 All-in-RAG 菜谱知识库的数据设计实战
教程人工智能大模型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菜谱文档为核心展开的技术文章前半部分完整讲解这道菜从备料、用量计算到出锅的每一步家常做法后半部分则从 Datawhale All-in-RAG 项目中 C8 章节 RecipeRAG 系统的视角剖析这份菜谱文档为何要这样组织——Markdown 标题层级、星级难度标记、目录分类、按人份用量公式化这些约定正是让一份普通菜谱能被大模型 RAG 系统精准加载、分块、检索与生成的根基。读完本文你既能照着做出地道孜然牛肉也能理解如何用同样的文档规范为自己的 RAG 知识库设计高质量数据。一、文档定位一份进入 RecipeRAG 知识库的荤菜菜谱在 data/C8/cook 目录下存放着 RecipeRAG 系统的全部菜谱语料。孜然牛肉.md位于dishes/meat_dish/子目录下属于荤菜类目是系统知识库中的普通一员。在 code/C8/main.py 的配置中默认数据路径为../../data/C8/cook相对于 code/C8/config.py系统启动时会通过rglob(*.md)递归扫描该目录下所有 Markdown 文件并全部载入向量库。这意味着这份菜谱文档不是孤立的文本而是会被完整的加载 → 元数据增强 → 分块 → 向量化 → 检索 → 生成流水线处理的知识库数据单元。这份文档的完整结构如下# 孜然牛肉的做法一级标题 难度评级 ├── ## 必备原料和工具 ├── ## 计算按人份用量 ├── ## 操作制作步骤 └── ## 附加内容二、菜谱全文与逐项解析2.1 难度评级文档开篇给出预估烹饪难度★★★三颗星代表中等难度。在 code/C8/rag_modules/data_preparation.py 中系统使用正则r★精确匹配连续星号数量并按映射表{5: 非常困难, 4: 困难, 3: 中等, 2: 简单, 1: 非常简单}将本菜自动归类为中等。这正是文档写法即元数据来源的典型例子——菜谱作者无需额外填写字段难度标签直接从正文中提取。2.2 必备原料和工具原文完整清单如下类别原料/工具主料牛柳或牛肩肉配菜青椒、小米椒香料孜然颗粒 粉调料生抽酱油、油、盐辅料淀粉、葱工具捣药罐可选几个值得注意的选料要点牛肉部位优先选用牛柳里脊或牛肩肉肉质嫩、纤维短适合快速煸炒孜然形态明确标注颗粒 粉颗粒孜然经捣碎后香气更浓、风味更足这也是后续步骤中要用捣药罐的原因捣药罐为可选工具原文说明时间紧张可跳过捣碎步骤为新手留出了简化路径。2.3 计算按人份的用量配比原文给出了精确的每份用量这是这份菜谱区别于普通菜谱的关键设计——用量全部按人份公式化原料用量/人牛肉250 g青椒2 颗每颗约 100 g孜然20 g小米椒3 颗每颗约 5 g生抽酱油20 ml淀粉10 g油15 ml盐3 g葱1 根每根约 20 g文档说明使用上述条件计算出计划使用的原材料比例依口味调整。也就是说做 2 人份时将所有用量乘以 2 即可同时盐、小米椒等可按个人口味增减。注原文档将青椒、葱的单位写作颗结合上下文理解青椒按颗计、葱按根计人均量分别约为 200 g 与 20 g可按此基准按人头换算。2.4 操作完整制作步骤原文共 8 步完整继承如下首先将小米椒切碎和孜然粒一起放入捣药罐捣碎成颗粒这样更入味。如果时间紧张可跳过捣碎步骤青椒切头去籽喜欢辣的可不去籽切成丝。葱切段牛肉提前解冻过一遍水洗干净晾干或用厨用纸吸干将牛肉顺着纹理切成片然后进行腌肉加入生抽、淀粉、油均匀搅拌静置 30 分钟腌肉是嫩肉的关键参见下文 2.5热锅下油放入葱爆出香味后放入腌好的牛肉煸炒牛肉变色后均匀放入孜然辣椒颗粒并炒熟然后下入青椒丝断生后放盐大火炒 1 分钟后关火再翻炒 30 秒保证受热均匀即可出锅。步骤中的三个关键技术点值得展开顺纹理切片与常规逆纹切肉不同本菜采用顺纹理切片配合淀粉上浆与快速煸炒可保持牛肉片形完整、口感嫩滑腌肉 30 分钟生抽提供底味淀粉挂浆锁水油则防止下锅粘连三者缺一不可大火 1 分钟 关火翻炒 30 秒利用锅体余温完成最后加热避免牛肉过老是保证嫩度的收尾技巧。2.5 腌肉技巧的补充说明原文档第 4 步中有一条指向../../tips/learn/学习腌.md的内部链接该路径在当前仓库中并不存在属于原始数据源的断链。为保证本文可读性这里将学习腌的核心思路以文字形式补全腌肉的本质是调味 锁水 防粘三步——先加生抽等液体调料让牛肉入味再加淀粉抓匀形成保护层锁住水分最后淋入少量食用油拌匀防止下锅时互相粘连静置时间建议不少于 30 分钟。这套逻辑与第 4 步的腌肉配方完全一致读者可直接套用。2.6 附加内容原文附加内容一节为空。从 code/C8/rag_modules/generation_integration.py 的提示词设计可以看出系统生成回答时会优先采用原文附加内容中的实用技巧若该节为空则会基于制作步骤自动总结关键要点或直接省略该部分——空小节不会影响 RAG 回答质量。三、RAG 友好的文档结构约定这份菜谱为何这样写如果只看做法这份菜谱是一份合格的家常菜谱但站在 All-in-RAG 项目 C8 章节的角度它的价值在于文档格式本身就是为机器解析设计的。数据准备模块 code/C8/rag_modules/data_preparation.py 中有四处与文档格式深度耦合的设计。3.1 Markdown 标题层级是分块的锚点在_markdown_header_split方法中系统使用MarkdownHeaderTextSplitter并按三级标题分割headers_to_split_on [ (#, 主标题), # 菜品名称 (##, 二级标题), # 必备原料、计算、操作等 (###, 三级标题) # 简易版本、复杂版本等 ] markdown_splitter MarkdownHeaderTextSplitter( headers_to_split_onheaders_to_split_on, strip_headersFalse # 保留标题便于理解上下文 )对孜然牛肉.md应用该分割器后会得到 5 个子块父文档# 孜然牛肉的做法完整菜谱 ├── 子块1主标题 难度评级 ├── 子块2## 必备原料和工具 食材清单 ├── 子块3## 计算 用量配比 ├── 子块4## 操作 制作步骤 └── 子块5## 附加内容这正是 docs/chapter8/02_data_preparation.md 中强调的小块检索大块生成父子文本块架构检索阶段用细粒度的子块如计算子块做精确匹配生成阶段再把完整父文档喂给大模型保证上下文完整。3.2 星级难度标记一行正则提取难度元数据如 2.1 节所述_enhance_metadata用re.search(r★, content)提取连续星号并映射为五档难度。这份文档写★★★系统就自动打上difficulty: 中等标签无需人工维护元数据。3.3 目录路径即分类CATEGORY_MAPPING定义了目录名到分类标签的映射CATEGORY_MAPPING { meat_dish: 荤菜, vegetable_dish: 素菜, soup: 汤品, dessert: 甜品, breakfast: 早餐, staple: 主食, aquatic: 水产, condiment: 调料, drink: 饮品 }孜然牛肉.md所在路径包含meat_dish因此自动获得category: 荤菜元数据。只要新增菜谱时放在正确的分类目录下分类标签就自动生效——这是知识库可扩展性的基础。3.4 文件名即菜名doc.metadata[dish_name] file_path.stem文件名孜然牛肉直接成为菜名元数据供检索回显与列表推荐使用。3.5 用量公式化面向需要多少食材类查询的检索单元计算小节把每种原料换算为X g/人本质上是为用量类查询准备的独立检索单元。当用户问两人份孜然牛肉需要多少牛肉时混合检索能精准命中子块 3再由父子映射回溯到完整文档生成带完整上下文与步骤的回答。四、文档在 RecipeRAG 流水线中的完整流转从启动到回答这份文档经历以下完整链路对应 code/C8/main.py 中RecipeRAGSystem的初始化与问答流程4.1 数据加载与元数据增强DataPreparationModule.load_documents()用rglob(*.md)递归加载全部菜谱为每个父文档基于相对路径生成确定性的parent_idMD5 哈希再经_enhance_metadata注入category、dish_name、difficulty三项核心元数据。孜然牛肉.md加载后的元数据形如source: .../dishes/meat_dish/孜然牛肉.md parent_id: md5(相对路径) doc_type: parent category: 荤菜 dish_name: 孜然牛肉 difficulty: 中等4.2 结构感知分块按 3.1 节的标题层级切分为 5 个子块每个子块继承父文档元数据并新增chunk_id、parent_id、doc_type: child、chunk_index同时写入parent_child_map建立映射。4.3 向量化索引构建code/C8/rag_modules/index_construction.py 使用HuggingFaceEmbeddings默认模型BAAI/bge-small-zh-v1.5CPU 推理、向量归一化将子块编码后存入 FAISS并可保存/加载本地索引./vector_index。4.4 混合检索与元数据过滤code/C8/rag_modules/retrieval_optimization.py 同时启用 FAISS 向量检索与 BM25 关键词检索再用 RRFReciprocal Rank Fusion公式1/(krank1)默认 k60融合重排。此外code/C8/main.py 的_extract_filters_from_query会从问题中提取分类与难度关键词调用metadata_filtered_search做条件过滤——例如问题含荤菜或中等时会自动叠加对应过滤。4.5 生成与父子回溯code/C8/rag_modules/generation_integration.py 的query_router先将问题路由为list/detail/general三类对detail类问题get_parent_documents依据parent_id将命中的多个子块智能去重合并为完整菜谱匹配子块越多的菜谱排序越靠前再以分步骤指导提示词含菜品介绍、所需食材、制作步骤、制作技巧四段结构生成回答。五、实战验证以孜然牛肉为查询的端到端流程假设运行 code/C8/main.py 的交互式问答需提前配置MOONSHOT_API_KEY环境变量模型默认kimi-k2-0711-previewtemperature0.1max_tokens2048提问孜然牛肉怎么做完整链路为查询路由query_router判断为detail查询重写问题含具体菜名属于具体明确的查询保持原查询不变见query_rewrite的分析规则混合检索hybrid_search(孜然牛肉怎么做, top_k3)在子块粒度上执行 FAISS BM25 融合检索大概率命中操作与主标题子块父子回溯get_parent_documents将命中的子块合并去重输出完整文档孜然牛肉分步生成generate_step_by_step_answer依据上下文_build_context会带上菜名、分类、难度元数据生成包含食材清单与分步做法的回答。对推荐几道中等难度的荤菜这类问题系统则走list路由并结合_extract_filters_from_query提取的{category: 荤菜, difficulty: 中等}过滤条件直接返回菜名列表——孜然牛肉.md的元数据正是这类推荐功能的支撑。六、小结用同样的文档规范继续扩充知识库通过拆解孜然牛肉.md这份菜谱文档可以总结出 RecipeRAG 知识库数据的四条写作规范结构规范用#/##/###三级标题组织做法/原料/计算/操作/附加内容让分块器能按语义切分元数据规范难度用连续星号标注、分类靠目录名表达、菜名用文件名承载三者均零成本自动提取量化规范用量按人份公式化既方便人类换算也形成了独立的用量子块支撑精确检索扩展规范新增菜谱只需按分类放入dishes/分类/目录并遵循上述结构即可被系统自动加载、分块、索引无需改动任何代码。本文档相关源码与说明均可在仓库中进一步研读code/C8/rag_modules/data_preparation.py加载/分块/去重、code/C8/rag_modules/index_construction.py向量索引、code/C8/rag_modules/retrieval_optimization.py混合检索与 RRF 重排、code/C8/rag_modules/generation_integration.py路由与生成以及配套教程 docs/chapter8/02_data_preparation.md。理解了文档与代码的这套约定你就能在自己的 RAG 项目中复刻出同样高质量的知识库数据管线。赞分享教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载相关推荐从「咖喱肥牛」菜谱看 all-in-rag 食谱知识库数据设计、结构分块与 RAG 检索实战从「咖喱肥牛」菜谱看 all in rag 食谱知识库数据设计、结构分块与 RAG 检索实战 在 Datawhale 的 all in rag 开源仓库中第教程人工智能大模型RAGDatawhale All-in-RAG 食谱知识库实战台式卤肉饭完整做法指南Datawhale All in RAG 食谱知识库实战台式卤肉饭完整做法指南 导读 本文以 Datawhale All in RAG 项目 C8 章节尝尝教程人工智能大模型RAGall-in-rag 食谱知识库实战家常混合烤鱼完整做法详解all in rag 食谱知识库实战家常混合烤鱼完整做法详解 本篇文章以 all in rag https://link.gitcode.com/i/94a3教程人工智能大模型RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考