[智能体-255]:Retriever:RAG 核心底座、实现各类 RAG 的统一标准组件
一、定位
Retriever是 LangChain 顶层抽象接口(BaseRetriever),统一所有数据源的查询规范,不管是 Chroma/FAISS 本地向量库、Milvus 远端向量库、ES、文档目录、MCP 远程知识库,对外都统一.invoke(query:str) → List[Document]。
所有 RAG 本质:Query → Retriever → 召回文档 → 拼上下文 →LLM。
也就是发生在信息提交给大模型之前!!!
二、两种 RAG 用法(关键区分:固定链 / Agent 按需检索)
1. 固定 LCEL-RAG(Retriever作为链路节点,有程序员决定什么时候查,非 Tool)
全量请求强制检索,不能跳过检索:
python
运行
rag_chain = ( {"question": RunnablePassthrough(), "context": retriever | format_docs} | prompt | llm )- 特点:L3 级 Copilot,流程写死、简单稳定、企业标准知识库。
2. Agent-RAG(Retriever 包装成 Tool,LLM 自主决定查不查)
create_retriever_tool(retriever,name,desc)→ 转为标准BaseTool塞进agent 工具列表
python
运行
from langchain_core.tools.retriever import create_retriever_tool kb_tool = create_retriever_tool(retriever,"企业知识库","查内部制度") agent = create_tool_calling_agent(llm,[kb_tool],prompt)- 特点:L4 级 Agent,常识问题直接回答、私有资料才触发检索,节约向量库算力。也就是说,并不是固定的节点查询向量库,而是根据大模型的判断后再决定是否需要查询。
三、Retriever 常见实现分类
- 向量检索 Retriever(最常用)Chroma、FAISS、Milvus、PGVector 等向量库:
db.as_retriever(k=3),向量相似度召回。 - 关键词检索 Retriever:ElasticsearchRetriever、BM25Retriever,关键词匹配。
- 混合检索 Retriever:EnsembleRetriever:向量 + BM25 多路召回合并,提升召回精度。
- 远程MCP-Retriever(分布式架构)向量服务部署 MCP Server,远端通过 MCP 工具实现检索,LangChain 客户端靠 MCP Tool 间接调用检索能力。
- 父文档检索、多 Query 改写 RetrieverParentDocumentRetriever、MultiQueryRetriever(查询扩写多条再检索,RAG-Fusion 实现)。
四、Retriever 在 ReAct/FunctionCall Agent 无差别兼容
不管 ReActAgent 还是 FunctionCallAgent:
Retriever → create_retriever_tool → 标准 Tool → 直接入 tools 数组:两种 Agent 接入 RAG 代码完全一致,底层只是模型输出格式不同。
五、为什么说 Retriever 是 RAG 神器
- 解耦:更换向量引擎只需要换Retriever 实例,上层 RAG/Agent 代码不动;
- 双形态兼容:既能嵌入 LCEL 固定链路,又能包装 Tool 给 Agent 动态调用;
- 生态统一:LangChain 所有增强 RAG(多路召回、查询优化、分层检索)全部基于 Retriever 扩展;
- 无缝对接 MCP分布式知识库。
六、极简总结
- 不用 Retriever:手写 SQL / 接口查库,代码绑定存储,换库全改;
- 使用 Retriever:一套代码适配全数据库,随意切换固定 RAG / 智能 Agent-RAG。
