中文 EN

系统设计 Lab

RAG system 其实是两条 pipeline —— 离线的 ingestion,和在线的 retrieve-then-generate 查询路径 —— 每一个负载都会撑大不同的 stage。

调节 query rate、corpus 规模、chunk size、每次 retrieve 多少 chunk、模型的 context window、以及 embedding 维度,再切换 reranking 和 hybrid search。设计会从直接 stuff prompt,演进到带 ANN retrieval 的 vector index,再到 chunking 加 reranking,再到 hybrid search 配 caching,最后变成多租户、持续 ingest 的平台。

分步讲解

一步一步把它想清楚

常规演进场景

从左到右点击,就是预设的演示路径。每张卡片都会改变 workload 输入。

Workload

这些是输入,不是预设好的架构阶段。

推荐形态

当前架构路径
Retrieval-augmented generation 架构图 RAG system 的白板式架构图:clients、一个 RAG API、负责把 query 做 embed 并在 vector index 上搜索的 retrieval 阶段、rerank 与 context-assembly 阶段、带 response cache 的 LLM generation,以及一条异步的 ingestion pipeline 来对文档做 chunk 和 embed。 Clients RAG API 检索 Retrieval Rerank + 组装 生成 Generation 摄入 Ingestion Client 发起提问 RAG API 编排 query Response cache 重复 query Query embedder 文本转 vector Vector index ANN top-k Keyword index BM25 匹配 Reranker cross-encoder Context assembler 塞进 window LLM generator 有据可依的答案 Chunk + embed 异步 pipeline Index writer upsert 向量
Clients
Client 发送自然语言提问,并渲染有出处支撑的答案
RAG API
RAG API 为每次 query 编排 embed、retrieve、rerank、assemble 和 generate
Response cache 在做任何 retrieval 之前,对重复或相似的提问直接返回缓存的答案
检索 Retrieval
Query embedder 用 ingestion 时同一个模型把提问 embed 成向量
Vector index approximate-nearest-neighbour 搜索返回 top-k 候选 chunk
Keyword index 用于 hybrid search 的 inverted index,抓住 dense vector 漏掉的精确词
Rerank + 组装
Reranker 在候选进入 context 之前,按 query-chunk relevance 重新排序
Context assembler 把最好的 chunk 连同 prompt 一起打包,正好塞进 context window
生成 Generation
LLM generator 以 assemble 好的 context 为条件生成答案
摄入 Ingestion
Chunk + embed 在 query 路径之外,把新文档切成 chunk 并做 embed
Index writer 把 chunk 向量 upsert 进 index,让 retrieval 保持新鲜

瓶颈

Vector index 规模

ANN query 负载

Rerank 负载

Context window 占用

Ingestion / freshness

为什么会变

    决策权衡

    Chunking 策略

    Vector index / ANN

    Hybrid search

    Reranking

    Context 组装

    Ingestion / freshness

    有出处支撑的规则

    这些是模型背后那些经得起时间考验的 system design 论断。而 slider 的具体阈值,则被刻意标注为教学用的假设。

    已验证的规则

    RAG 让生成以 retrieve 到的段落为条件,而不是靠记在权重里的知识

    最初的 RAG 论文用 dense retriever 取出相关段落、喂给一个 seq2seq generator,把知识(index)和参数化模型分离开。

    Lewis et al., 2020 (arXiv:2005.11401)
    已验证的规则

    十亿级别的 similarity search 需要 ANN index,不能用暴力扫描

    FAISS 提供 quantised 和 graph-based 的 index,让超大向量集上的 nearest-neighbour search 既快又能装进内存。

    FAISS
    已验证的规则

    HNSW 把 approximate nearest-neighbour search 做到对数时间

    Hierarchical Navigable Small World 图用一个可调的 recall/latency 旋钮,换来能扩展到大 index 的 high-recall 搜索,是大多数 vector database 的默认选择。

    Malkov & Yashunin, 2016 (arXiv:1603.09320)
    已验证的规则

    Vector database 管的是 embedding、metadata 过滤和更新

    一个生产级的 vector store 不只是干 nearest-neighbour 的数学,还要负责 index 构建、为 freshness 做 upsert、以及用 metadata filter 做多租户隔离。

    pgvector

    教学用假设

    • 平均每篇文档切成几个 chunk;总向量数 = 文档数 × 每篇 chunk 数,再按 chunk size 缩放。
    • freshness 建模成:只有新增/改动的文档(corpus 中每天一小部分)被 embed 和 upsert,而不是整个 corpus 重新 embed;目标越紧就越逼出 streaming pipeline。
    • ANN、rerank、embedding、generation 的单节点预算都是保守的教学数字,不是厂商上限。
    • cache 命中率和 recall 都是近似值;真实系统会凭经验调 HNSW 参数和 reranker。