[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82882":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":12,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":14,"starSnapshotCount":14,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},82882,"rag-from-zero","MisterBooo\u002Frag-from-zero","MisterBooo","从零做出能上线的 RAG 系统,跟着代码学,完整开源 · A complete, runnable RAG tutorial in Chinese",null,"Python",84,14,53,0,6,26,18,3.53,"MIT License",false,"main",true,[],"2026-06-12 02:04:28","\u003Cdiv align=\"center\">\n\n# RAG From Zero\n\n**从零做出能上线的 RAG 系统,跟着代码学,完整开源**\n\nA complete, runnable, Chinese RAG tutorial — built by hand, no LangChain magic.\n\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FMisterBooo\u002Frag-from-zero?style=social)](https:\u002F\u002Fgithub.com\u002FMisterBooo\u002Frag-from-zero)\n[![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FMisterBooo\u002Frag-from-zero?style=social)](https:\u002F\u002Fgithub.com\u002FMisterBooo\u002Frag-from-zero\u002Ffork)\n[![Chapters](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F教程-10%20章%20%2B%20附录-blue)](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green)](LICENSE)\n[![中文文档](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中文文档-完整-orange)](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system)\n\n🌐 [在网站看完整教程](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system) ·\n💻 [章节速览](#-章节速览) ·\n⚡ [5 分钟跑起来](#-5-分钟跑起来) ·\n📱 [关于作者](#关于作者) · ⭐ Star 一下支持\n\n\u003Cbr\u002F>\n\n\u003Cimg src=\"chapters\u002Fassets\u002Freadme\u002Farchitecture.svg\" alt=\"RAG 系统架构:离线建库 + 在线问答双链路\" width=\"720\" \u002F>\n\n\u003Cem>一套 RAG 系统的完整架构:离线建库 + 在线问答 双链路\u003C\u002Fem>\n\n\u003C\u002Fdiv>\n\n---\n\n## 这个项目是什么\n\n我是 [@MisterBooo](https:\u002F\u002Fgithub.com\u002FMisterBooo),5 年前我做了 [LeetCodeAnimation](https:\u002F\u002Fgithub.com\u002FMisterBooo\u002FLeetCodeAnimation)(**76.7k stars**,用动画讲算法)。\n\n2026 年,我把同样的「图解 + 实战」方法用在大模型上,做了这个 RAG 教程项目:**10 章 + 附录,每章配可运行代码、原创图解和大厂面试题,外加一个完整的端到端项目。**\n\n### 给谁看?\n\n**有编程基础(Python 会写、命令行能用)、但 RAG \u002F Agent \u002F 大模型应用零基础**的工程师。\n\n- ❌ 不适合:完全不会编程的初学者\n- ❌ 不适合:已经做过 RAG 项目的资深工程师\n- ✅ 适合:**想转大模型岗、但被市面上「原理太抽象 \u002F 代码太黑盒」的教程劝退的工程师**\n\n### 跟市面上其他 RAG 教程有啥不一样?\n\n| 维度 | 市面常见 RAG 教程 | 这个项目 |\n|------|----------------|---------|\n| 实现方式 | LangChain 封装,跑通了不知道为啥 | **全手写**,自己实现切分 \u002F 检索 \u002F 重排 \u002F Query 改写 |\n| 配套代码 | demo 玩具,clone 下来跑不通 | **完整可运行**,自带合成测试数据 |\n| 内容深度 | 偏概念,缺真实工程经验 | **每章配真实项目踩坑**(核辐射条款、推销 vs 销售…) |\n| 面试帮助 | 学完不知道怎么讲 | **每章配 5 道大厂真题** + 简历段位写法 |\n| 目标读者 | 含糊不清 | **明确「半小白」**:有编程基础 + RAG 零基础 |\n\n---\n\n## ⚡ 5 分钟跑起来\n\n> 需要 **Python 3.10+** 和 git。下面命令在 **macOS \u002F Linux** 上用 `python3` \u002F `pip3`,\n> 在 **Windows** 上用 `python` \u002F `pip`(或 `py -3`)。\n> 跑不通?跳到下面的 [🐛 跑不通?常见问题](#-跑不通常见问题),或看 [TROUBLESHOOTING.md](TROUBLESHOOTING.md)。\n\n### 30 秒:先看一个真实事故(零配置,不用 key)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FMisterBooo\u002Frag-from-zero.git\ncd rag-from-zero\u002Fchapters\u002Fch03-chunking\n\n# 装依赖(macOS \u002F Linux)\npip3 install -r requirements.txt\n# Windows: pip install -r requirements.txt\n\n# 跑事故复现(macOS \u002F Linux)\npython3 reproduce-disaster.py\n# Windows: python reproduce-disaster.py\n```\n\n你会看到(这是真实生产事故的最小复现,输出是确定的):\n\n```\n=== 固定长度切分的事故现场 ===\n\nChunk 0: 本保险承保意外伤害导致的身故或残疾,但以下情况除外\n\nChunk 1: :(1)战争 (2)核辐射\n\n=== 用户问:核辐射在保障范围内吗? ===\n→ Chunk 0 只到'但以下情况除外'就断了,除外项全在 Chunk 1\n→ 检索只命中 Chunk 0,模型看不到核辐射属于除外项\n→ 模型理直气壮回答'在保障范围内' → 真实场景:理赔差点出大事\n```\n\n**这就是你将跟着学的真实工程问题** —— 不是 toy demo。一刀切坏了一句话,线上就出了理赔事故。\n\n### 完整版:跑通一个真正的 RAG 系统\n\n[`rag_project\u002F`](rag_project\u002F) 是一个真正能跑的端到端系统:**DeepSeek + ChromaDB + bge-m3,核心代码全手写、没有 LangChain**,每个模块对应教程一章。\n\n```bash\ncd rag-from-zero\u002Frag_project\n# 下面用 macOS \u002F Linux 的 python3 \u002F pip3;Windows 换成 python \u002F pip(或 py -3)\n\n# 先跑零依赖冒烟测试,确认逻辑没问题(不需要 key、不下模型)\npython3 tests\u002Fsmoke_test.py\n\n# 完整链路:造数据 → 建向量库 → 提问(需 DeepSeek key + 本地 Embedding)\npip3 install -r requirements.txt\ncp .env.example .env            # 填入 DEEPSEEK_API_KEY\npython3 scripts\u002Fgenerate_synthetic_data.py\npython3 scripts\u002Fbuild_index.py\npython3 scripts\u002Fask.py \"核辐射在保障范围内吗?\"\n```\n\n`ask.py` 会打印「提问 → 答案 → 来源」,答案基于检索到的真实条款生成并标注出处。详细路径(含「30 秒免建库快速体验」)见 **[rag_project\u002FREADME.md](rag_project\u002FREADME.md)**。\n\n### 🐛 跑不通?常见问题\n\n**`zsh: command not found: pip` \u002F `python`** —— 你多半在 macOS 上,系统命令是 `pip3` \u002F `python3`(不是 `pip` \u002F `python`)。直接用上面的 macOS \u002F Linux 命令即可。\n\n**`SSL: CERTIFICATE_VERIFY_FAILED`** —— 你装的是 python.org 官方安装包,默认没装 CA 证书。在终端跑一次(把 `3.13` 换成你的实际版本):\n\n```bash\n\u002FApplications\u002FPython\\ 3.13\u002FInstall\\ Certificates.command\n```\n\n装完再重新 `pip3 install`。\n\n**pypi 太慢 \u002F 卡住** —— 换清华镜像:\n\n```bash\npip3 install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n更全的排查(含 Windows \u002F Linux)见 **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)**。\n\n---\n\n## 📊 项目特色\n\n### 🎯 目标读者锁死「半小白」\n\n每章都用一套「铁律」控制质量,确保有编程基础、RAG 零基础的人能独立跟下来:\n\n- 术语第一次出现,必有白话解释(「Embedding 就是把一段文字变成一串数字,意思相近的数字也相近」)\n- 代码逐行注释,每段后写「你应该看到 XXX」\n- 必有「🐛 跑不通?看这里」段,列常见报错\n- 必有「🛠️ 动手实验」让你改一个参数、观察结果变化\n- 每节结尾有「你掌握了什么」+「你做的 = 真实系统的哪一步」\n\n### 📖 三段式结构,一章服务三种读者\n\n每章约 8000–10000 字 + 多张原创图解,按 60 \u002F 30 \u002F 10 拆成三段:\n\n| 段落 | 给谁看 | 占比 | 内容 |\n|------|--------|:---:|------|\n| 🚀 Part 1 · 主线实战 | 零基础,想先跑起来 | ~60% | 概念白话 + 代码逐行注释 |\n| 🎯 Part 2 · 面试深度 | 想讲透、备战面试 | ~30% | 硬伤剖析 + 选型 + 业内行话 |\n| 🏆 Part 3 · 验收串题 | 检验学到位没 | ~10% | 关联面试题 + 自检清单 |\n\n想先跑起来只看 Part 1;备面试直奔 Part 2。\n\n### 💻 全手写,不用 LangChain\n\nLangChain 把一切都封装好了,**结果是你跑通了,却不知道里面发生了什么**。这套代码全部手写:\n\n- 自己实现 PDF 解析 + 结构感知切分(第 3 章)\n- 自己实现 Embedding + 向量库封装(第 4 章)\n- 自己手写 BM25 + 向量混合检索(第 5 章)\n- 自己实现 Cross-Encoder 重排(第 6 章)\n- 自己实现 Query 理解与改写(第 7 章)\n\n**学完是真懂 RAG,而不是只会调 LangChain 的几个 API** —— 这恰恰是面试官想确认的。\n\n### 🐛 真实项目踩坑合集\n\n每章都有 1–2 个真实保险项目踩坑案例 —— 面试时这些就是你的「故事素材」:\n\n- **第 1 章** · 没用 RAG 直接问大模型 → 模型「编造」了一套现金价值公式,差点信了\n- **第 3 章** · 固定长度切分 → 「核辐射条款」被切散,系统答「在保障范围内」,差点理赔事故\n- **第 3 章** · OCR 印章遮挡 → 「理赔限额 100 万」被读成 10 万\n- **第 5 章** · 用户问「推销」→ 文档里写的是「销售」,关键词检索召回为 0\n- **第 5 章** · 录播视频检索为 0 → 视频内容根本不在向量库里,只有文件名\n\n[在网站读完整事故复盘 →](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system)\n\n---\n\n## 📚 章节速览\n\n| # | 主题 | 你将学到 \u002F 真实事故 | 代码 | 文章 |\n|---|------|---------------------|:---:|:---:|\n| 1 | 为什么做 RAG | 「现金价值公式被编」事故;20 行迷你 RAG 跑通核心机制 | [→](chapters\u002Fch01-why-rag\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F01-why-rag) |\n| 2 | RAG 整体架构 | 四大模块怎么联动;为什么大模型反而最省心 | [→](chapters\u002Fch02-architecture\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F02-architecture) |\n| 3 | 文档预处理与切分 | 「核辐射条款被切散」事故;召回率从 67% 提到 91% | [→](chapters\u002Fch03-chunking\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F03-chunking) |\n| 4 | Embedding 选型 | bge-m3 \u002F OpenAI \u002F 国产模型怎么选;何时该微调 | [→](chapters\u002Fch04-embedding\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F04-embedding) |\n| 5 | 检索召回 · 混合检索 | 「推销 vs 销售召回为 0」事故;手写 BM25 + 向量融合 | [→](chapters\u002Fch05-retrieval\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F05-retrieval) |\n| 6 | 重排与检索优化 | Cross-Encoder 凭什么更准;精排慢了怎么提速 | [→](chapters\u002Fch06-reranking\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F06-reranking) |\n| 7 | Query 理解与改写 | HYDE「先让模型瞎答一个」为什么反而提升召回 | [→](chapters\u002Fch07-query-understanding\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F07-query-understanding) |\n| 8 | 多轮对话与记忆 | 把「那它过了还能退吗」里的「它」补全成可检索的问题 | [→](chapters\u002Fch08-memory\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F08-memory) |\n| 9 | 上下文问答与引用溯源 | 基于资料生成、没依据就拒答、每个结论标出处 | [→](chapters\u002Fch09-citation\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F09-citation) |\n| 10 | 系统评估与上线优化 | 「没有评估集的优化都是自嗨」;Recall@k \u002F MRR | [→](chapters\u002Fch10-evaluation\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002F10-evaluation) |\n| 附录 | 写进简历 & 面试应答 | 简历填空模板 + STAR 话术 | [→](chapters\u002Fappendix-resume-interview\u002F) | [→](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system\u002Fc\u002Fappendix-resume-interview) |\n\n---\n\n## 🗂️ 项目结构\n\n```\nrag-from-zero\u002F\n├── README.md                       ← 你正在看的文件\n├── LICENSE                         ← MIT\n├── chapters\u002F                       ← 每章一个目录:可运行 demo + 章节说明\n│   ├── ch01-why-rag\u002F               # 第 1 章 · 为什么做 RAG\n│   ├── ch02-architecture\u002F          # 第 2 章 · RAG 整体架构\n│   ├── ch03-chunking\u002F              # 第 3 章 · 文档切分(含「核辐射事故」复现)\n│   │   ├── chunk_demo.py           #   跟着敲的切分 demo\n│   │   ├── reproduce-disaster.py   #   复现「核辐射条款被切散」\n│   │   ├── requirements.txt\n│   │   └── sample-data\u002F            #   合成保险条款\n│   ├── ch04-embedding\u002F  …  ch10-evaluation\u002F\n│   └── appendix-resume-interview\u002F  ← 简历填空模板\n└── rag_project\u002F                    ← 完整端到端项目(DeepSeek + ChromaDB,手写无 LangChain)\n    ├── src\u002F                        ← 核心模块,各对应一章(loader \u002F chunker \u002F embedder \u002F\n    │                                  vectorstore \u002F retriever \u002F reranker \u002F query_processor \u002F\n    │                                  generator \u002F pipeline)\n    ├── scripts\u002F                    ← 造数据 \u002F 建库 \u002F 问答(generate \u002F build_index \u002F ask \u002F quickstart)\n    └── tests\u002F                      ← 零依赖冒烟测试 + 评估集\n```\n\n**每章自包含** —— `cd chapters\u002Fch03-chunking && pip3 install -r requirements.txt && python3 chunk_demo.py` 就能跑(Windows 用 `pip` \u002F `python`)。\n\n---\n\n## 📈 学完能做什么\n\n### 简历可以怎么写\n\n完整 3 种段位写法见 → [项目案例库 · RAG 智能问答系统](https:\u002F\u002Fwww.wsxdmx.com\u002Fprojects\u002Frag-system)。节选高级段位:\n\n> **保险智能客服 RAG 系统**(技术负责人 \u002F 团队 5 人)\n>\n> - 主导某保险公司客服 RAG 系统,处理 5000+ 真实文档\n> - 设计 **结构感知切分 + 向量 + BM25 混合检索** 两阶段架构\n> - 通过三代切分策略迭代,**召回率 67% → 91%**(+24pp,QA 评估集 200 题)\n> - 引入 Cross-Encoder 精排,Top-5 准确率 +23pp\n> - 解决 5 类生产问题:核辐射条款切散、术语同义词、OCR 印章遮挡…\n\n### 面试可以怎么讲\n\n每章末尾配 5 道大厂真题(共 50 道),按「为什么这么设计 \u002F 踩过什么坑 \u002F 怎么解决」的思路给讲法。\n\n更多 → [大模型面试题库 · 840 道大厂真题](https:\u002F\u002Fwww.wsxdmx.com\u002Fquestions)\n\n---\n\n## 关于作者\n\n- 📚 [LeetCodeAnimation](https:\u002F\u002Fgithub.com\u002FMisterBooo\u002FLeetCodeAnimation) —— **76.7k stars**,用动画讲算法\n- 🌐 [wsxdmx.com](https:\u002F\u002Fwww.wsxdmx.com) —— 大模型面试题库 · 840 道大厂真题\n- 📱 公众号 **「吴师兄学大模型」** —— 给想进大厂大模型岗的工程师:每天一题 + 项目拆解\n\n---\n\n## 📜 项目来源\n\n这个项目来自训练营 **2025 年的真实付费项目**,公开版面向自学:文章、可运行代码、图解和配套面试题都在这里,数据做了脱敏(用合成保险条款代替真实业务数据)。1v1 答疑、面试模拟、简历批改等服务,保留在训练营。\n\n想了解训练营,可以关注公众号「吴师兄学大模型」。\n\n---\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=MisterBooo\u002Frag-from-zero&type=Date)](https:\u002F\u002Fstar-history.com\u002F#MisterBooo\u002Frag-from-zero&Date)\n\n---\n\n## License\n\nMIT —— 自由使用,商用请保留署名。\n\n---\n\n⭐ 如果对你有帮助,**给个 Star** 就是对我最大的支持。\n\n❓ 有问题?欢迎提 [Issue](https:\u002F\u002Fgithub.com\u002FMisterBooo\u002Frag-from-zero\u002Fissues) 或在公众号留言。\n\n\u003Csub>ℹ️ 本仓库由主仓库自动同步生成(源目录 \u003Ccode>docs\u002Fv2-rag-project\u002Fgithub-repo\u002F\u003C\u002Fcode>,push 到 \u003Ccode>production\u003C\u002Fcode> 时通过 rsync 同步)。**请勿直接在本仓库修改**,会被下次同步覆盖。\u003C\u002Fsub>\n","这个项目是一个从零开始构建可上线的RAG（Retrieval-Augmented Generation）系统的完整教程。它通过手写代码实现，不依赖于LangChain等封装库，涵盖了从数据切分、检索到重排和Query改写的全过程，并附带合成测试数据以确保代码可运行性。每章都配有原创图解、实战案例及大厂面试题，特别适合已有一定编程基础（熟悉Python和命令行操作）但对RAG或大模型应用尚无经验的工程师学习。旨在帮助这部分人群快速掌握RAG系统开发的核心技能，同时提供真实工程中可能遇到的问题及其解决方案，助力其顺利过渡到大模型相关岗位。",2,"2026-06-11 04:09:31","CREATED_QUERY"]