从零构建生产级 RAG 系统:Chunking 策略、向量检索、重排序与 RAGAS 评估的全链路实战
从零构建生产级 RAG 系统:Chunking 策略、向量检索、重排序与 RAGAS 评估的全链路实战核心痛点:RAG 教程遍地都是,但从零搭建真正可用的生产级 RAG 缺少完整实操指南。适配人群:有 Python 基础的 AI 应用开发者、RAG 系统后端工程师、ML 工程师。收获能力:独立搭建可运行的生产级 RAG 系统,掌握五种 Chunking 策略,理解混合检索工程细节,会用 RAGAS 量化评估。技术背景与演进逻辑RAG 为什么成为 LLM 应用的标配架构:LLM 的固有局限:知识截止日期 + 幻觉 + 无法访问私有数据。RAG 通过外部知识检索补齐这三块短板。微调 vs RAG:微调更新知识需重新训练(成本高、周期长);RAG 更新知识只需更新数据库(实时、低成本)。RAG 核心公式:Answer = LLM(Query + Retrieved_Context)。检索质量直接决定回答质量。RAG 技术栈分层:层级功能主流方案本文选择文档处理解析/分块Unstructured / LlamaIndex / LangChainLangChain + 自研 splitterEmbedding文本向量化BGE / E5 / Jina / OpenAIBGE-M3 (多语言, 1024d)向量存储向量索引与检索Milvus / Qdrant / Chroma / FAISSChroma检索策略召回方式向量检索 / BM25 / 混合混合检索 (向量 + BM25)重排序精排优化BGE-Reranker / Cohere / JinaBGE-Reranker-v2-m3LLM生成回答GPT-4o / Claude / Qwen / DeepSeekDeepSeek-V3 (API)评估质量量化RAGAS / TruLens / DeepEvalRAGAS演进时间线:2020 Lewis et al. 提出 RAG 概念 - 2023 LangChain/LlamaIndex 生态爆发 - 2024 混合检索 + 重排序成为标配 - 2025 Agentic RAG + 多模态 RAG 前沿探索。核心原理深度解析Chunking 策略:RAG 管线的第一道关卡五种主流 Chunking 策略:固定大小分块(Fixed-size):按 token 数切分,最简单,但在句子中间切断导致语义不完整。典型参数:chunk_size=512, chunk_overlap=50。递归字符分块(Recursive Character):按分隔符优先级依次尝试 ["", "", " ", “”],优先在段落边界切。LangChain 默认策略,生产推荐起点。语义分块(Semantic):计算相邻句子的 embedding 相似度,相似度骤降处切分。块内语义高度一致,但计算开销大。句子窗口分块(Sentence Window):每个块以目标句子为中心 + 前后 N 句为上下文。检索时用中心句,生成时展开完整窗口。LlamaIndex 特色方案。层级分块(Hierarchical):父子块结构,父块存完整语义,子块用于精确检索。先检索子块,生成时取父块完整上下文。LangChain ParentDocumentRetriever 方案。五种策略对比:策略检索精度上下文完整性实现复杂度推荐场景固定大小2/52/5极低快速原型递归字符3/53/5低通用文档(生产默认)语义分块4/53/5中高质量文档句子窗口5/55/5中QA/客服系统层级分块5/55/5高复杂文档/长文本本文选择:递归字符作为基础策略(覆盖 80% 场景)+ 层级分块作为高级方案。向量检索 + BM25 混合检索:互补才能完整向量检索(Dense Retrieval):语义相似,“北京的天气"能匹配到"首都今日气温”,强在语义理解。本质是 query 和 doc 分别过 embedding 模型,计算余弦相似度,取 Top-K 最近邻。BM25 检索(Sparse Retrieval):关键词匹配,“Error code E1004” 精确匹配文档中的 E1004,强在精确召回。本质是 TF-IDF 的改进,基于倒排索引。混合检索:取两者并集,用 RRF(Reciprocal Rank Fusion)融合排序。公式:score_rrf(d) = sum of 1/(k + rank_i(d)),k=60 是经验最优值。重排序(Re-ranking):让最相关的排在前面Cross-Encoder vs Bi-Encoder:Bi-Encoder 独立编码 query 和 doc,快但精度一般;Cross-Encoder 联合编码,慢但精度极高。BGE-Reranker 工作流程:[Top-100 候选文档] - [query+doc 拼接输入 Cross-Encoder] - [输出相关性分数] - [按分数重排] - [取 Top-5 送入 LLM]。为什么需要重排序:向量检索的 Top-20 中通常只有 5-8 个真正相关,重排序将其精准过滤,RAG 回答质量提升 20-40%。核心模块与流程机制详解完整 RAG 管线流程文档加载 - Chunking分块 - Embedding向量化 - ChromaDB存储 - 混合检索(向量+BM25) - Reranker重排序 - LLM生成回答 - RAGAS评估 - 结果输出项目结构rag-from-scratch/ - data/ - knowledge_base/ # 存放原始文档 - src/ - loader.py # 文档加载与解析 - chunker.py # Chunking 策略实现 - embedder.py # BGE-M3 embedding - vector_store.py # ChromaDB 操作 - retriever.py # 混合检索(向量+BM25) - reranker.py # BGE-Reranker 重排序 - generator.py # LLM 生成 - pipeline.py # 完整管线编排 - evaluator.py # RAGAS 评估 - config.yaml - requirements.txt - main.py核心代码1:Chunking 模块fromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromtypingimportListclassDocumentChunker:def__init__(self,chunk_size=512,chunk_overlap=50):self.splitter=RecursiveCharacterTextSplitter(chunk_size=chunk_size,chunk_overlap=chunk_overlap,separators=["", "", ".", "", ""])defchunk(self,documents:List[str])-List[str]:chunks=[]fordocindocuments:chunks.extend(self.splitter.split_text(doc))print(f"Chunked{len(documents)}docs -{len(chunks)}chunks")returnchunksdefchunk_hierarchical(self,documents,parent_size=2048,child_size=512):parent_splitter=RecursiveCharacterTextSplitter

相关新闻

7月22日三星Galaxy Unpacked发布会官宣,或推新形态折叠屏手机及多款新品

7月22日三星Galaxy Unpacked发布会官宣,或推新形态折叠屏手机及多款新品

三星官宣7月22日发布会,新形态折叠屏手机呼之欲出三星宣布下一场Galaxy Unpacked新品发布会将于7月22日在英国伦敦举行,宣传语为“新形态,新展开”。长期以来的传言称三星准备扩展折叠屏手机产品线到第三种形态,推出大书本式折叠屏…

2026/7/10 22:28:34阅读更多 →
AI模型选型避坑指南:如何平衡模型能力与工具链成熟度

AI模型选型避坑指南:如何平衡模型能力与工具链成熟度

最近在AI圈有个现象越来越明显:很多新发布的模型在技术指标上表现亮眼,但在实际开发使用中却让人头疼。这背后反映了一个关键问题——模型能力与工具链成熟度之间的脱节。作为一名长期关注AI工程化的开发者,我发现很多团队在选型时过于关注模…

2026/7/10 22:28:34阅读更多 →
【Atlas】血缘数据的时效性如何?是实时还是准实时?

【Atlas】血缘数据的时效性如何?是实时还是准实时?

Apache Atlas 血缘数据时效性深度解析:从 Hook 触发到图谱可见的全链路延迟分析 用户问题原文: “60. 血缘数据的时效性如何?是实时还是准实时?” 本文将彻底解答这个在数据治理 SLA 设计中的核心问题。答案是:Apache …

2026/7/10 22:28:34阅读更多 →
专业排版还原实战:如何解决Grok到word的格式问题?解析数据结构化迁移及“AI 导出鸭”工具的价值

专业排版还原实战:如何解决Grok到word的格式问题?解析数据结构化迁移及“AI 导出鸭”工具的价值

一 AI 导出鸭技术详解:如何解决Grok到word的格式问题 二 如何解决Grok到word的格式问题?硬核方案与AI 导出鸭实践 三 从乱码到规范:借助AI 导出鸭攻克如何解决Grok到word的格式问题正文:深入解析Grok到Word的格式转换困局与智能解…

2026/7/10 23:23:41阅读更多 →
Docker Compose 到 K8s 的迁移路径:不是一键转换那么简单

Docker Compose 到 K8s 的迁移路径:不是一键转换那么简单

Docker Compose 到 K8s 的迁移路径:不是一键转换那么简单 一、Kompose 转换完的 YAML 也别直接部署 Docker Compose 和 K8s 之间的概念鸿沟远超表面相似度。Kompose(kompose convert)能生成初版 YAML,但它只是一个语法翻译器——不…

2026/7/10 23:23:41阅读更多 →
手把手教你学 Simulink——基于双重移相(Dual Phase Shift, DPS)控制的双主动全桥(DAB)DC‑DC 最小电流应力控制仿真

手把手教你学 Simulink——基于双重移相(Dual Phase Shift, DPS)控制的双主动全桥(DAB)DC‑DC 最小电流应力控制仿真

目录 手把手教你学 Simulink——基于双重移相(Dual Phase Shift, DPS)控制的双主动全桥(DAB)DC‑DC 最小电流应力控制仿真 一、为什么 DAB 要用 双重移相 + 最小电流应力(Minimum Current Stress, MCS)控制 1.1 DAB 典型应用 1.2 单重移相(SPS)问题 二、DAB 拓扑与…

2026/7/10 23:23:41阅读更多 →
Qt + FFmpeg 音频工具:媒体流详情实现

Qt + FFmpeg 音频工具:媒体流详情实现

前言 音视频文件在容器层面由一个或多个流(stream)组成,每个流拥有独立的编码格式、参数配置和元数据。了解这些流的详细信息对于后续处理决策至关重要——比如判断音频是否需要重采样、视频帧率是否匹配、色彩空间是否正确等。AudioTools 的…

2026/7/10 23:23:41阅读更多 →
一个简单的 Oracle SPA示例

一个简单的 Oracle SPA示例

简介 本文通过一个示例来说明如何进行SPA。 SPA即SQL Performance Analyzer,按照官网的说明: SQL Performance Analyzer enables you to assess the impact of system changes on the response time of SQL statements. SQL性能分析器(SQL …

2026/7/10 23:23:41阅读更多 →
计网物理层基本概念

计网物理层基本概念

物理层是五层协议体系中的最底层,它的任务极其单纯:把比特流从一个节点透明地传送到相邻节点。物理层关心的不是"数据是什么意思",而是:用什么样的电压表示 1 和 0?一个比特持续多长时间?要不要区…

2026/7/10 23:18:41阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比当你在浏览器地址栏敲入一个网址时,背后可能隐藏着一场关于"要不要重新下载资源"的精密博弈。这场博弈的裁判是HTTP缓存机制,而304状态码则是这场博弈…

2026/7/10 0:00:01阅读更多 →
RoboWits:面向创造性问题求解的双臂机器人认知推理基准

RoboWits:面向创造性问题求解的双臂机器人认知推理基准

1. 项目概述:这不是又一个机器人抓取数据集,而是一次对“思考力”的压力测试 RoboWits——这个名字里藏着两个关键信号:“Robo”直指物理世界中的具身智能体,“Wits”则毫不掩饰地指向人类最核心的认知能力:机敏、判断…

2026/7/10 0:00:01阅读更多 →
5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windows…

2026/7/10 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/10 17:29:22阅读更多 →