30 秒快速回答
Agent 负责决策和规划,RAG 负责补充外部知识,MCP 负责连接外部工具。 三者的关系可以类比为:Agent 是大脑(想清楚做什么),RAG 是记忆库(查资料),MCP 是双手(操作外部系统)。单独使用任何一项都有明显短板,组合在一起才能构建真正可落地的企业级 AI 应用。
为什么需要三者协同?
很多人接触 AI 开发时,会依次遇到三个问题:
| 阶段 | 痛点 | 对应技术 |
|---|---|---|
| 第一阶段 | 大模型知识有截止日期,回答不了私有数据 | RAG |
| 第二阶段 | 模型只会”说”,不会”做”,无法执行多步任务 | Agent |
| 第三阶段 | 每接一个新工具都要写一套适配代码,集成成本高 | MCP |
单独用 RAG,你能做一个知识库问答,但没办法让它去查数据库、调 API、发邮件。单独用 Agent,它能规划任务,但没有外部知识库就只能靠模型自身知识硬撑。单独用 MCP,工具连接标准化了,但没有规划能力就只能单步调用。
三者协同才是正确姿势。
架构总览:三者的分工
在典型的企业 AI 架构中,三者的关系如下:
用户请求
│
▼
┌─────────────────────────────┐
│ Agent(大脑) │
│ - 理解意图 │
│ - 任务拆解与规划 │
│ - 反思与纠错 │
│ - 决定何时查 / 何时调用工具 │
└──────┬──────────┬───────────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ RAG │ │ MCP │
│ (记忆库) │ │ (双手) │
│ │ │ │
│ 向量检索 │ │ 标准化协议 │
│ 知识图谱 │ │ 工具连接 │
│ 文档库 │ │ API 调用 │
└──────────┘ └──────────┘
Agent 是总指挥。 RAG 和 MCP 都是它手里的资源,Agent 在每一步推理中动态决定:需要查资料就调 RAG,需要操作外部系统就通过 MCP 调工具。
实战:用 LangGraph 搭建 Agent + RAG + MCP 组合
下面通过一个实际场景来演示三者如何配合。假设你要做一个「智能运维助手」——用户问”数据库连接池满了怎么办”,助手需要查内部运维手册(RAG),然后自动检查数据库状态(MCP)。
1. 定义 MCP 工具
先通过 MCP 协议连接数据库检查工具:
# mcp_tools.py - MCP Server 端
from mcp.server import Server
from mcp.types import Tool
server = Server("db-ops")
@server.tool()
async def check_db_connections(host: str) -> dict:
"""检查指定数据库当前连接数"""
# 实际项目中连接数据库查询
return {
"host": host,
"active_connections": 142,
"max_connections": 200,
"usage_percent": 71.0
}
@server.tool()
async def get_slow_queries(host: str, limit: int = 10) -> list:
"""获取最近慢查询列表"""
return [
{"sql": "SELECT * FROM orders WHERE...", "duration_ms": 3200},
{"sql": "UPDATE inventory SET...", "duration_ms": 2800},
]
2. 搭建 RAG 知识库
# rag_setup.py
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
# 加载运维手册
with open("ops_manual.txt") as f:
docs = f.read()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.create_documents([docs])
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=OpenAIEmbeddings(),
persist_directory="./ops_kb"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
3. Agent 编排:核心逻辑
# agent.py - 使用 LangGraph 编排
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from typing import TypedDict, Annotated
class AgentState(TypedDict):
messages: Annotated[list, "对话历史"]
context: str # RAG 检索到的上下文
tool_results: list # MCP 工具调用结果
def retrieve(state: AgentState) -> AgentState:
"""节点1: RAG 检索"""
query = state["messages"][-1].content
docs = retriever.invoke(query)
state["context"] = "\n".join([d.page_content for d in docs])
return state
def reason(state: AgentState) -> AgentState:
"""节点2: Agent 推理 + 决策"""
system_prompt = f"""你是运维专家。参考以下知识库内容:
{state["context"]}
当诊断需要实际数据时,调用工具获取。
可用工具:check_db_connections, get_slow_queries"""
# 调用 LLM,让其决定是否需要调工具
response = llm_with_tools.invoke(
[{"role": "system", "content": system_prompt}] + state["messages"]
)
state["messages"].append(response)
return state
def should_use_tools(state: AgentState) -> str:
"""路由:判断是否需要调用 MCP 工具"""
last_msg = state["messages"][-1]
if hasattr(last_msg, "tool_calls") and last_msg.tool_calls:
return "tools"
return "end"
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("retrieve", retrieve)
workflow.add_node("reason", reason)
workflow.add_node("tools", ToolNode(tools))
workflow.set_entry_point("retrieve")
workflow.add_edge("retrieve", "reason")
workflow.add_conditional_edges("reason", should_use_tools, {
"tools": "tools",
"end": END
})
workflow.add_edge("tools", "reason") # 工具结果返回后继续推理
app = workflow.compile()
关键设计点:Agent 先通过 RAG 获取知识背景,再基于上下文推理,需要具体数据时通过 MCP 调工具,工具结果返回后 Agent 继续推理——形成「检索 → 推理 → 行动 → 再推理」的循环。
协同模式对比:何时用哪种组合?
不是所有场景都需要三者全上。根据需求复杂度选择:
| 场景 | 组合方案 | 典型例子 |
|---|---|---|
| 内部文档问答 | 仅 RAG | 公司制度查询、产品手册问答 |
| 单步工具调用 | RAG + MCP | “帮我查一下今天的销售额” |
| 多步自动化任务 | Agent + MCP | 自动发周报:查数据→生成图表→发邮件 |
| 复杂诊断/分析 | Agent + RAG + MCP | 运维排障、法律案例分析、金融研报生成 |
判断标准很简单:需要查私有知识→加 RAG;需要操作外部系统→加 MCP;任务超过 2 步且需要动态决策→加 Agent。
常见踩坑与避坑指南
坑 1:把 RAG 当成万能药。 很多团队上来就接向量库,但检索质量取决于文档切分策略和 Embedding 模型选择。先做好文档预处理,再谈 RAG。
坑 2:Agent 规划过度。 简单任务不需要 Agent,直接 function calling 就够了。Agent 的规划步骤越多,出错概率越大。遵循「够用原则」——能一步搞定的绝不拆两步。
坑 3:MCP 工具粒度过粗或过细。 工具设计应遵循「单一职责」原则:一个 Tool 只做一件事。fix_all_database_issues() 这种万能工具会让 Agent 难以精确调用。
坑 4:忽视安全护栏。 Agent 有了操作能力后,必须在工具层加权限校验。MCP 调用数据库时,限定只读账号;调用发送接口时,加人工确认环节。
总结
Agent + RAG + MCP 不是三个独立技术的简单拼接,而是一套分层协作的架构思想:
- Agent 做决策中枢,负责”想清楚再干”
- RAG 做知识底座,负责”查得到、查得准”
- MCP 做工具总线,负责”接得上、调得动”
三者的关系就像人的神经系统:大脑(Agent)指挥,记忆(RAG)供料,双手(MCP)执行。理解了这层关系,你就掌握了 2025-2026 年企业 AI 落地最核心的架构范式。
延伸阅读: