如果你最近在学 Agent,大概率会遇到一个错觉: “我已经会 RAG 了——文档切块、向量化、FAISS/Chroma、最后问答能出结果。”
但只要你真把它放进项目,很快就会发现: 能跑通 ≠ 能用;能用 ≠ 可信;可信 ≠ 可维护。
我自己走完整条 RAG 路线后,最大的体会是: RAG 不是一个功能点,而是一条检索工程链。
一、先把 RAG 的“两个生命周期”分清楚(这是入门分水岭)
很多人一上来就问“为什么回答不准”,其实第一步就混了。
RAG有两套完全不同的生命周期:
- 离线索引(Indexing): Load → Split → Embedding → Store 这一步是“建智能图书馆”,慢,但通常一次构建可复用。
- 在线问答(Retrieval-Augmented Generation): Query → Retrieval → Prompt Augment → LLM Generation 这一步是“用户提问实时查书”,每次都会执行。
你只盯在线链路,不管离线质量,最后就是经典四个字: 垃圾进,垃圾出。
二、基础阶段最该死磕的,不是框架,而是 Chunk 策略
我见过最多的 RAG 失败,不是模型差,而是分块粗暴。
你真正要调的是两个参数:
- chunk_size:每个知识片段的上限
- chunk_overlap:相邻片段重叠长度(语义防断裂)
为什么它这么重要?
- 太小:语义被切碎,检索命中片段却不含完整答案;
- 太大:噪声过多,检索不聚焦,LLM读不出重点;
- overlap太低:跨句信息断裂;
- overlap太高:重复信息过多,浪费召回名额。
很多人把心思全花在“换更强模型”,却忽略这一步。 但实操里,chunk调优的ROI往往高于换模型。
三、FAISS 和 Chroma 怎么选?不要“谁高级用谁”
基础学习阶段用 FAISS 非常好:轻、快、直接,帮助你理解“向量检索是怎么工作的”。
但到了项目阶段,FAISS的短板会很明显:
- 静态快照思维强;
- 知识库更新成本高;
- 文档+元数据+索引管理不够工程化。
所以进阶阶段切到 Chroma 是合理升级,不是“换个库炫技”。 核心变化就一句话:
从“我能检索”升级为“我的知识库能长期维护、可增量演进”。
四、为什么你“召回了”,答案还是不行?因为缺少精排(Reranker)
向量检索本质是“粗召回”,不是最终裁判。 它可以把相似内容找来,但也会混入“语义接近但事实无关”的段落。
所以进阶 RAG 的关键动作是:
- 先用向量库做海选(k 拉大,比如50)
- 再用 Reranker 做精排(top_n 留少量高相关)
这个动作很像招聘:
- k = 面试候选池大小(影响召回与延迟)
- top_n = 最终录取人数(影响输入token与成本)
一个常见误区:
k 和 top_n 不是越大越好。 k过小漏召回,top_n过大会把噪声喂给LLM,甚至触发“中间迷失”。
五、RAG 真正成熟的标志:被 Tool 化并接入 Agent 决策循环
只做一个“RAG问答脚本”,它永远是孤立模块。 你要让 Agent 真正变强,必须把 RAG 封装成工具:
- Agent先判断“要不要查知识库”
- 再决定“怎么改写query去查”
- 最后把检索结果纳入推理链
这一步完成后,RAG不再是“固定流程”,而是 Agent 的一项可调用能力。 再配合会话记忆后,你会得到真正可用的形态:
通用推理 + 私有知识 + 多轮上下文一致性。
六、给想系统学 RAG 的人,一条最稳的学习路径
我会建议按这个顺序走(不是死记,是依赖关系):
- 先跑通最小 RAG(Load/Split/Embed/FAISS/LCEL)
- 专门调 chunk 策略,理解“为什么这样切”
- 切换到持久化向量库(Chroma)
- 加入 Reranker,建立“粗召回+精排序”思维
- 把 RAG Tool 化,接入 Agent
- 用真实大文档压测,调 k/top_n/延迟/成本平衡
你会发现,RAG学习的本质不是“API数量”,而是你是否具备这三个能力:
- 检索质量意识(不是只看生成结果)
- 系统分层意识(离线索引 vs 在线问答)
- 工程演进意识(从demo到可维护能力)
最后说一句可能有点“反直觉”的结论: RAG 最难的从来不是“G(生成)”,而是“R(检索)”。 检索做对,模型上限才有机会发挥;检索做错,模型只是在认真胡说。
如果你仍想深挖RAG,又或者对Agent其他技术栈想有所了解,
建议浏览我的github库:github.com/Annyfee/age…
在这里,你可以直接运行我提供好的RAG代码与配套粗排/精排模型和相关检测文本。
同时我还配备了完整博客,方便你更深入的了解RAG。
如果有帮到你,欢迎给个star,一起交流学习。