跳至主要内容

上下文

什么是 RAG(检索增强生成)?

RAG 是指从你自己的文档中检索出相关段落,直接摆在模型面前供它参考作答,而不是依赖它凭记忆回答。这篇文章说明文档分块的方式和检索质量,具体如何决定这套机制在实践中是否真正有效。

全部文章 · 最近核实:

它是怎么运作的

文档被切成块,每一块都转换成一个向量——它含义的数字化表示。问题也用同样方式转换,检索出向量最接近的那些块。

这些块被插入提示词,通常附带一条「据此作答」的指令。模型负责语言部分的工作,检索负责知识部分。

检索质量决定了整个系统

如果正确的段落没被检索到,任何模型都救不了这个答案——它会凭通用知识作答,听起来同样自信。大多数令人失望的 RAG 系统,其实是穿着生成外衣的检索问题。

分块是这一切被决定的地方。太小的块会丢失让它们有意义的上下文;太大的块会稀释每一次匹配。按文档结构——章节、标题——来分块,通常胜过按固定长度分块。

它修复什么,不修复什么

RAG 修复的是「模型从没见过我的文档」这个问题。在文档能回答的问题上,它能减少幻觉,因为答案就摆在模型面前。

它不修复推理能力,也不能阻止模型在检索不到有用内容时凭记忆作答。基于证据的回答是一种强烈的倾向,不是保证,它的失败模式是一个没有来源却很自信的答案。

常见问题

RAG 和微调是一回事吗?
不是,两者解决的是不同的问题。微调改变模型的行为方式;RAG 改变它在某次请求中知道什么。对于「回答关于我的文档的问题」这类需求,RAG 几乎总是正确的工具,而且保持更新的成本低得多。
大的上下文窗口会让 RAG 过时吗?
不会。你可以贴进去更多内容,但每条消息里的每个 token 都要付费,而且模型对很长的输入分配注意力并不均匀。此外,检索也是唯一能突破任何窗口容量限制的方法。
RAG 会把我的文档发给模型供应商吗?
检索到的段落会被发送,因为模型正是这样看到它们的。如果这不可接受,模型就必须运行在你能掌控的地方,这正是本地执行的用途所在。

与其阅读,不如亲自试试

ClawAI 从你附加的文件中检索,并将其与本地执行结合,让检索到的段落能留在你自己的硬件上。