教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载话梅煮毛豆是一道酸甜可口、烹饪难度仅 ★★ 的简易素菜它不仅是餐桌上的开胃小食更是 all-in-rag 项目第八章节「尝尝咸淡 RAG 系统」知识库中的一份典型结构化数据样本。本文以这份菜谱文档为解剖对象完整保留其原料、用量与操作细节同时结合仓库中 data_preparation.py、index_construction.py、retrieval_optimization.py、generation_integration.py 等源码讲清楚一份菜谱从Markdown 文件变成可被检索、可被引用的知识库条目的完整链路读完即可在自己的数据上复现这套流程。一、先看数据源话梅煮毛豆这份菜谱长什么样关联文档位于 data/C8/cook/dishes/vegetable_dish/话梅煮毛豆/话梅煮毛豆.md同目录还存放了成品图1.jpeg。其原文内容如下# 话梅煮毛豆的做法 酸甜可口、营养价值高的一种简易美食 预估烹饪难度★★ ## 必备原料和工具 * 毛豆 * 话梅 * 食用盐 ## 计算 每份 * 毛豆 300 g * 话梅 6 颗 * 食用盐 2 g ## 操作 * 清水加入食用盐毛豆浸泡 15 分钟 * 加入开水倒入毛豆、话梅水煮 20-30 分钟 * 起锅开吃 ## 附加内容从 RAG 数据工程的角度看这份文档具备三个对后续处理至关重要的结构特征目录即分类文件存放在vegetable_dish/目录下这一路径信息可以直接推导出菜品分类素菜标题即结构文档使用#、##两级标题组织简介 → 原料 → 计算 → 操作 → 附加内容天然适配按标题切块星级即难度预估烹饪难度★★中的连续星号数量可直接映射为难度等级。这也是 why 这份菜谱能够成为知识库一员的关键——它不是自由文本而是遵循了统一模板的结构化数据。仓库中 data/C8/cook 下所有菜谱荤菜、素菜、汤品、甜品等都遵循同一套写法使得后面的元数据增强与分块逻辑可以无差别批量处理。二、文档加载话梅煮毛豆如何进入 RAG 系统数据准备模块 data_preparation.py 的DataPreparationModule是整个链路的入口其核心方法是load_documents()data_preparation.pyfor md_file in data_path_obj.rglob(*.md): with open(md_file, r, encodingutf-8) as f: content f.read() # 基于数据根目录的相对路径生成确定性 parent_id relative_path Path(md_file).resolve().relative_to(data_root).as_posix() parent_id hashlib.md5(relative_path.encode(utf-8)).hexdigest() doc Document( page_contentcontent, metadata{source: str(md_file), parent_id: parent_id, doc_type: parent} )几个实现细节值得注意rglob(*.md)递归扫描只要数据目录下存在.md文件就会被加载话梅煮毛豆的路径dishes/vegetable_dish/话梅煮毛豆/话梅煮毛豆.md正在扫描范围内保持原始 Markdown 格式直接以 UTF-8 读取全文存入page_content不做过早的文本清洗把结构化信息保留给后续分块环节确定性父文档 IDparent_id由文件相对路径做 MD5 生成同一份文件每次构建索引得到的 ID 一致这为索引缓存复用与父子文档关联提供了稳定锚点doc_type: parent标记完整菜谱为父文档与后续切出的子块doc_type: child区分。在 main.py 的build_knowledge_base()中加载文档后紧接着调用chunk_documents()完成分块再交给索引构建模块向量化。默认数据路径在 config.py 中定义为data_path: str ../../data/C8/cook相对code/C8目录也就是说整个菜谱知识库的构建并不需要针对单份文档写任何特殊逻辑。三、元数据增强自动认出素菜 / 简单 / 话梅煮毛豆load_documents()加载完每份文档后会调用_enhance_metadata()data_preparation.py做元数据增强这正是话梅煮毛豆被系统理解的三条线索1. 分类从路径推断。模块维护了一张目录英文名到中文分类的映射表CATEGORY_MAPPING { meat_dish: 荤菜, vegetable_dish: 素菜, soup: 汤品, dessert: 甜品, breakfast: 早餐, staple: 主食, aquatic: 水产, condiment: 调料, drink: 饮品 }只要路径片段中出现vegetable_dishmetadata[category]即被标记为素菜。话梅煮毛豆所在的目录恰好命中这一规则。2. 难度从星号提取。源码使用正则re.search(r★, content)匹配连续的星号再通过映射表换算difficulty_map {5: 非常困难, 4: 困难, 3: 中等, 2: 简单, 1: 非常简单}文档中写的是★★因此metadata[difficulty]会被自动判定为简单。这里的星级写法15 星与菜谱模板是强耦合的约定仓库内所有菜谱都遵守该约定难度标签才能批量、稳定地抽取。3. 名称从文件名提取。doc.metadata[dish_name] file_path.stem即话梅煮毛豆。后续无论是main.py打印检索到的菜品名还是生成列表式回答都直接读取这个字段。增强后的元数据具备实际检索价值模块提供了filter_documents_by_category()与filter_documents_by_difficulty()data_preparation.py两个过滤接口而 main.py 的_extract_filters_from_query()会从用户问题中匹配素菜简单等关键词将其转换为元数据过滤条件——这正是推荐几道简单的素菜这类查询能精准圈定话梅煮毛豆的原因。四、Markdown 结构感知分块二级标题切出可检索的子块分块是决定检索精度的关键环节。模块采用 LangChain 的MarkdownHeaderTextSplitter实现结构感知分块data_preparation.pyheaders_to_split_on [ (#, 主标题), # 菜品名称 (##, 二级标题), # 必备原料、计算、操作等 (###, 三级标题) # 简易版本、复杂版本等 ] markdown_splitter MarkdownHeaderTextSplitter( headers_to_split_onheaders_to_split_on, strip_headersFalse # 保留标题便于理解上下文 )strip_headersFalse表示切块后保留标题文本避免子块丢失上下文语义。以话梅煮毛豆为例父文档会被切成如下子块父文档# 话梅煮毛豆的做法完整菜谱 ├── 子块1# 话梅煮毛豆的做法 简介 难度★★ ├── 子块2## 必备原料和工具 毛豆/话梅/食用盐 ├── 子块3## 计算 毛豆 300g / 话梅 6 颗 / 食用盐 2g ├── 子块4## 操作 浸泡15分钟 / 水煮20-30分钟 / 起锅 └── 子块5## 附加内容每个子块会继承父文档的全部元数据并补充chunk_idUUID、doc_type: child、chunk_index、chunk_size同时把child_id → parent_id写入parent_child_map字典。这套设计对应文档 docs/chapter8/02_data_preparation.md 中强调的小块检索大块生成父子文本块架构用户问话梅煮毛豆要多少话梅时可以精确定位到计算子块而生成回答时再通过get_parent_documents()取回完整父文档保证 LLM 拥有完整上下文。五、从怎么做到推荐素菜检索与生成的完整链路分块完成后索引构建模块 index_construction.py 使用默认的 BGE 中文嵌入模型BAAI/bge-small-zh-v1.5将子块向量化并存入 FAISS 向量库支持save_local/load_local索引缓存。随后检索优化模块 retrieval_optimization.py 提供双路检索向量检索as_retriever(search_typesimilarity, k5)捕捉语义相似例如酸甜的开胃小食能匹配到话梅煮毛豆BM25 关键词检索BM25Retriever.from_documents(chunks, k5)精确匹配话梅毛豆等具体词RRF 融合_rrf_rerank参数k60按1/(krank1)累计两路排名得分输出综合排序结果并写入doc.metadata[rrf_score]。生成集成模块 generation_integration.py 则负责理解问题并组织回答query_router()把问题分为list推荐类、detail做法类、general一般类三种query_rewrite()对模糊查询做重写优化如做菜→简单易做的家常菜谱generate_step_by_step_answer()使用结构化提示词按菜品介绍 / 所需食材 / 制作步骤 / 制作技巧四段式输出详细指导其中制作技巧一节明确要求优先采用原文附加内容中的实用技巧若该部分为空则基于步骤总结或直接省略_build_context()将父文档按max_length2000截断并拼接元数据头菜品名、分类、难度作为 LLM 上下文。在 main.py 的ask_question()中上述环节被串成一条完整流水线查询路由 → 查询重写 → 元数据过滤/混合检索 → 父子文档去重 → 按路由类型选择生成模式。典型问答场景如下用户问题: 推荐几道简单的素菜 查询类型: list 过滤条件: {category: 素菜, difficulty: 简单} 生成结果: 为您推荐话梅煮毛豆、凉拌黄瓜、蒜蓉西兰花……用户问题: 话梅煮毛豆怎么做 查询类型: detail 生成结果: ## 菜品介绍 … ## 所需食材毛豆300g、话梅6颗、盐2g… ## 制作步骤盐水浸泡15分钟 → 开水下锅煮20-30分钟 → 起锅…六、动手运行把这份菜谱跑进一个可问答的系统从仓库根目录出发按以下步骤即可将话梅煮毛豆所在的整个知识库跑起来准备依赖与密钥main.py启动时会检查MOONSHOT_API_KEY环境变量生成模块通过 Moonshot 的MoonshotChat调用 LLM缺失会抛出ValueError。依赖清单见 code/C8/requirements.txt从源码 import 看主要包括 langchain、langchain-community、langchain-huggingface、langchain-text-splitters、faiss 相关库及python-dotenv。确认配置核心参数集中在 config.py 的RAGConfig中均可用from_dict覆盖配置项默认值作用data_path../../data/C8/cook相对code/C8菜谱知识库根目录index_save_path./vector_indexFAISS 索引持久化路径embedding_modelBAAI/bge-small-zh-v1.5中文嵌入模型llm_modelkimi-k2-0711-preview生成模型top_k3检索返回的子块数量temperature0.1生成温度值越低越保守max_tokens2048最大生成长度启动交互问答在code/C8目录下执行python main.py系统会先构建或加载向量索引首次构建需几分钟之后因索引缓存只需几秒随后进入命令行问答循环支持流式输出。值得注意的是上述整条流水线对话梅煮毛豆并未做任何特判——它是被统一的模板约定目录分类、星级难度、标题结构自动理解的。这也正是本案例最值得复用的经验在搭建 RAG 知识库时先定义好文档模板规范往往比堆砌更多的切块参数更能提升检索效果。七、留白的附加内容与数据规范的价值话梅煮毛豆文档末尾的附加内容目前为空这在数据层面并非缺陷。一方面生成模块的提示词已对此做了容错——没有技巧就不强行输出另一方面它恰好演示了模板的可生长性后续若补充话梅品种选择浸泡时间对口感的影响等补充说明系统无需改动任何代码即可自动将其纳入知识库。结合 docs/chapter8/04_generation_sys.md 中提出的优化方向这份菜谱未来还可以沿着两条路线深化一是接入图数据库把毛豆、话梅、食用盐建模为食材节点支撑和话梅搭配的食材这类关系查询二是融合同目录1.jpeg成品图等视觉数据用多模态模型实现看图找菜。无论走向哪种方案当前这套目录即分类、标题即结构、星级即难度的数据规范都是所有上层能力得以成立的地基。赞分享教程人工智能大模型RAG【免费下载链接】all-in-rag大模型应用开发实战一RAG 技术全栈指南在线阅读地址https://datawhalechina.github.io/all-in-rag/项目地址https://gitcode.com/datawhalechina/all-in-rag点击查看免费下载相关推荐Roo Code v2.2.29 发布解析为自动写入增加可配置延迟让诊断与 Linter 从容跟上Roo Code v2.2.29 发布解析为自动写入增加可配置延迟让诊断与 Linter 从容跟上 Roo Code 2.2.29 引入了一项直接影响开发体教程人工智能大模型RAGall-in-rag 实战以煮泡面加蛋为例拆解菜谱知识库的数据准备与检索生成链路all in rag 实战以煮泡面加蛋为例拆解菜谱知识库的数据准备与检索生成链路 本篇技术指南以 Datawhale「all in rag」仓库中 煮泡面教程人工智能大模型RAGall-in-rag 尝尝咸淡 RAG 系统实战西红柿豆腐汤羹菜谱数据与检索问答全解析all in rag 尝尝咸淡 RAG 系统实战西红柿豆腐汤羹菜谱数据与检索问答全解析 西红柿豆腐汤羹是一道清淡鲜美、营养均衡的经典家常汤羹在 all in教程人工智能大模型RAG上一篇NS-USBLoader终极指南Switch玩家的全能文件管理神器下一篇NS-USBLoader完整指南Switch玩家的终极文件管理解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考