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 落地最核心的架构范式。

延伸阅读: