@mate_mattt: 做了一套真实可运行的 RAG 项目 和 Notebook RAG 实战课,对 RAG 进行像素级拆解: Markdown 切分 → FTS5 / BM25 → Embedding 向量检索 → 混合召回 RRF → Cross-Encod…

X AI KOLs Timeline 工具

摘要

这是一个从零学习本地RAG检索核心的实战项目,包含Notebook和真实可运行代码,覆盖Markdown切分、BM25、Embedding向量检索、混合召回RRF、Cross-Encoder重排等完整流程,并配有评测指标。

做了一套真实可运行的 RAG 项目 和 Notebook RAG 实战课,对 RAG 进行像素级拆解: Markdown 切分 → FTS5 / BM25 → Embedding 向量检索 → 混合召回 RRF → Cross-Encoder 重排 → Evidence Card。 不是只讲概念。每一课都有真实数据、代码、运行结果和评测指标;从 15 篇文档切到 210 个 Chunk,再看召回与重排如何变化。 读完并跑一遍,你会把 RAG 检索的核心骨架真正串起来,再配合上 AI 就能搭建自己的 RAG 系统。 开源 Notebook :https://github.com/mate-matt/rag-memory-lab…,如果觉得有帮助,点点 star,这是我写过最累人的手把手教学文章。
查看原文
查看缓存全文

缓存时间: 2026/07/12 19:00

做了一套真实可运行的 RAG 项目 和 Notebook RAG 实战课,对 RAG 进行像素级拆解: Markdown 切分 → FTS5 / BM25 → Embedding 向量检索 → 混合召回 RRF → Cross-Encoder 重排 → Evidence Card。 不是只讲概念。每一课都有真实数据、代码、运行结果和评测指标;从 15 篇文档切到 210 个 Chunk,再看召回与重排如何变化。 读完并跑一遍,你会把 RAG 检索的核心骨架真正串起来,再配合上 AI 就能搭建自己的 RAG 系统。

开源 Notebook :https://github.com/mate-matt/rag-memory-lab…,如果觉得有帮助,点点 star,这是我写过最累人的手把手教学文章。


mate-matt/rag-memory-lab

Source: https://github.com/mate-matt/rag-memory-lab

RAG Memory Lab

一个从零学习本地 RAG 检索核心的实战项目。它不调用外部生成服务、不需要 API Key;你可以逐节运行 Notebook,观察 Markdown 如何被切分、索引、召回、重排,并最终变成可追溯的证据卡。

配套阅读

两篇文章与本仓库的 01–07 课一一对应:文章负责串联思路与概念,Notebook 负责运行代码、观察真实数据和验证结果。

Markdown 文档
  → Chunk 切分
  → FTS5 / BM25 + 本地 Embedding
  → RRF 混合召回
  → Cross-Encoder 重排
  → Evidence Card(原文与来源)

你会学到什么

课程Notebook主题
0101_markdown_parser_and_sentence_splitter.ipynbMarkdown 结构感知切分与长度兜底
0202_sqlite_fts5_and_bm25.ipynbSQLite FTS5、倒排索引与 BM25
0303_embeddings_numpy_milvus_and_fts_comparison.ipynb本地 Embedding、NumPy、Milvus Lite 与检索对比
0404_retrieval_evaluation.ipynbRecall、Precision、Hit Rate、MRR 与人工标注评测集
0505_hybrid_retrieval.ipynbRRF:融合 BM25 与向量召回
0606_reranking.ipynbCross-Encoder 重排:从候选中精排
0707_evidence_cards.ipynbEvidence Card:来源、标题路径与检索轨迹

环境要求

  • macOS、Linux 或 Windows(建议使用 Python 3.11
  • uv:Python 环境与依赖管理工具
  • 首次运行可联网:会下载两个公开的本地模型权重;之后会复用本机缓存
  • 推荐至少 8 GB 内存。CPU 可以运行;第 6 课的重排在 CPU 上会更慢

项目的原始资料已经随仓库提供,不需要另行下载。模型权重不会被提交到仓库,也不需要任何密钥。

从零启动

在项目根目录执行:

# 1. 安装锁定版本的依赖,并创建 .venv
make setup

# 2. 注册 Jupyter 内核(只需一次)
make kernel

# 3. 启动 JupyterLab
make lab

浏览器打开后,选择 RAG Memory Lab 内核,并按 notebooks/01_...notebooks/07_... 的顺序逐节运行。

如果没有 make,把 Makefile 中对应命令的 uv run ... 部分直接复制到终端运行即可。

一键运行真实数据链路

下面的顺序很重要:后一步会读取前一步生成的本地文件。

# 1. 15 篇 Markdown → 210 个左右的 Chunk
make chunk-real

# 2. 构建 SQLite FTS5、Embedding、NumPy 文件与 Milvus Lite 索引
make vector-real

# 3. 评测单路召回
make eval-retrieval

# 4. 用 RRF 做混合召回并评测
make eval-hybrid

# 5. 用本地 Cross-Encoder 重排混合候选并评测
make eval-rerank

# 6. 生成包含原文、来源与排名轨迹的 Evidence Card
make build-evidence

常用的 Notebook 自动执行命令也已提供。例如:

make run-01
make run-03
make run-06

run-02run-07 依赖已注册的 RAG Memory Lab 内核,因此请先执行一次 make kernel

项目结构

rag-memory-lab/
├── knowledge-base/openai-cookbook/   # 公开 Markdown 原料、上游版本和许可
├── notebooks/                        # 01–07:可交互学习课
├── src/                              # 可复用的真实流水线代码
├── artifacts/
│   └── evaluation/retrieval-goldens.jsonl  # 人工标注的评测集(版本化)
├── assets/diagrams/                  # 课程与文章使用的结构图
├── Makefile                          # 常用命令入口
├── pyproject.toml                    # Python 3.11 依赖定义
└── uv.lock                           # 可复现的依赖锁文件

artifacts/chunksartifacts/indexesartifacts/vectors 和大部分评测结果都是运行产物,默认被 Git 忽略。克隆仓库后按上述顺序运行即可重新生成它们。

源码地图

文件作用
src/chunking.py使用 LlamaIndex 的 MarkdownNodeParserSentenceSplitter 切分 Markdown,并保存完整元数据
src/run_chunking.py真实数据入口:生成 chunks.jsonl、文档统计与抽样审查文件
src/fts5_index.py建立 SQLite 普通 chunks 表与 FTS5 虚拟表,并执行 BM25 搜索
src/vector_search.py本地 Embedding、NumPy 余弦相似度、Milvus Lite 索引与查询
src/run_vector_index.py从 Chunk 构建 FTS5、向量文件与 Milvus Lite 索引
src/evaluation.py / src/run_evaluation.py读取 Goldens,计算 Recall@K、Precision@K、Hit@K、MRR
src/hybrid_search.py / src/run_hybrid_search.py用 Reciprocal Rank Fusion(RRF)融合 BM25 与向量排序
src/reranker.py / src/run_reranking.py用本地 Cross-Encoder 对混合候选精排
src/evidence.py / src/run_evidence.py把重排结果包装为可追溯的 Evidence Card

数据、模型与许可

  • 原始语料位于 knowledge-base/openai-cookbook,是 OpenAI Cookbook 的一个固定公开快照。其目录内保留 SOURCE.json、上游 revision 和原始 MIT License;再分发时请一并遵守。
  • 本项目代码、Notebook 和自制图示使用根目录的 MIT License
  • 首次运行会按需下载 sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2(向量化)与 BAAI/bge-reranker-v2-m3(重排)这两个公开模型到本机缓存。它们不包含在仓库中。

常见问题

make vector-real 报找不到 chunks.jsonl

先运行 make chunk-real

评测或重排报找不到向量、FTS5 数据库?

先运行 make vector-real

第一次运行很慢或需要网络?

这是在下载公开模型权重。下载完成后会优先使用本机缓存。

我只想学习,不想跑完整流水线?

执行 make setup && make kernel && make lab,直接从第 01 课开始;Notebook 中有小样本和真实数据示例。

相似文章

@XiaohuiAI666: 你的 RAG 实现方法是错误的! 传统 chunk 缺乏知识边界、版本信息和元数据,导致检索上下文缺失、版本混杂、权限控制困难。 作者提出的新方法以 IdeaBlock(问题-答案+治理字段)替代 chunk,实现结构化知识单元。 不改检…

X AI KOLs Timeline

作者提出以IdeaBlock(问题-答案+治理字段)替代传统chunk来改进RAG知识单元,已开源Blockify工具,可减少40倍语料、3倍token并提升2.3倍相关性。

@ando_w: https://x.com/ando_w/status/2075468963098546520

X AI KOLs Timeline

本文介绍如何将单轮RAG升级为Agentic RAG,通过让LLM自主决定多次检索和调用工具,解决复合问题的多步推理。提供了基于Qwen3.7-Max的代码示例和实现思路。