darius.wiki

面向开发者的RAG系统入门:从构建到抗压测试

Darius·2026-10-23

Cover Image
ALT: 开发者构建RAG系统的完整指南,从向量检索到生产环境抗压测试

RAG 系统究竟在解决什么问题,以及你为什么需要认真对待它

核心结论:RAG(检索增强生成)系统是当前将大语言模型落地为可信知识工具的主流架构。它的价值不在于概念新颖,而在于它能以相对可控的成本解决 LLM 的幻觉与知识过时问题。但 RAG 并非开箱即用——从索引质量、检索策略到压测方法,每个环节都有真实的工程陷阱。本文从实际构建与运营经验出发,梳理开发者入门 RAG 系统时最需要建立的判断框架。

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将外部知识库检索结果注入 LLM 上下文的架构模式。它的出现解决了一个根本矛盾:LLM 的训练数据有截止日期,且无法感知私有领域知识,但用户希望模型的回答基于最新、最准确的内部文档。在我们持续跟踪和参与的 AI 产品构建实践中,RAG 是最高频被问到、也是踩坑最多的方向之一。

本文的目标读者是正在动手或即将动手构建 RAG 系统的工程师——不是要说服你"RAG 很有价值",而是帮你建立从构建到测试的完整工程视角,并提前标记那些常见但代价高昂的决策错误。

评估一个 RAG 系统的核心维度

评估 RAG 系统的质量不能只看最终回答是否"听起来正确"。在生产环境中,以下几个维度直接决定系统的实际可用性:

检索准确率(Retrieval Precision & Recall):检索阶段是整个管道的瓶颈。如果你检索出的文档块根本不相关,再好的生成模型也无力回天。这里需要关注的不只是 Top-K 是否命中,还有召回文档的多样性和覆盖率。

回答可溯源性(Attributability):生产级 RAG 系统必须能够追踪每条回答来自哪段文档,否则你无法验证输出的可信度,也无法在出现错误时定位根因。

延迟与吞吐量(Latency & Throughput):检索 + 生成的链式调用会显著增加端到端延迟。在高并发场景下,向量数据库的查询性能、上下文拼接的 token 数量、LLM 的推理速度三者共同决定用户体验。

索引鲜活度(Index Freshness):文档更新后,向量索引需要同步更新。这个增量更新机制如果设计不当,会导致系统悄悄返回过时内容而用户浑然不觉。

抗压稳定性(Stress Resilience):在真实流量下,RAG 系统的各个组件——embedding 服务、向量库、LLM API——都可能成为瓶颈或故障点。没有经过压测的 RAG 系统不应该上线。

这五个维度互相制约。比如提高 Top-K 会改善召回率,但会增加 context 长度,进而推高延迟和成本。理解这些 trade-off 是做好 RAG 工程的前提。

RAG 系统的三个核心构建阶段

阶段一:文档处理与索引构建

文档处理是最容易被低估的环节。RAG 系统的上限由你的索引质量决定。

分块策略(Chunking)的选择:固定大小分块(Fixed-size chunking)是最简单的起点,但它会在语义边界处截断内容,导致单个块缺乏完整上下文。更好的做法是语义分块(Semantic chunking)——基于句子相似度或段落边界切割,确保每个块在语义上自洽。

实践中我们见过一个高频错误:把 PDF 直接转成纯文本后按字符数分块,结果表格、标题层级全部丢失,检索时返回的是乱序的数字片段。对于富格式文档,预处理阶段必须单独处理结构化内容。

Embedding 模型的选择:通用 embedding 模型(如 OpenAI 的 text-embedding 系列、开源的 BGE、E5 系列)在大多数场景下够用,但如果你的领域术语高度专业化(医疗、法律、代码),领域微调的 embedding 模型会带来可测量的提升。选型时,在自己的测试集上跑 MTEB 评估比看论文里的数字更可靠。

向量数据库的选型:这是另一个容易引发选型焦虑的决策点。从工程角度,几个主要选项的核心差异如下:

维度 Pinecone Weaviate Qdrant pgvector
部署模式 托管服务 自托管/托管 自托管/托管 自托管(PostgreSQL 扩展)
混合检索支持 有限 原生支持 原生支持 需要额外配置
运维复杂度 低 中 中 低(已有 PG 时)
适用规模 中大型 中大型 中大型 小中型

如果你的团队已经在用 PostgreSQL,pgvector 是最低阻力的起点——不需要引入新的基础设施,在百万级向量规模内性能完全够用。规模增长后再考虑迁移。

阶段二:检索与生成管道设计

基础检索:语义相似度搜索是大多数教程的终点,但不应该是你的终点。纯向量搜索对精确术语匹配效果差——用户搜"RFC 7231",语义搜索可能返回一堆关于 HTTP 的泛化内容,而不是那份具体文档。

混合检索(Hybrid Retrieval)将向量搜索与关键词搜索(BM25)结合,通过 Reciprocal Rank Fusion(RRF)等方法融合排名,在绝大多数生产场景下优于单一检索方式。这是我们在实际产品中一贯推荐的起点配置,而非优化项。

重排序(Reranking):检索出 Top-20 文档后,用 cross-encoder 模型(如 Cohere Rerank 或开源的 BGE-Reranker)对候选集重新评分,再取 Top-5 送入 LLM。这一步对最终答案质量的提升往往超过更换更贵的 embedding 模型。

对于更复杂的查询场景,可以参考智能体流水线的三阶段架构思路——将检索、验证、生成解耦为独立的可观测步骤,每一步都可以独立监控和优化。

上下文构建的 token 预算管理:把检索到的文档块塞进 prompt 时,需要明确计算 token 消耗。一个常见的低级错误是没有计算最终 prompt 的总 token 数,导致偶发的超长请求触发 LLM 截断或报错。在代码层面,发送请求前必须有 token 计数和截断逻辑。

阶段三:评估与抗压测试

这是大多数开发者最容易跳过、事后最容易后悔的阶段。

离线评估框架:构建一个专属于你的领域的问答测试集(Golden Dataset)是 RAG 工程中最值钱的投资之一。测试集应覆盖:典型查询、边界查询(文档中没有直接答案的问题)、混淆查询(故意使用相似但不同的术语)。

评估指标上,RAGAS 框架提供了一套可操作的自动化评估方案,涵盖忠实度(Faithfulness)、答案相关性(Answer Relevancy)、上下文精确度(Context Precision)和上下文召回率(Context Recall)。这四个指标组合使用,可以把"回答质量"拆解为可定位的工程问题。

压力测试的实际操作:RAG 系统的压测不同于普通 API 压测,因为它涉及多个串联组件:

首先,对向量数据库单独压测。模拟高并发查询,观察 P95/P99 延迟,确认在目标 QPS 下检索延迟是否在可接受范围。

其次,对 embedding 服务压测。如果使用 API(如 OpenAI),需要测试在并发请求下的速率限制行为和重试策略。如果自托管,需要测试 GPU 内存和推理吞吐。

最后,端到端压测。用真实的查询负载,测试完整管道在目标 QPS 下的行为,重点观察:哪个组件先成为瓶颈、错误率如何随负载增长、缓存策略是否生效。

一个容易忽略的测试场景:索引正在更新时的读取行为。如果你的系统需要在增量索引期间持续提供服务,需要验证这个状态下的检索一致性。

四种主流 RAG 架构方案的横向对比

RAG架构方案对比
ALT: 基础RAG、高级RAG、模块化RAG与GraphRAG四种架构在检索质量、实现复杂度和生产适用性上的对比分析

以下对比基于工程实践中的真实权衡,未有实测数据的维度标注"取决于实现"而非捏造数值:

维度 基础 RAG 高级 RAG(混合检索+重排) 模块化 RAG GraphRAG
实现复杂度 低 中 高 高
检索质量(一般文本) 中 高 高 取决于实现
多跳推理能力 差 中 中-高 高
延迟 低 中 中-高 高
适合场景 原型验证 大多数生产场景 复杂领域定制 关系密集型知识库
可观测性 低 中 高 中

基础 RAG 的价值在于快速验证你的文档语料是否适合 RAG 方案——如果基础版效果就很差,问题大概率出在文档质量或分块策略上,加再多工程复杂度也无济于事。

高级 RAG(混合检索 + 重排序)是绝大多数生产场景的合理落点。它在工程复杂度和检索质量之间取得了最好的平衡,也是我们在实际工作中最频繁推荐团队采用的配置。

GraphRAG 适合关系密集型场景,比如法规条文之间的引用关系、技术文档之间的依赖图谱。但它的构建和维护成本显著更高,不应该是默认选择。在从零构建语义文件搜索系统的实践中,可以看到即便是相对简单的个人场景,选型决策也需要认真权衡索引构建成本与检索效果的平衡。

模块化 RAG 是一种架构思想,而非具体实现。它将检索、过滤、重组、生成拆解为可独立替换的模块,适合有持续迭代需求的团队,但前期工程投入较大。

选型建议:根据你的实际情况做决定

如果你处于原型验证阶段,选基础 RAG,用 LangChain 或 LlamaIndex 快速搭建,重点验证语料质量和问题类型是否匹配。不要在这个阶段做向量数据库选型决策,用内存向量库(如 FAISS)就够了。

如果你的团队已有 PostgreSQL 且规模在百万向量以内,pgvector 是最省事的起点。避免为了"更专业"而引入额外的基础设施复杂度——评估 AI 开发工具时最重要的标准之一,是与现有技术栈的集成成本。

如果你的文档包含大量精确术语或 ID 引用,混合检索(向量 + BM25)是必须项,不是可选项。纯语义检索在这类场景下的漏召回问题会直接影响用户信任。

如果你的系统面向生产流量,压测必须在上线前完成,且测试场景必须包括高并发下的组件降级行为。没有压测的 RAG 系统是一个定时炸弹——你不知道它会在哪个负载点上崩掉。

如果你面对的是关系密集型知识库(如合规文档、专利数据库),GraphRAG 值得评估,但要先回答:你的团队有能力维护知识图谱的持续更新吗?如果答案不确定,从高级 RAG 入手更稳妥。

常见问题解答

RAG 系统的分块大小应该怎么确定?

分块大小没有通用最优值,取决于你的文档类型和下游 LLM 的上下文窗口。经验上,512-1024 token 的块大小适合大多数文本文档。更重要的是块的语义完整性——一个语义上自洽但只有 300 token 的块,比一个跨越两个不同主题的 800 token 块效果要好得多。建议在自己的测试集上对比不同分块大小的检索准确率,再做决定。

使用商业 embedding API 和自托管开源模型哪个更合适?

商业 API(如 OpenAI text-embedding 系列)的优势是零运维、效果稳定;劣势是数据出境合规风险和长期成本。自托管开源模型(如 BGE、E5)适合数据敏感场景或高频索引更新场景。判断标准是:你的日均 embedding 请求量是否大到让 API 成本成为显著支出?数据合规要求是否禁止数据出境?如果两个问题都是"是",自托管值得投入。

RAG 系统上线后如何持续监控质量?

上线后的质量监控需要两条线并行:自动化指标(检索延迟 P95、答案置信度分布、用户反馈信号)和人工抽样评估(每周随机抽取一批真实查询,人工判断检索结果和生成质量)。纯依赖自动化指标会错过模型退化的早期信号;纯依赖人工评估则难以覆盖规模。两者结合,配合告警阈值,是可持续的监控方案。

总结

RAG 系统的工程挑战不在于概念理解,而在于每个环节的细节决策和它们之间的相互影响。三个最值得记住的核心判断:

第一,索引质量决定系统上限。文档预处理和分块策略的投入,比任何下游优化都更有杠杆效应。在索引质量不确定的情况下,不要急于引入复杂的检索策略。

第二,混合检索是生产环境的默认起点,不是优化项。纯向量检索在精确匹配场景下的缺陷是系统性的,不是偶发的。

第三,压测是上线前的必做项,不是可选项。RAG 系统的多组件串联特性使它在高负载下的故障模式比单体服务更难预判,必须通过真实负载测试来暴露瓶颈。

下一步行动建议:从一个最小可用的基础 RAG 开始,在自己的语料上建立测试集,用测试集驱动每一次架构决策,而不是用"业界最佳实践"驱动。

如果你正在构建 AI 产品,或需要将纷繁的 AI 动态转化为真正可执行的工程决策,Darius 简报正是为你而写——每一条资讯都经过在生产环境中运营真实 AI 产品的视角筛选与解读。访问 Darius,订阅双语简报,与同样在一线造产品的工程师保持同频。

参考资料

  1. 成都理工大学(RAG 字节跳动实践手册托管机构). "RAG 字节跳动实践手册".

    https://www.cdut.edu.cn/__local/E/5B/B6/39E6C9ADF20836A45F7C765C31E_B2F36ACF_167F1B.pdf
  2. Datawhale 开源社区. "All-in-RAG".

    https://datawhalechina.github.io/all-in-rag/
  3. Jimmy Song. "RAG 应用开发与实战手册:构建长期复利型知识基础设施".

    https://jimmysong.io/zh/book/rag-handbook/
  4. IEEE(电气与电子工程师协会). AI 系统评估与工程标准相关出版物.

    https://www.ieee.org/
  5. ACL Anthology(计算语言学学会论文库). 信息检索与自然语言处理领域学术研究资源.

    https://aclanthology.org/

注:技术标准与最佳实践持续演进,请以各来源最新版本为准。