ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

all-in-rag 食谱数据解析:雪克杯法柠檬水的标准化配方与 RAG 分块实践

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本文以「尝尝咸淡」RAG 实战项目data/C8饮品分类下的 柠檬水菜谱 为蓝本完整还原其结构化配方与操作流程并结合 数据准备模块源码 剖析这份菜谱是如何被元数据增强、难度解析与 Markdown 结构分块的。读完本文你既能按图索骥做出一杯标准雪克杯柠檬水也能理解这类半结构化菜谱文档在 RAG 系统中从「原始文件」到「可检索分块」的完整链路。一、这份菜谱在项目中的位置在 all-in-rag 仓库中「尝尝咸淡」RAG 系统的食谱语料库位于data/C8/cook/按dishes/下的分类目录组织如aquatic/水产、meat_dish/荤菜、drink/饮品等。本文聚焦的柠檬水菜谱存放于菜谱文档data/C8/cook/dishes/drink/柠檬水/柠檬水.md同目录成品图data/C8/cook/dishes/drink/柠檬水/柠檬水.jpg对照 数据准备模块 中维护的CATEGORY_MAPPINGCATEGORY_MAPPING { meat_dish: 荤菜, vegetable_dish: 素菜, soup: 汤品, dessert: 甜品, breakfast: 早餐, staple: 主食, aquatic: 水产, condiment: 调料, drink: 饮品 }drink目录即被映射为「饮品」分类标签柠檬水目录名则成为该文档的dish_name元数据。这意味着当用户向系统提问「推荐几款简单的饮品」时这份菜谱会因其分类标签与难度标签被优先召回。二、菜谱原文完整收录为便于对照先完整收录原文档核心内容略有排版整理柠檬水的做法预估烹饪难度★必备原料和工具原料柠檬、果蜜、冰可选工具雪克杯计算一杯分量约 500 毫升柠檬 40~45 克果蜜 40~45 克冰几块可选操作称 40~45 克柠檬放入雪克杯中雪克杯盖盖子锤大约 10 次加入果蜜 40~45 克补水摇晃均匀最后根据喜好加冰这份菜谱虽然篇幅简短但严格遵循了项目的统一模板骨架难度评级 → 必备原料和工具 → 计算 → 操作 → 附加内容。正是这种高度规整的结构使其天然契合 Markdown 结构分块的检索策略。三、配方参数逐项拆解3.1 难度评级★ 与源码解析逻辑「预估烹饪难度★」中单个星号表示非常简单。这一评级并非人工标记的随意文本而是会被 数据准备模块 用正则自动解析成结构化标签star_match re.search(r★, content) if star_match: star_count len(star_match.group()) difficulty_map {5: 非常困难, 4: 困难, 3: 中等, 2: 简单, 1: 非常简单} doc.metadata[difficulty] difficulty_map.get(star_count, 未知)一个 ★ 对应非常简单。用户在查询「推荐一个非常简单的饮品」时系统即可依据该元数据做难度过滤源码中的filter_documents_by_difficulty方法。3.2 计算以「杯」为单位的一人份比例原文档明确了**一杯分量约 500 毫升**下的用量基准原料用量说明柠檬40~45 克放入雪克杯后捶打释放风味果蜜40~45 克与柠檬等量平衡酸度冰几块可选最后按喜好添加需要说明的是「果蜜」是饮品店常用的糖浆类甜味剂文中以重量而非体积计量40~45 克。由于果蜜密度高于水若家中无电子秤可按比例估算为约 2~3 汤匙量级再以补水后的口味微调。整个配方遵循「酸甜平衡」的基本逻辑柠檬提供酸与清香果蜜提供甜味冰负责降温与稀释三者比例约 1:1是极简的雪克杯饮品基准式。3.3 操作流程的技术要点称量入杯柠檬 40~45 克去皮后放入雪克杯带皮柠檬捶打会使果皮精油渗出带来微苦感是否带皮可按口味取舍。捶打约 10 次加盖捶打的作用是破坏柠檬果肉细胞释放汁液与香气次数控制在 10 次左右即可避免过度捶打带来的涩味。加入果蜜与柠檬等量随后补水——即加入凉白开或直饮水补足至约 500 毫升刻度。摇晃均匀盖紧雪克杯盖上下摇晃使果蜜充分溶解、风味混合。最后加冰冰放在摇晃完成之后避免冰块在摇晃中过度稀释饮品也符合饮品店「后加冰」的操作惯例。四、源码视角这份菜谱如何进入 RAG 索引4.1 加载与元数据增强load_documents 会以rglob(*.md)递归读取data_path下所有 Markdown 文件保持原始格式作为父文档内容并以「相对数据根目录的路径 MD5」生成确定性parent_id。随后_enhance_metadata依据路径中的目录名自动补齐三要素category由drink目录识别为「饮品」dish_name取文件主名柠檬水difficulty由 ★ 数量解析为「非常简单」。4.2 Markdown 结构分块与父子文档柠檬水菜谱严格使用#菜品名与##必备原料和工具 / 计算 / 操作 / 附加内容两级标题恰好命中 _markdown_header_split 中的分割层级配置headers_to_split_on [ (#, 主标题), # 菜品名称 (##, 二级标题), # 必备原料、计算、操作等 (###, 三级标题) # 简易版本、复杂版本等 ]系统会按这些标题把菜谱切成若干子块并建立chunk_id → parent_id的父子映射检索阶段用「计算」「操作」等小粒度子块做向量/关键词匹配以保证精确召回生成阶段则通过 get_parent_documents 回溯到完整的柠檬水菜谱文档保证 LLM 拿到的是「原料 步骤」齐全的上下文——这正是文档章节docs/chapter8/01_env_architecture.md中「小块检索、大块生成」策略的具体落地。4.3 与章节文档的印证仓库 docs/chapter8/01_env_architecture.md 明确指出这类菜谱「结构高度规整、篇幅较短」无需复杂清洗即可直接用于 RAG 构建。柠檬水这份 35 行左右的菜谱正是典型样本它同时具备分类维度饮品、难度维度非常简单与结构维度固定的标题骨架是演示元数据过滤与结构分块组合检索的理想数据。五、小结以「雪克杯法柠檬水」为代表的菜谱文档浓缩了「尝尝咸淡」RAG 系统的数据设计要点模板统一难度 → 原料工具 → 计算 → 操作 → 附加内容的固定骨架保证了结构分块的稳定性元数据丰富目录名即分类、星号即难度源码正则与路径解析即可零标注产出可过滤标签父子文档配合短小菜谱既可按标题细分成检索子块也能整篇回溯为完整上下文兼顾精确性与完整性。对读者而言照此配方可在家复刻一杯 500 毫升的雪克杯柠檬水对开发者而言这份菜谱是理解 all-in-rag 项目「数据准备 → 索引构建 → 检索生成」全链路的最短路径样例。仓库中同目录下的 饮品分类 还有奶茶、冰粉、金汤力等 20 余个同类文档可作为批量验证分块与检索效果的扩展语料。【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址: https://gitcode.com/datawhalechina/all-in-rag创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表