RAG 面试题
01. 设计 TB 级私有知识库 RAG:实时更新与百万 QPS
设计哲学与核心价值定位
这个 RAG 系统在企业 AI 生态中的生态位是私有领域的 "知识中台入口",承担着将企业积累的非结构化私有知识(如内部文档、项目经验)转化为可被大模型高效调用的结构化知识的职责,解决的第一性原理问题是「企业私有知识的高效复用与实时触达」。如果不采用这个方案,企业在使用大模型处理内部业务时,会面临三个底层瓶颈:一是 TB 级私有知识无法直接输入大模型,导致大模型缺乏业务上下文;二是实时更新的知识(如项目变更、业务规则调整)无法快速同步给大模型,输出内容滞后;三是无法支撑百万级并发的内部员工查询,系统会在峰值请求时出现服务雪崩。
中文架构可视化与全链路解析
全链路解析
- 查询路由先查本地缓存(按查询+权限+上下文构建键),命中直接返回
- 未命中再查分布式缓存,命中则回写本地并刷新 TTL,降低后续延迟
- 再未命中进入检索链路:向量库召回 → 写入多级缓存 → 构造提示词 → 大模型输出
- 缓存一致性模块监听知识库更新,执行版本化失效与精准删除,保持结果可用
- 本地 LRU 与分布式 LFU 组合优化命中率与成本,兼顾延迟与容量
组件协同与关键实现细节
这个架构中的压舱石组件是分布式向量数据库集群的分片调度与增量编码模块。
- 分布式向量数据库采用一致性哈希分片的结构,将知识库按照领域、文档类型进行哈希分片,每个分片独立存储对应的向量数据,这种结构可以将检索请求均匀分散到不同的节点,直接提升系统的吞吐量,同时避免单节点的性能瓶颈;
- 增量编码模块采用基于事件驱动的异步编码策略,内部使用优先级状态机管理编码任务,将高优先级的实时更新文档(如业务规则变更)优先编码,低优先级的批量文档延后编码,这种设计可以保证实时更新的知识能够在 1 分钟内完成编码并写入向量数据库,降低系统的延迟;
- 全局缓存层采用多级缓存结构,本地缓存存储节点级的高频查询,分布式缓存存储全局的高频查询,同时实现缓存一致性协议,当知识库更新时,主动失效对应的缓存数据,保证缓存数据的准确性。
方案对比、工程取舍与演进趋势
| 主流方案 | 设计动机 | 适用场景 |
|---|---|---|
| 集中式向量数据库 | 降低部署复杂度 | 知识库规模小于 100GB、并发量小于 10w QPS 的场景 |
| 分布式哈希分片向量数据库 | 支撑大规模知识库与高并发 | 知识库规模大于 TB 级、并发量大于百万级 QPS 的场景 |
| 基于对象存储的向量索引 | 降低存储成本 | 冷数据占比高、实时检索需求低的场景 |
- 工程取舍
- 为了支撑百 万级 QPS 与 TB 级知识库,我们牺牲了部署的复杂度,采用分布式分片架构,同时牺牲了一定的检索一致性,采用最终一致性的缓存策略,来换取系统的可用性与吞吐量;
- 为了支持实时更新,我们牺牲了部分编码的吞吐量,采用优先级状态机来保证高优先级更新的时效性。
- 趋势预判:
- 后续会结合向量数据库的分层存储能力,将冷数据存储到低成本的对象存储中,热数据存储到内存中,进一步降低存储成本;
- 会引入大模型的智能调度能力,根据查询的语义自动调整检索的分片范围,提升检索的准确率。
02 长文本 RAG:分块策略与召回精度优化
设计哲学与核心价值定位
这个方案在 RAG 系统中的生态位是长文本知识的"语义拆解与精准触达"模块,解决的第一性原理问题是「长文本的语义密度不均与编码模型的上下文窗口限制」。
如果不采用这个方案,RAG 系统在处理长文本时,会面临两个底层瓶颈:一是编码模型的上下文窗口有限(如当前主流编码模型的窗口多为 4k-16k),无法直接编码 10w 字的长文本;二是直接对长文本进行暴力分块,会导致语义碎片化,检 索时无法召回完整的知识片段,生成的回答会出现逻辑断裂。
中文架构可视化与全链路解析
全链路解析
- 长文本预处理后进入语义感知分块,并为分块打上下文标签
- 分块编码同时编码标签向量,写入向量数据库
- 用户查询编码后,检索模块做联合检索(分块向量+标签向量)
- 召回分块按标签聚合,构造提示词输入大模型生成回答
- 分块编码批量化提升吞吐,聚合保证语义完整与连贯
组件协同与关键实现细节
这个架构中的压舱石组件是语义感知分块模块与分块聚合模块。
- 语义感知分块模块内部采用基于预训练语言模型的语义主题识别算法,结合跳表索引存储分块的语义边界,这种数据结构可以快速定位长文本的语义分块位置,提升分块的效率;
- 分块聚合模块内部采用基于图的分块关联算法,将具有相同上下文标签的分块关联起来,这种数据结构可以保证聚合后的知识片段的语义完整性,提升生成回答的逻辑连贯性;
- 这两个组件的设计直接提升了系统的召回精度,同时降低了编码的时间成本,因为只需要对分块后的文本进行编码,而不是对整个长文本 进行编码。
方案对比、工程取舍与演进趋势
| 主流方案 | 设计动机 | 适用场景 |
|---|---|---|
| 固定长度分块 | 实现简单 | 文本语义密度均匀、无明显语义边界的场景 |
| 语义感知分块 | 保证分块的语义完整性 | 技术文档、法律条文等语义密度不均的长文本场景 |
| 递归分块 | 适配不同长度的查询 | 对检索精度要求极高的场景 |
- 工程取舍
- 为了保证分块的语义完整性,我们牺牲了分块的效率,语义感知分块的时间成本是固定长度分块的 2-3 倍;
- 为了提升检索的精度,我们牺牲了部分存储成本,需要存储分块的上下文标签向量。
- 趋势预判:
- 后续会结合大模型的长上下文窗口能力,实现"动态分块",根据文本的语义密度自动调整分块的长度;
- 会引入多模态的语义分块能力,支持对长文本中的图片、表格等内容进行分块。