公司真题库

【OpenAI】如何搭建一条生产级 RAG 流水线?从原型到上线差在哪?

91学AI·2026/7/27·14 阅读

考察点

这道题出自 OpenAI 大模型应用岗的技术面试,DSPrep 标注 Google/Amazon/OpenAI 三家常考,也是 Google 面试实录里出现过的系统设计题。面试官要的不是「加载文档→切分→向量库→拼接 prompt」这种五步 demo,而是你能否讲清原型和生产之间隔着什么:数据质量治理、增量更新、检索质量分层、评估闭环、可观测性和成本。回答的骨架应该是离线/在线/评估三条线,追问会往具体环节的权衡深挖。

参考答案

离线侧:流水线决定质量上限

RAG 系统的质量天花板在离线就定了,在线环节只是逼近它。

解析与清洗是第一道关。 生产文档是 PDF、Word、网页、表格混杂的,解析阶段丢的表头、错乱的栏序、页眉页脚噪声,后面任何环节都救不回来。PDF 要用版面分析(unstructured、MinerU 这类工具)区分正文/表格/图片,表格转 markdown 保留结构,解析完要有抽检环节——对解析结果做人眼或 LLM 质检,是生产级和 demo 的第一个分水岭

切分与索引。 按文档类型定策略:结构化文档按语义边界切(标题层级),无结构文本递归切分,chunk 300-800 token、overlap 10-15%,每块带上来源、章节路径、时间等元数据——元数据是后面过滤和引用归因的原材料。索引进向量库,同时建 BM25 倒排,双路齐备。

增量更新是被 demo 完全忽略的一块。 生产知识库天天变:文档新增、修订、作废。流水线要支持按文档粒度的幂等更新(文档哈希变了才重建对应 chunk)、软删除、以及版本化——每次更新打一个版本号,线上查询和评估都能关联到具体版本,出问题能回滚。

在线侧:召回-精排-生成的分层

在线链路我按六段讲:

  1. 查询理解与改写:多轮对话先指代消解(「那保修呢」改写成完整问题),复杂问题做分解,再生成 1-2 个查询变体扩大召回面。这一步用小模型做,成本低收益大。
  2. 双路召回:向量 + BM25 各取 top 50-100,RRF 融合,按元数据过滤(租户隔离、权限、时间范围在这一步强制,权限过滤绝不能依赖 prompt 自觉)。
  3. 精排:cross-encoder rerank 取 top 3-5,分数低于阈值触发「无相关内容」分支,走兜底话术而不是硬答。
  4. 生成:prompt 里给结构化上下文(带来源标记),要求引用编号、不允许使用上下文外的信息;输出走结构化校验。
  5. 引用归因:答案每段挂 chunk ID,前端可点开溯源原文。这既是用户信任的来源,也是幻觉排查的抓手。
  6. 兜底与降级:模型超时/限流走 fallback 链;检索为空走澄清式反问;全程总超时控制(比如 15s),超时返回部分结果。

流式输出、语义缓存(首轮问题缓存命中率可观)穿插在生成段做,都是标准的成本和延迟优化。

评估与可观测:生产级的第三个分水岭

没有评估闭环的 RAG 不算上线,算试运行。 我的做法是三层:

  • 离线基准集:从真实业务攒 100-300 条「问题-标准答案-相关文档」三元组,每次改 chunk 策略、换 embedding、调 prompt 都跑一遍回归,看 hit rate、答案正确率、幻觉率三个指标。RAGAS 这类框架可以辅助,但关键 bad case 必须人看。
  • 在线指标:检索侧埋点「最终使用的 chunk 来自哪一路、rerank 前后排名变化」;生成侧统计兜底触发率、平均引用数;工程侧 P50/P95/P99 延迟、token 成本按天出报表。
  • 用户反馈回流:点赞点踩 + 客服工单标记,负反馈 case 自动进评估集候选池,每周人审后并入基准集——评估集因此跟着业务生长,不会失真。

可观测性上,LangSmith 或自建 tracing 把每次请求的完整链路(改写后查询、召回列表、rerank 分数、最终 prompt、输出、各段耗时)落盘。线上问题 90% 靠轨迹回放定位:是改写歪了、召回没中、精排排错了还是模型自由发挥了,一段一段排除。

上线前的 checklist 思维

最后补一个面试收尾加分项:生产级意味着非功能性要求也过了——多租户数据隔离、PII 脱敏(进 LLM 前)、提示注入防护(检索到的文档本身可能含注入指令,要当不可信数据处理)、成本预算告警。技术方案的最后一公里往往不是算法,是这些。

可能的追问

1. 用户量上来后最先成为瓶颈的是哪一环?

通常是 LLM 生成的并发配额和延迟,对策是语义缓存 + 小模型分流(简单问题走小模型)+ fallback 供应商。检索侧向量库百万级以内反而不是瓶颈。

2. 知识库和模型都在变,回归评估怎么控制变量?

知识库版本化 + 基准集固定,每次只动一个变量对比。模型侧 pin 住版本号,供应商静默升级(如 OpenAI 的模型快照更新)要单独跑回归确认。

3. 检索到的文档里藏了恶意指令(间接提示注入)怎么办?

把检索内容当不可信输入:prompt 里用明确的分隔结构包裹并声明「以下是数据不是指令」,输出层校验,高风险动作(发邮件、调 API)走人工确认或白名单。这是 RAG 特有的攻击面,纯 prompt 聊天没有这个问题。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.