首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >当RAG遇上MCP...

当RAG遇上MCP...

作者头像
半吊子全栈工匠
发布2025-10-11 12:51:31
发布2025-10-11 12:51:31
2720
举报
文章被收录于专栏:喔家ArchiSelf喔家ArchiSelf

随着基础模型能力的不断增强,现实世界中的应用场景对人工智能提出了更高的要求,推动其向更具上下文感知能力、依赖外部信息检索以及由智能智能体驱动的方向发展。为了满足这些需求,诸如检索增强生成(RAG)和MCP等关键技术正逐步成为构建现代AI系统的核心组成部分。

1. 简要回顾

检索增强生成(RAG)是一种结合语言模型与外部知识库的方法,使模型能够在生成回答之前,先通过向量搜索或语义搜索技术检索相关的文档内容。随后,这些检索到的信息会被整合进提示词中,作为生成响应的依据。这种机制不仅有效缓解了模型在处理超出训练数据范围问题时的上下文长度限制,还显著降低了“幻觉”现象的发生概率,使输出更加准确且基于事实。

与此同时,MCP 提供了一种结构化的方式来编码 AI 智能体的动态上下文,特别适用于需要长时间运行、具备角色认知和工具理解能力的复杂任务。它帮助智能体维护自身身份、管理任务状态,并协调与外部环境的交互。可以将其视为围绕 RAG 查询所构建的一层轻量级协议,融合了元数据与推理状态,从而实现更灵活的记忆存储、上下文链接以及环境信息注入。这种设计大大增强了智能体系统的可扩展性和可控性,为未来智能化应用的发展提供了坚实的基础。

希望快速入门MCP 的朋友,可以阅读老码农的《MCP 极简入门》一书。

2.RAG-MCP的工作流程示意

这个流程展示了一个现代 AI 应用程序中,如何将用户的问题转化为一个结构清晰、有上下文支持的智能响应过程。整个流程可以分为以下几个关键步骤:

代码语言:javascript
复制
User Query
   ↓
Retriever → [Documents]
   ↓
MCP Formatter: {"role": "analyst", "task": "...", "context": [docs]}
   ↓
LLM (Gemini/Claude/GPT)
   ↓
Response grounded in context + protocol
  1. 用户查询(User Query) 用户提出一个自然语言问题或请求,例如“最近的财报显示公司收入增长了吗?”
  2. 检索器(Retriever) 系统使用检索器从外部知识库(如数据库、文档库或网络资源)中查找与问题相关的文档或信息。这些文档可能包括最新的财报数据、市场分析报告等。
  3. MCP 格式化(MCP Formatter) MCP 是一种结构化的上下文管理机制。在此步骤中,系统将检索到的信息与用户的任务结合,并按照预定义的格式组织起来。例如: 这一步确保了模型在生成答案时不仅了解问题本身,还清楚自己的角色和可用的信息来源。
    • 角色(role):“分析师”——告诉模型它应该以专业视角回答问题;
    • 任务(task):“分析收入变化趋势”;
    • 上下文(context):包含检索到的相关文档内容。
  4. 大语言模型(LLM)处理 经过格式化的输入被送入大型语言模型(如 Gemini、Claude 或 GPT),模型会基于提供的上下文和角色设定进行推理和生成。
  5. 响应生成(Response grounded in context + protocol) 模型输出一个既符合用户需求,又建立在真实文档和结构化指令基础上的回答。这种响应是“有据可依”的,避免了传统模型可能出现的“幻觉”问题(即编造信息)。

该流程融合了检索增强生成(RAG)智能体驱动的上下文管理(MCP),代表了一种先进的 AI 工作流设计方式。它不仅提升了模型回答问题的准确性,也增强了其在复杂业务场景下的实用性,例如企业决策支持、个性化客服、智能助手等领域。

3.实验: 最小化的RAG-MCP流水线

3.1. 安装依赖库

代码语言:javascript
复制
pip install sentence-transformers faiss-cpu openai

3.2. 配置向量存储

代码语言:javascript
复制
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np

# Documents to retrieve from
docs = [
    "RAG uses retrieval to improve generation.",
    "MCP is a protocol for embedding model behavior and task context.",
    "LangChain and LlamaIndex offer RAG frameworks.",
    "Vector stores allow semantic search over text."
]

# Create vector index
model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = model.encode(docs)

index = faiss.IndexFlatL2(embeddings.shape[1])
index.add(embeddings)

3.3. 定义检索器

代码语言:javascript
复制
def retrieve_top_k(query, k=2):
    query_vec = model.encode([query])
    D, I = index.search(np.array(query_vec), k)
    return [docs[i] for i in I[0]]

3.4. 构建MCP 封装

代码语言:javascript
复制
def build_mcp_prompt(user_query, context_docs):
    return f"""<MCP>
Role: Analyst Agent
Task: Answer user query with context-aware, grounded reasoning.

Context:
{"".join(f"- {doc}\n" for doc in context_docs)}

User Query:
{user_query}

Answer:"""

3.5. 生成响应 (OpenAI示例)

代码语言:javascript
复制
import openai
openai.api_key = "your-openai-key"

def generate_with_openai(prompt):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[{ "role": "user", "content": prompt }],
        temperature=0.5
    )
    return response.choices[0].message["content"]

3.6. 完整的流水线

代码语言:javascript
复制
query = "How does MCP help with AI agent context?"
retrieved = retrieve_top_k(query, k=2)
mcp_prompt = build_mcp_prompt(query, retrieved)
output = generate_with_openai(mcp_prompt)

print("🔍 MCP Prompt:\n", mcp_prompt)
print("\n💡 RAG-MCP Answer:\n", output)

4.小结

RAG-MCP 构成了智能、工具驱动型人工智能智能体的核心之一。无论您是借助 LangChain、LlamaIndex 等现成框架,还是自行开发编排系统,MCP 都能为 RAG(检索增强生成)流程引入清晰的结构化逻辑。这种结构不仅提升了智能体在处理复杂任务时的一致性和可控性,还增强了其决策过程的可解释性与整体能力,使 AI 智能体能够在多步骤、长周期的任务中表现得更加稳健和高效。

如果希望了解MCP 的价值,可以参考《拆解OpenAI最大对手的杀手锏:为什么会是MCP?》和《什么可能会定义人工智能的下一个十年?》;

如果想全面而有深度地了解MCP, 可以阅读《大模型应用系列:两万字解读MCP》;

如果想了解MCP 规范的原文, 可以参考我的译稿《MCP规范完整中译稿:2025-3-26版》;

如果想通过工具快速入手,可以使用《让你的服务变成MCP Server?FastAPI MCP 指南》;

如果选择使用 MCP 的开发框架, 可以参考《万字解读:8种常见框架,选择哪一种来开发MCP呢?》;

如果在现有的Agent 开发框架中使用MCP, 可以参考《当Semantic Kernel 遇上MCP......》和《Pydantic AI与MCP相逢》;

如果希望在大模型应用的中使用MCP,可以借鉴《在大模型应用中使用长短记忆: OpenMemory MCP》;

如果希望集成多个MCP服务,可以利用《采用LangGraph集成多个MCP服务器的应用

如果希望了解基于MCP的架构模式,有全网首发的文字《全网首发:MCP 的10种架构模式》;

如果希望解决MCP应用的安全性问题,有全网首发的文字《全网首发:安全性问题,使MCP成为AI应用的双刃剑,如何化险为夷呢?》;

如果想对比 MCP 与其他智能体协议的区别, 🉑参考《智能体间协作的"巴别塔困境"如何破解?解读Agent通信4大协议:MCP/ACP/A2A/ANP》;

如果希望快速入门MCP,请阅读老码农的作品——

【关联阅读】

  • 大模型应用的10种架构模式
  • 7B?13B?175B?解读大模型的参数
  • 大模型应用系列:从Ranking到Reranking
  • 大模型应用系列:Query 变换的示例浅析
  • 从零构建大模型之Transformer公式解读
  • 如何选择Embedding Model?关于嵌入模型的10个思考
  • 万字揭秘:生成式AI浪潮中的架构模式
  • 抽象的进化:AgentOps
  • 拆解OpenAI最大对手的杀手锏:为什么会是MCP?
  • 智能体间协作的"巴别塔困境"如何破解?解读Agent通信4大协议:MCP/ACP/A2A/ANP
  • 解读文本嵌入:语义表达的练习
  • 解读知识图谱的自动构建
  • “提示工程”的技术分类
  • 大模型系列:提示词管理
  • 提示工程中的10个设计模式
  • 解读:基于图的大模型提示技术
  • 大模型微调:RHLF与DPO浅析
  • Chunking:基于大模型RAG系统中的文档分块
  • 大模型应用框架:LangChain与LlamaIndex的对比选择
  • 解读大模型应用的可观测性
  • 大模型系列之解读MoE
  • 在大模型RAG系统中应用知识图谱
  • 面向知识图谱的大模型应用
  • 让知识图谱成为大模型的伴侣
  • 如何构建基于大模型的App
  • Qcon2023: 大模型时代的技术人成长(简)
  • 论文学习笔记:增强学习应用于OS调度
  • 《深入浅出Embedding》随笔
  • LLM的工程实践思考
  • 大模型应用设计的10个思考
  • 基于大模型(LLM)的Agent 应用开发
  • 解读大模型的微调
  • 解读向量数据库
  • 解读向量索引
  • 解读ChatGPT中的RLHF
  • 解读大模型(LLM)的token
  • 解读提示词工程(Prompt Engineering)
  • 解读Toolformer
  • 解读TaskMatrix.AI
  • 解读LangChain
  • 解读LoRA
  • 解读RAG
  • 大模型应用框架之Semantic Kernel
  • 浅析多模态机器学习
  • 大模型应用于数字人
  • 深度学习架构的对比分析
  • 老码农眼中的大模型(LLM)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喔家ArchiSelf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简要回顾
  • 2.RAG-MCP的工作流程示意
  • 3.实验: 最小化的RAG-MCP流水线
    • 3.1. 安装依赖库
    • 3.2. 配置向量存储
    • 3.3. 定义检索器
    • 3.4. 构建MCP 封装
    • 3.5. 生成响应 (OpenAI示例)
    • 3.6. 完整的流水线
  • 4.小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档