- 教程
- 人工智能
- 大模型
- RAG
【免费下载链接】all-in-rag
🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/
芥末罗氏虾是一道以罗氏虾为主料、以青芥末与黄油为核心调味灵魂的家常菜,鲜香入味、芥末风味十足、吃完吮指,且操作十分简单。在本仓库的 Datawhale「尝尝咸淡」食谱 RAG 系统(C8 项目)中,这道菜谱以 Markdown 文档形式存放于 data/C8/cook/dishes/meat_dish/芥末罗氏虾/芥末罗氏虾.md,是知识库中"荤菜"分类、难度"中等"的一篇典型结构化菜谱。读完本文,你将掌握这道菜从食材配比到出锅的全部操作细节,同时理解该菜谱在 RAG 流水线中如何被加载、抽取元数据、按 Markdown 标题分块,并最终通过查询路由、混合检索与分步生成,被 LLM 以结构化菜谱答案的形式回答给用户。
本文以芥末罗氏虾菜谱为实例,结合 code/C8 的源码实现,讲解"菜谱文档 → 元数据增强 → 结构化分块 → 向量索引 → 混合检索 → 生成"的完整链路。
一、菜品概述与难度定位
芥末罗氏虾本菜品可替换成任意虾种类,包括但不限于基围虾、花虾、黑虎虾等,替换后风味依然成立。预估烹饪难度为★★★(三星,属于中等难度)。
在 RAG 系统中,难度星级不是摆设。从 data_preparation.py 的源码可以看到,系统使用正则表达式re.search(r'★+', content)精确匹配文档中的连续星号数量,并建立映射关系:
| 星级数量 | 难度标签 |
|---|---|
| ★★★★★(5 个) | 非常困难 |
| ★★★★(4 个) | 困难 |
| ★★★(3 个) | 中等 |
| ★★(2 个) | 简单 |
| ★(1 个) | 非常简单 |
因此芥末罗氏虾(★★★)在知识库中被自动标记为"中等"难度,DIFFICULTY_LABELS即['非常简单', '简单', '中等', '困难', '非常困难'](见 data_preparation.py)。当用户提问"有哪些中等难度的荤菜"时,系统会据此做元数据过滤检索。
二、必备原料与工具
- 罗氏虾(可替换为基围虾、花虾、黑虎虾等任意虾类)
- 蒜
- 青芥末
- 生抽
- 生粉
- 胡椒粉
- 白糖
- 蚝油
- 盐
- 小米辣(不吃辣可不放或替换成红菜椒)
- 黄油
- 食用油
三、用量计算(每份约 2 人份)
| 原料 | 用量 | 用途说明 |
|---|---|---|
| 罗氏虾 | 250g | 主料 |
| 蒜 | 1-2 个 | 蒜蓉爆香 |
| 青芥末 | 20g | 用于碗汁,提供灵魂风味 |
| 生粉 | 10g | 用于碗汁,起芡增稠 |
| 生抽 | 30g | 用于碗汁,咸鲜打底 |
| 胡椒粉 | 5g | 用于碗汁,去腥提香 |
| 白糖 | 3g | 用于碗汁,提鲜平衡辣味 |
| 蚝油 | 15g | 用于碗汁,增鲜挂汁 |
| 盐 | 3g | 用于碗汁,基础调味 |
| 小米辣 | 1-2 个 | 增辣配色(可选) |
| 黄油 | 20g | 赋予奶香与焦香 |
| 食用油 | 80ml | 煎虾用油 |
量化配比是这份菜谱最实用的部分:所有调料(芥末、生抽、生粉、胡椒粉、白糖、蚝油、盐)统一收进"碗汁",一次兑好、一次下锅,既保证味道均衡,也让新手操作更从容。
四、详细操作步骤
1. 处理虾
- 将虾从背部切开,去除虾线和沙袋。也可从腹部切开——炸出来会胀开,成菜比较漂亮。
- 用清水洗干净,控干水分后可拍上生粉,也可不拍。拍粉的目的是煎炸时表面更酥脆、汁水更易挂上。
2. 蒜蓉及碗汁处理
- 将 2 颗大蒜切成蒜末。
- 准备碗汁:放入生抽、蚝油、白糖、胡椒粉、盐,依据个人口味挤入芥末,加清水稀释后加入生粉化开。芥末的用量可按个人耐受度调整,青芥末的辛辣会在加热后柔和许多。
3. 炒制过程
- 锅热倒入食用油,大概能覆盖锅底。
- 放入控干水分的罗氏虾,慢慢煎制。
- 虾油煎出来后(判断标准:锅中出现大量气泡),加入准备好的蒜蓉及小米辣。
- 闻到蒜蓉的香味后,加入黄油。
- 黄油融化后翻拌均匀,加入准备好的碗汁。
- 盖锅盖焖煮2 分钟,待汤汁浓稠后出锅。
4. 注意事项
- 黄油入锅后不宜炸制太久,融化翻拌均匀即可烹入碗汁。黄油含有乳固体,长时间高温会焦化发苦,破坏芥末风味的清爽感。
五、从菜谱文档到 RAG 知识库:源码级链路解析
这份 Markdown 菜谱不只是给人看的,它是 code/C8 食谱 RAG 系统(主入口 main.py)知识库中的一份"父文档"。整体链路如下:
5.1 文档加载与元数据增强
DataPreparationModule.load_documents 会递归扫描data_path(默认../../data/C8/cook,见 config.py)下所有*.md文件,按 UTF-8 读取原始 Markdown 内容,并用文件相对路径的 MD5 生成确定性parent_id。随后 _enhance_metadata 对每篇文档自动补充三类元数据:
- 分类(category):通过路径目录名匹配
CATEGORY_MAPPING,芥末罗氏虾位于dishes/meat_dish/目录下,因此被标记为"荤菜"; - 菜名(dish_name):取文件名主干,即"芥末罗氏虾";
- 难度(difficulty):按上文星级映射解析为"中等"。
5.2 Markdown 结构感知分块
_markdown_header_split 使用MarkdownHeaderTextSplitter,按#、##、###三级标题分割(strip_headers=False保留标题便于 LLM 理解上下文),并建立"子块 → 父文档"的parent_child_map映射。芥末罗氏虾这篇文档会被切分为"必备原料和工具""计算""操作""附加内容"等结构块,每个子块携带chunk_id、parent_id、chunk_index等元数据,供后续子块检索后回取完整父文档(get_parent_documents会按命中块数去重排序,见 data_preparation.py)。
5.3 向量索引与混合检索
分块后的子文档由 IndexConstructionModule 使用BAAI/bge-small-zh-v1.5嵌入模型(normalize_embeddings=True)构建 FAISS 向量索引。回答问题时,RetrievalOptimizationModule.hybrid_search 会同时执行向量检索与 BM25 检索,并用RRF(Reciprocal Rank Fusion,k=60)融合重排,最终取top_k=3(默认配置见 config.py)个子块。若用户提问中包含"荤菜""中等"等关键词,main.py 的 _extract_filters_from_query 还会自动附加元数据过滤条件,走metadata_filtered_search精确圈定菜谱范围。
5.4 查询路由与分步生成
GenerationIntegrationModule 通过query_router将问题分为三类:list(推荐菜品)、detail(具体做法)、general(一般问题)。当你问"芥末罗氏虾怎么做"时,系统判定为detail类型,检索命中本菜谱后,会调用generate_step_by_step_answer使用"菜品介绍 / 所需食材 / 制作步骤 / 制作技巧"的分步模板生成答案——这个模板结构(见 generation_integration.py)与本菜谱"必备原料 → 计算 → 操作 → 附加内容"的文档骨架天然对应,LLM 会优先采用原文中的实用技巧(如"黄油不宜久炸")。
六、动手运行与提问示例
在设置好MOONSHOT_API_KEY环境变量后,从code/C8目录运行python main.py即可启动交互式问答(参考 main.py)。针对芥末罗氏虾,可以尝试以下问题:
- "芥末罗氏虾怎么做?" →
detail路由,分步指导; - "有哪些中等难度的荤菜?" → 元数据过滤 + 列表推荐;
- "推荐几个简单的水产菜" → 分类与难度双重过滤。
系统会依次打印查询路由类型、检索到的文档块(如芥末罗氏虾(操作))、匹配文档名称,再以流式或整段方式输出 LLM 生成的菜谱回答。
七、总结
芥末罗氏虾是一份结构规范、量化清晰、步骤可复现的中等难度荤菜菜谱。它在 Datawhale all-in-rag 的 C8 食谱 RAG 系统中不仅是一份烹饪文档,更是一个可被自动标注分类与难度、按 Markdown 标题结构化分块、经混合检索与查询路由后由 LLM 精准作答的知识库单元。理解了这篇菜谱从文件到答案的全链路,你就掌握了该项目"数据准备 → 索引构建 → 检索优化 → 生成集成"四模块的核心用法,可以继续用同一套流程探索仓库中其余数百份菜谱(如 干煸仔鸡、蒜蓉虾 等),或参考 chapter8 文档 了解该系统的完整架构设计。
- 教程
- 人工智能
- 大模型
- RAG
【免费下载链接】all-in-rag
🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/
相关推荐
芥末黄油罗氏虾全解析:从厨房火候细节到 all-in-rag 菜谱知识库的构建与检索实战
芥末黄油罗氏虾全解析:从厨房火候细节到 all in rag 菜谱知识库的构建与检索实战 本篇文章以 all in rag 仓库 code/C8 https:/
教程人工智能大模型RAGDatawhale all-in-rag 食谱知识库实战:从「美式炒蛋」看结构化食谱的 RAG 检索与生成
Datawhale all in rag 食谱知识库实战:从「美式炒蛋」看结构化食谱的 RAG 检索与生成 导读 本文以 all in rag 项目 C8 章食
教程人工智能大模型RAG小龙虾菜谱的结构化数据与 RAG 智能问答:all-in-rag 菜品知识库实战剖析
小龙虾菜谱的结构化数据与 RAG 智能问答:all in rag 菜品知识库实战剖析 本篇技术指南以 小龙虾菜谱 https://link.gitcode.co
教程人工智能大模型RAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考