了解生产级 RAG 系统如何检索、排序、引用和评估客户的私有知识,包括 FDE 面试中会考察的失败模式。
模型只知道两件事:它在训练中学到的东西,以及你在这次调用中放入上下文的内容。它不知道你客户的私有文档,而且它的训练停留在过去。检索增强生成就是弥补这一差距的方法。你在提问时获取相关文本并放入提示词中,让模型基于客户自己的数据而非其记忆来回答。对于 FDE 来说,这是最常见的架构,因为客户的价值几乎总是锁定在模型从未见过的数据中。
为什么这就是这份工作的核心
每个 FDE 项目都会遇到同样的模式:客户拥有数十年的文档,他们希望答案基于这些私有且最新的文档。单靠模型会自信地编造内容(它没有来源);RAG 为它提供了来源。Morgan Stanley 项目就是被引用的例子:一个基于该公司自有研究库的助手,让答案基于经过审核的内部研究正是整个项目的核心。检索做对了,系统就值得信赖;做错了,再好的模型质量也救不了你。
在继续阅读之前: 你的 RAG 助手给出了一个自信但错误的答案。模型没问题,提示词也没问题。你会先检查哪里——而不是模型?
你会检查检索。如果你喂给模型的段落不相关或缺少答案,模型就没有任何真实的内容可以依据,于是它用虚构填补了空白。在 RAG 中,检索质量是答案质量的上限。模型的正确程度只能取决于你检索到的上下文。
工作原理,五个步骤
- 分块。 将语料库拆分成足够小以保证精确、又足够大以保持自包含的段落。分块策略悄悄决定了检索质量。
- 嵌入。 用嵌入模型将每个分块转换为向量,使语义相似度变成几何上的接近度。
- 索引。 将向量存储在带有近似最近邻索引的向量数据库中,使对数百万个分块的查找变得快速。
- 检索。 在查询时,对用户的问题进行嵌入,并按语义取回最接近的前几个分块。
- 生成。 将这些分块拼接进提示词作为依据上下文,让模型基于它们回答,最好能引用它使用了哪些分块。
一个完整的运行示例——以及如何衡量它
下面是上述流程运行一次的过程,针对一个基于公司研究库的助手。(仅为示例:文档和分数都是虚构的;请研究其结构。)
Question: "What's our current outlook on European industrials?"
Top 3 retrieved chunks (by vector similarity):
[1] eu-industrials-2026-05.pdf, p.2 (score 0.83)
"We upgrade European industrials to overweight, driven by defense
spending and grid investment…"
[2] global-sectors-2026-05.pdf, p.11 (score 0.79)
"Within global industrials we prefer Europe over the US on valuation…"
[3] eu-macro-2026-04.pdf, p.7 (score 0.74)
"Euro-area surveys point to a shallow manufacturing recovery through
the second half…"
Grounded answer:
"The house view is overweight European industrials, upgraded in May on
defense spending and grid investment [1]; within global industrials the
preference is Europe over the US on valuation [2], against a shallow
manufacturing recovery [3]."答案中的每个论断都可以追溯到某个编号的分块,这正是用户或基于事实性的护栏能够验证它的原因。
这条轨迹也清楚地指出了该测量什么。构建一个黄金集:真实问题配上能回答它们的内容段落,并由熟悉语料库的人来评判。然后向检索器提出两个问题。第一,k 处召回率:在你实际放入提示词的前 k 个结果中,有多大比例的问题能出现正确段落?召回率是经典的信息检索指标,即“被检索到的相关文档的比例”(Manning、Raghavan & Schütze,《Introduction to Information Retrieval》第 8 章),而“at k”截断约定则在与你的上下文预算相匹配的截断位置进行评分。第二,平均倒数排名(摘要):所有问题中,第一个相关段落排名的倒数取平均。它来自文本检索会议(TREC)的问答评测(Voorhees, 1999),并奖励把正确段落排在最前面——那里对答案的影响最大。至于黄金集应该多大,没有厂商发布过权威数字;Anthropic 的建议是“数量优先于质量:更多信号略低、自动评分的问题,好过更少但高质量人工评分的评测”。当下方 Great 回答说要直接评估检索时,指的就是这套机制。
面试官会追问的权衡
- 检索质量就是一切。 更好的分块、更好的嵌入、对候选结果重排序,以及关键词加向量的混合搜索,都能抬高上限。大多数“模型不行”的抱怨,其实是检索失败换了件外衣。
- 更多上下文并非没有代价。 每个检索到的分块都会加长提示词,从而同时推高成本和延迟(成本与延迟)。只检索少量高度相关的分块。精准胜过数量,而且更便宜。
- 有据可依是一种安全属性。 RAG 的全部承诺就是基于来源作答,因此,一个检查答案确实被检索段落所支持的护栏,加上用户可验证的引用,才是让 RAG 在受监管环境中值得信赖的关键。
- 新鲜度靠检索,而不是重新训练。 新数据只需重新索引,而不必重新训练进模型,这就是为什么 RAG 是让助手保持信息实时的实用方法。
- 检索必须尊重提问者的身份。 在客户的语料库中,并非每个用户都有权限访问每份文档,因此检索必须在排序之前按请求者的权限进行过滤。跳过这一步,助手就会变成一种读取你从未被授权文件的途径,因为它会基于检索到的任何内容块来生成答案,包括提问者根本无权打开的内容。应在索引层面作为预过滤器强制执行访问控制(元数据过滤或按租户分区),而不是对结果做后过滤,这样不可读的文档就永远不会成为候选,也不会把检索预算浪费在你最终会丢弃的内容块上;代价是严格的范围限制会缩小候选池,并可能降低权限最小的用户的召回率。这是安全与合规边界与检索的交汇点,而通用的 RAG 教程几乎从不提及它。
差 / 良 / 优 —— “你如何让它基于我们的文档来回答?”
差 —— “我会用他们的文档对模型进行微调。” 作为把事实注入模型的方法,这是错误的工具:成本高、更新慢(新文档意味着重新训练一次),而且结果仍然无法引用来源。微调有其合理的用途,比如强制输出格式、教授领域特定的行为和语气,或将任务蒸馏到更小、更便宜的模型上,而且实际部署中会将它与检索结合使用。Morgan Stanley 团队通过顾问评分和检索调优来塑造助手的行为,同时每个答案都始终基于检索到的研究内容。这个答案之所以差,在于它试图通过重新训练来注入事实,而检索才是完成这项工作的标准工具。
良 —— “对文档做嵌入,针对问题检索最匹配的内容,然后把它们放进提示词里。” 架构正确,扎实。差距在于:没有意识到检索质量就是上限,也没有涉及事实依据、成本,或者如何判断它出错了。
优 —— “RAG:将语料库分块并嵌入到向量存储中,针对每个查询检索几段高相关性的段落并进行重排序,然后基于这些段落作答并附上引用。我会把检索质量视为上限并直接评估它(正确的段落是否出现在最靠前的结果中?),加入事实依据检查以确保答案不会偏离其来源,并保持内容块数量较少以控制预填充成本。” 你指出了检索是需要衡量的关键,将它与事实依据和成本联系起来,并使它变得可评估。
面试中要带走的要点
当提示词涉及客户自己的数据时,RAG 几乎总是答案,但关键信号不在于说出这个名字,而在于知道检索是上限。重点讲你如何评估检索质量、如何确保答案始终基于并引用其来源,以及如何控制上下文的 token 成本。微调不是注入事实的正确本能反应。
下一篇: 工具使用与函数调用。检索把数据送入模型;工具让模型能够行动。