系统设计 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 输入。
推荐形态
瓶颈
为什么会变
决策权衡
有出处支撑的规则
这些是模型背后那些经得起时间考验的 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 既快又能装进内存。
FAISSHNSW 把 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。