當RAG遇上MCP...
原創隨著基礎模型能力的不斷增強,現實世界中的應用場景對人工智能提出了更高的要求,推動其向更具上下文感知能力、依賴外部信息檢索以及由智能智能體驅動的方向發展。為了滿足這些需求,諸如檢索增強生成(RAG)和MCP等關鍵技術正逐步成為構建現代AI系統的核心組成部分。
1. 簡要回顧
檢索增強生成(RAG)是一種結合語言模型與外部知識庫的方法,使模型能夠在生成回答之前,先通過向量搜索或語義搜索技術檢索相關的文檔內容。隨后,這些檢索到的信息會被整合進提示詞中,作為生成響應的依據。這種機制不僅有效緩解了模型在處理超出訓練數據范圍問題時的上下文長度限制,還顯著降低了“幻覺”現象的發生概率,使輸出更加準確且基于事實。
與此同時,MCP 提供了一種結構化的方式來編碼 AI 智能體的動態上下文,特別適用于需要長時間運行、具備角色認知和工具理解能力的復雜任務。它幫助智能體維護自身身份、管理任務狀態,并協調與外部環境的交互。可以將其視為圍繞 RAG 查詢所構建的一層輕量級協議,融合了元數據與推理狀態,從而實現更靈活的記憶存儲、上下文鏈接以及環境信息注入。這種設計大大增強了智能體系統的可擴展性和可控性,為未來智能化應用的發展提供了堅實的基礎。
2.RAG-MCP的工作流程示意
這個流程展示了一個現代 AI 應用程序中,如何將用戶的問題轉化為一個結構清晰、有上下文支持的智能響應過程。整個流程可以分為以下幾個關鍵步驟:
User Query
↓
Retriever → [Documents]
↓
MCP Formatter: {"role": "analyst", "task": "...", "context": [docs]}
↓
LLM (Gemini/Claude/GPT)
↓
Response grounded in context + protocol- 用戶查詢(User Query)用戶提出一個自然語言問題或請求,例如“最近的財報顯示公司收入增長了嗎?”
- 檢索器(Retriever)系統使用檢索器從外部知識庫(如數據庫、文檔庫或網絡資源)中查找與問題相關的文檔或信息。這些文檔可能包括最新的財報數據、市場分析報告等。
- MCP 格式化(MCP Formatter)MCP 是一種結構化的上下文管理機制。在此步驟中,系統將檢索到的信息與用戶的任務結合,并按照預定義的格式組織起來。例如:這一步確保了模型在生成答案時不僅了解問題本身,還清楚自己的角色和可用的信息來源。
- 角色(role):“分析師”——告訴模型它應該以專業視角回答問題;
- 任務(task):“分析收入變化趨勢”;
- 上下文(context):包含檢索到的相關文檔內容。
- 大語言模型(LLM)處理經過格式化的輸入被送入大型語言模型(如 Gemini、Claude 或 GPT),模型會基于提供的上下文和角色設定進行推理和生成。
- 響應生成(Response grounded in context + protocol)模型輸出一個既符合用戶需求,又建立在真實文檔和結構化指令基礎上的回答。這種響應是“有據可依”的,避免了傳統模型可能出現的“幻覺”問題(即編造信息)。
該流程融合了檢索增強生成(RAG) 和 智能體驅動的上下文管理(MCP),代表了一種先進的 AI 工作流設計方式。它不僅提升了模型回答問題的準確性,也增強了其在復雜業務場景下的實用性,例如企業決策支持、個性化客服、智能助手等領域。
3.實驗: 最小化的RAG-MCP流水線
3.1. 安裝依賴庫
pip install sentence-transformers faiss-cpu openai3.2. 配置向量存儲
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. 定義檢索器
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 封裝
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示例)
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. 完整的流水線
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 智能體能夠在多步驟、長周期的任務中表現得更加穩健和高效。


























