all-in-rag 实战解析:从“太阳蛋“食谱看 RAG 知识库的构建与智能问答全流程

发布时间:2026/9/23 23:40:20

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本篇文章以 all-in-rag 仓库 C8 食谱 RAG 系统知识库中的一份真实数据源——太阳蛋.md——为主线完整复现其食谱内容并深入剖析这份 Markdown 文档在 code/C8 完整 RAG 流水线中如何被加载、如何被元数据增强、如何被结构分块、如何被检索、如何被生成回答的全过程。读完本文你既能照做一份零失败的微波炉太阳蛋也能掌握一套可直接复用的Markdown 结构化知识库 → 向量索引 → 混合检索 → 多模式生成的 RAG 工程实现。一、太阳蛋食谱一份典型的 Markdown 结构化数据源在 all-in-rag 的 C8 食谱 RAG 系统中data/C8/cook 是整个知识库的原始数据目录按分类/菜品/的目录层级组织如breakfast/太阳蛋.md、meat_dish/红烧肉.md。太阳蛋.md 就是其中一份标准的早餐分类食谱其内容结构完整、难度标识规范非常适合作为理解 RAG 数据准备的样例。原文内容如下1.1 必备原料和工具鸡蛋盐油分可控火候微波炉或不可控火候微波炉定义和分辨方式请见附加内容筷子或牙签1.2 用量计算鸡蛋的用量为 1 个。盐的用量为 1 g 每个鸡蛋。油的用量为 5 mL 每个鸡蛋。使用上述条件计算出计划使用的原材料比例即按份数线性缩放即可做 N 份则鸡蛋 N 个、盐 N g、油 5N mL。1.3 操作步骤可控火候微波炉准备一个小碗倒入在上一步计算好的油撒盐搅拌均匀。倾斜碗使油沾在碗表面。取出一个鸡蛋打入小碗。蛋黄表面戳孔。牙签戳 5 个或筷子戳 1 个。放入微波炉中火 3 分钟。不可控火候微波炉准备一个小碗倒入在上一步计算好的油撒盐搅拌均匀。倾斜碗使油沾在碗表面。取出一个鸡蛋打入小碗。蛋黄表面戳孔。牙签戳 5 个或筷子戳 1 个。放入微波炉1 分钟。循环执行只要太阳蛋还未大面积呈固体状就继续用微波炉加热 30 秒。1.4 附加内容循环执行只要太阳蛋的熟度不符合个人口味就继续用微波炉加热 1 分钟。不可控火候微波炉定义即无法控制火候、仅能控制时长的微波炉。辨别方法若在微波炉操作面板上无法找到小火、中火、大火等字样即为不可控火候微波炉。可控火候微波炉定义即既能控制火候又能控制时长的微波炉。辨别方法若在微波炉操作面板上能找到小火、中火、大火等字样即为可控火候微波炉。关键技巧提示蛋黄表面戳孔是防爆核心——蛋黄在微波加热时内部水分汽化会产生高压若不戳孔极易炸开同时先让油盐在碗壁形成薄油层能有效避免鸡蛋粘碗。这两条经验正是食谱中可被检索模块精确命中的制作技巧型内容。二、食谱文档如何进入 RAG 知识库数据准备模块在 all-in-rag 的 code/C8/rag_modules/data_preparation.py 中DataPreparationModule负责将data/C8/cook下数百份食谱文档含太阳蛋.md转化为带丰富元数据的父子文档结构。2.1 批量加载 Markdown 文件load_documents()通过Path(data_path).rglob(*.md)递归扫描整个知识库目录直接以 UTF-8 读取原文并保持 Markdown 格式为每份父文档生成确定性的parent_id基于相对路径的 MD5同时记录source与doc_type: parent标记。2.2 元数据增强太阳蛋的身份证_enhance_metadata()会为太阳蛋文档自动补全三类核心元数据元数据字段提取逻辑太阳蛋文档的取值category从文件路径匹配CATEGORY_MAPPING如breakfast→ 早餐早餐dish_name直接取文件名 stem太阳蛋difficulty用正则★统计连续星号数量映射 1~5 星难度简单文档标记为 ★★其中难度映射表定义在源码中{5: 非常困难, 4: 困难, 3: 中等, 2: 简单, 1: 非常简单}。太阳蛋文档头部预估烹饪难度★★正是这条规则的数据来源也就是说——即使不改动任何代码只要在食谱里按规范标注星号系统就能自动识别难度。2.3 Markdown 结构感知分块_markdown_header_split()使用 LangChain 的MarkdownHeaderTextSplitter按#主标题、##二级标题、###三级标题三级结构对文档分块并设置strip_headersFalse保留标题上下文。太阳蛋文档经此流程会被拆分为典型的父子结构太阳蛋.md父文档parent_id 唯一标识 ├── 子块1# 太阳蛋的做法 难度评级 ├── 子块2## 必备原料和工具 ├── 子块3## 计算用量配比 ├── 子块4## 操作可控火候/不可控火候分支 └── 子块5## 附加内容微波炉类型定义每个子块都会继承父文档的category、difficulty、dish_name并新增chunk_id、parent_id、doc_type: child、chunk_index等字段同时写入parent_child_map维护父子映射——这正是小块检索、大块生成架构的基础。分块的价值在于用户问做太阳蛋需要什么食材时可精确命中子块2而生成回答时再通过get_parent_documents()将命中子块对应的完整父文档含全部操作步骤交给 LLM保证上下文不残缺。三、索引构建与混合检索让太阳蛋被精确召回3.1 向量化与 FAISS 索引code/C8/rag_modules/index_construction.py 中的IndexConstructionModule使用HuggingFaceEmbeddings默认模型BAAI/bge-small-zh-v1.5normalize_embeddingsTrue将每个子块编码为向量并构建 FAISS 索引save_index()/load_index()实现了索引缓存机制首次构建后后续启动可直接秒级加载。3.2 双路混合检索与 RRF 重排code/C8/rag_modules/retrieval_optimization.py 的RetrievalOptimizationModule同时设置了两路检索器向量检索vectorstore.as_retrieverk5基于语义相似度能理解微波炉做早餐怎么煎个蛋等同义表达BM25 检索BM25Retriever.from_documentsk5基于关键词精确匹配能稳定命中太阳蛋戳孔等专名。hybrid_search()调用_rrf_rerank()用 RRFReciprocal Rank Fusion融合两路结果每个文档得分 Σ 1 / (k rank 1)默认k60综合排名后取top_k配置文件默认 3。此外metadata_filtered_search()支持按category、difficulty元数据过滤——例如查询推荐几道简单的早餐时系统会自动从问题中提取过滤条件见 main.py 的_extract_filters_from_query只检索早餐简单的文档块太阳蛋正是此类场景的理想命中对象。四、生成集成从检索结果到结构化回答code/C8/rag_modules/generation_integration.py 的GenerationIntegrationModule负责最后一公里。查询路由query_router()用 LLM 将问题分类为list要菜名推荐、detail要具体做法、general一般性问题三类查询重写对非list类查询query_rewrite()会智能改写模糊表达如想做个蛋→更利于检索的表达明确查询则保持原样父子文档聚合get_parent_documents()按子块命中次数统计父文档相关性并智能去重多模式生成detail类问题走generate_step_by_step_answer()按菜品介绍/所需食材/制作步骤/制作技巧的结构化提示词输出分步指导general类问题走generate_basic_answer()输出常规回答list类问题由generate_list_answer()直接返回去重后的菜名列表流式输出generate_step_by_step_answer_stream()/generate_basic_answer_stream()基于 LCEL 的chain.stream()实现逐字输出配合 main.py 中print(chunk, end, flushTrue)呈现打字机效果。若用户问太阳蛋怎么做链路将呈现为查询路由判定detail→ 重写后混合检索命中太阳蛋相关子块 → 聚合完整父文档 → 分步指导模式生成包含原料配比与双火候操作分支的详细回答。五、一键运行把太阳蛋喂给 RAG 系统完整系统由 code/C8/main.py 的RecipeRAGSystem协调initialize_system()按依赖顺序初始化数据准备、索引构建、生成集成模块build_knowledge_base()优先加载已保存索引run_interactive()提供命令行交互问答。运行前提按 code/C8/requirements.txt 安装依赖langchain0.3.26、faiss-cpu、sentence-transformers、rank_bm25 等设置环境变量MOONSHOT_API_KEY默认 LLM 为kimi-k2-0711-preview见 code/C8/config.py默认数据路径../../data/C8/cook与嵌入模型BAAI/bge-small-zh-v1.5均已在 code/C8/config.py 中配置好top_k3、temperature0.1、max_tokens2048可按需调整。# 在 code/C8 目录下 export MOONSHOT_API_KEYyour_api_key python main.py启动后即可交互提问例如太阳蛋怎么做detail 分步指导、推荐几道简单的早餐list 元数据过滤。整体架构与运行说明还可参考 docs/chapter8/01_env_architecture.md各模块实现细节见 docs/chapter8/02_data_preparation.md、docs/chapter8/03_index_retrieval.md、docs/chapter8/04_generation_sys.md。六、小结一份看似简单的太阳蛋食谱在 all-in-rag 的 C8 系统中完整经历了 RAG 的四大环节数据准备目录路径推断分类、星号正则识别难度、三级标题结构分块→索引构建BGE 向量化 FAISS 缓存→混合检索向量语义 BM25 关键词 RRF 融合 元数据过滤→生成集成查询路由、智能重写、父子文档聚合、多模式与流式输出。掌握这条链路你就能将任何规范化的 Markdown 文档集快速改造为可问答、可推荐的领域知识库——这也正是 all-in-rag 项目从文档到生产级 RAG的核心工程价值所在。【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址: https://gitcode.com/datawhalechina/all-in-rag创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/23 23:40:20

LSTM气温预测实战:Python爬虫到Keras建模完整项目解析

简介:基于LSTM的气温预测及可视化项目,提供完整Python源码、气温数据集与详细说明文档,面向计算机相关专业毕业设计、课程设计及LSTM入门学习者,覆盖气温预测从数据采集到结果展示的全流程。压缩包共16个文件:8个py脚本…

2026/9/23 23:35:17

Jev-TypeSafe-ai系统一模型构建Skill

名称TypeSafe 系统一模型构建开源协议MIT描述> 使用 TypeSafe 构建 AI 驱动的软件:小单元的人工智能能力, 可以像编程原语一样使用。它的 System One 模型,包括 Jev, 将自然语言和应用状态转化为代码可以组合的类型化判断和概率…

2026/9/24 0:40:22

Java服务端发丝级抠图:ONNX Runtime部署matting模型实战

简介:该资源是一套基于ONNX模型的发丝级人像抠图与背景替换Java实现源码,面向希望将深度学习模型集成到Java应用中的开发者,以及研究图像分割与高精度抠图的技术人员。项目以Java为核心语言,借助ONNX实现跨框架模型加载与推理&…

2026/9/24 0:35:22

细粒度用户评论情感分析实战:BiGRU、RCNN与Capsule模型对比

简介:基于Python的细粒度用户评论情感分析设计与实现,是一套面向NLP开发者和数据分析师的完整工程资源。其围绕用户评论情感识别场景,系统覆盖文本清洗、分词、情感词典构建、特征工程以及规则/机器学习/深度学习等建模方法,适合用…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码