先建立一个直觉

在回答之前,先从已有资料中找到相关内容,再把这些内容交给模型。这是理解 RAG 的一个起点。

检索负责提供参考,生成负责组织回答。两部分需要分别检查,才能知道问题出在哪里。

先检查找到了什么,再判断回答得怎么样。

一次检索,经历了什么?

从用户提出问题,到最终生成回答,通常会经历下面的步骤:

从提问、检索、相关片段到组织回答的四步流程

图 01 · 从问题到参考资料

这四步看起来很短,但每一步都会影响结果。用户的问题决定检索方向;检索器决定哪些资料能进入上下文;最后,模型只能根据拿到的片段来组织答案。

用最小例子拆开流程

下面用一个最小的伪代码例子,展示检索增强生成的基本流程:

Python · 示例代码
question = "什么是向量检索?"
passages = retriever.search(question, top_k=3)
context = "\n".join(passages)
answer = generate(question, context)

先观察返回的片段是否相关,再继续调整后面的回答。如果片段本身答非所问,生成阶段再聪明,也很难得到可靠答案。

把检索结果单独打印出来,是排查问题最简单的一步。它能帮助我们判断问题来自资料、切分、召回,还是最后的组织方式。