news 2026/9/24 9:06:20

Datawhale all-in-rag 实战:芥末罗氏虾食谱的 RAG 结构化知识库构建与智能问答

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Datawhale all-in-rag 实战:芥末罗氏虾食谱的 RAG 结构化知识库构建与智能问答
  • 教程
  • 人工智能
  • 大模型
  • RAG

【免费下载链接】all-in-rag

🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/

项目地址:https://gitcode.com/datawhalechina/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. 炒制过程

  1. 锅热倒入食用油,大概能覆盖锅底。
  2. 放入控干水分的罗氏虾,慢慢煎制。
  3. 虾油煎出来后(判断标准:锅中出现大量气泡),加入准备好的蒜蓉及小米辣。
  4. 闻到蒜蓉的香味后,加入黄油。
  5. 黄油融化后翻拌均匀,加入准备好的碗汁。
  6. 盖锅盖焖煮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_idparent_idchunk_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/

项目地址:https://gitcode.com/datawhalechina/all-in-rag
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 9:06:06

企业 AI 人才荒怎么办?创意岛 AI 进化营亮出破局之策

企业创始人、董事长、总经理们,你们是否正为 AI 人才短缺而烦恼?很多老板以为 AI 人才培养就是多招几个会用软件的人,其实真正需要的是能将 AI 技术深度应用到企业业务中的复合型人才。当下,企业 AI 人才培养已成为众多企业在 AI …

作者头像 李华