如何将AI RAG MCP AGENTS 串联起来形成知识体系
AI、RAG、MCP、Agents 是当前人工智能领域,尤其是应用层最热门和关联最紧密的几个概念。它们之间不是相互割裂的,而是一种层层递进、相互增强的关系。我们使用AI实际上就是使用大模型(LLM),RAG是增强检索生成文本搜索,MCP是提高智能流程处理的相关工具,而最终那个执行者掌控全局的类似人一样的代理被称为智能体。
好的,这是一个非常棒的问题!AI、RAG、MCP、Agents 是当前人工智能领域,尤其是应用层最热门和关联最紧密的几个概念。它们之间不是相互割裂的,而是一种层层递进、相互增强的关系。
我们可以用一个简单的比喻来理解:
-
AI(大脑): 就像一个博学但记忆模糊、没有手脚的“天才”。它有能力思考和推理,但知识可能过时,也无法行动。
-
RAG(参考资料库 + 记忆增强): 给这个“天才”一个接入最新、准确、特定领域资料库的能力。当它回答问题前,会先去查资料,确保答案的准确性和时效性。
-
MCP(工具和技能包): 给这个“天才”配备了一套“瑞士军刀”或“技能工具箱”,让它能使用外部工具,比如计算器、搜索引擎、数据库、API等,从而执行具体任务。
-
Agent(具备自主性的个体): 将以上三者整合起来,形成一个可以自主感知、规划、决策和行动的“智能体”。它知道何时使用大脑(AI)思考,何时去查资料(RAG),何时调用工具(MCP)来达成一个复杂的目标。
Agents智能体知识体系
下面我们来详细拆解它们各自是什么,以及它们之间的关系。
1. 核心概念定义
-
AI: 这里通常指大语言模型,是整个技术栈的核心“引擎”。它提供了最基础的理解、生成、推理和对话能力。例如 GPT、Llama、Claude 等。
-
RAG: 检索增强生成。一种技术架构,用于解决大模型的“幻觉”、知识陈旧和缺乏领域知识的问题。其工作流程是:
-
检索: 当用户提出问题时,先从外部知识库(如公司文档、数据库、网页)中查找最相关的信息。
-
增强: 将这些检索到的相关信息作为上下文,和用户的问题一起提供给大模型。
-
生成: 大模型基于这些准确的上下文信息来生成最终答案。
-
-
MCP: 模型上下文协议。这是一个由 Anthropic 提出的开放协议,旨在标准化LLM与外部工具和数据的连接方式。你可以把它理解为LLM世界的 “USB-C标准” 。它定义了一套规范,让开发者可以轻松地为LLM创建和连接各种“工具”(如搜索、执行代码、访问数据库等),而无需关心底层模型是什么。
-
Agents: 智能体。一个能够感知环境、进行规划、并执行一系列动作来达成特定目标的系统。一个真正的Agent具备自主性和工具使用能力。它的典型思考循环是:
-
思考: 分析当前情况和目标。
-
规划: 决定下一步该做什么,可能需要分解任务。
-
行动: 执行一个动作,比如调用一个工具(RAG检索或MCP工具)。
-
观察: 获取行动的结果,并基于此进行下一轮思考,直到任务完成。
-
2. 它们之间的关系
这四者共同构成了构建下一代AI应用的核心技术栈,关系如下图所示:
AI 是基础
一切的基础。没有强大的大语言模型,后续的RAG、MCP和Agents都无从谈起。它提供了最核心的认知能力。
RAG 和 MCP 是AI的“增强组件”
它们从不同维度扩展和增强了基础AI模型的能力:
-
RAG 增强的是“知识”和“记忆”。它让AI的回答更准确、更专业、更及时。
-
MCP 增强的是“行动”和“能力”。它让AI能够与世界互动,执行具体操作。
RAG 和 MCP 可以独立使用,也可以协同工作。 一个Agent可以先用RAG从公司知识库检索信息,再用MCP工具调用API将信息录入系统。
Agents 是集大成者的“终极形态”
Agent是一个更高层次的概念,它将AI的推理能力、RAG的知识获取能力和MCP的工具使用能力整合到一个自主的系统中。
-
一个简单的、只会回答问题的聊天机器人不是Agent。
-
一个能够“思考”:“用户想订机票,我需要先通过RAG查询公司的差旅政策,然后用MCP工具搜索航班,最后再调用另一个MCP工具完成预订” 的系统,就是一个Agent。
3. 实际应用场景示例
场景:公司内部的“智能财务助手Agent”
-
用户提问: “帮我为下周三去北京的商务旅行预订一张经济舱机票,预算不超过5000元。”
-
Agent的思考与行动流程:
-
步骤1(规划): Agent(利用AI进行推理)认为需要先确认公司差旅政策。
-
步骤2(行动 - RAG): 调用RAG功能,在公司内部财务制度文档中检索“差旅标准”、“北京”、“机票”等相关规定。RAG返回信息:“前往北京的经济舱机票标准为5500元。”
-
步骤3(规划): Agent判断用户预算(5000元)低于公司标准(5500元),需要寻找特价票。
-
步骤4(行动 - MCP): 调用MCP工具集中的“航班搜索工具”,输入条件:目的地北京、下周三、经济舱。工具返回航班列表和价格。
-
步骤5(规划与行动): Agent发现有一个4800元的航班符合要求。然后它调用另一个MCP工具——“预订工具”,并传入航班信息,完成预订。
-
步骤6(回复): Agent向用户回复:“已根据您的预算(5000元内)和公司差旅标准,为您预订了XX航空下周三XX点的经济舱机票,价格4800元。预订详情已发送至您的邮箱。”
-
在这个例子中,AI是大脑,RAG提供了准确的内部知识,MCP提供了搜索和预订的工具,而Agent则是那个统筹一切、自主完成整个复杂任务的“助理”。
总结
-
AI 是发动机。
-
RAG 是导航和地图(提供信息)。
-
MCP 是工具箱和扩展接口(提供能力)。
-
Agent 是能够自己开车、看地图、用工具,最终把你从A点带到B点的自动驾驶汽车。
它们共同构成了构建强大、可靠、实用的下一代人工智能应用的技术基石。
智能机票预订Agent DEMO 设计
下面我来为你设计一个完整的机票预订Agent Demo示例,展示如何整合AI、RAG、MCP来构建一个智能机票预订系统。
系统架构设计

1. 核心组件准备
A. RAG系统 - 公司差旅政策知识库
数据准备 (company_policy.json):
{
"travel_policy": {
"flight_standards": {
"beijing": {"economy": 5500, "business": 12000},
"shanghai": {"economy": 5000, "business": 11000},
"guangzhou": {"economy": 4500, "business": 10000}
},
"approval_required": {
"domestic": 10000,
"international": 20000
},
"preferred_airlines": ["中国国航", "东方航空", "南方航空"],
"advance_booking": "国内航班需提前3天预订"
}
}
RAG实现代码:
import chromadb
from sentence_transformers import SentenceTransformer
import json
class TravelPolicyRAG:
def __init__(self):
self.client = chromadb.Client()
self.collection = self.client.create_collection("travel_policy")
self.embedder = SentenceTransformer('BAAI/bge-small-zh')
# 初始化知识库
self._initialize_knowledge_base()
def _initialize_knowledge_base(self):
with open('company_policy.json', 'r', encoding='utf-8') as f:
policy = json.load(f)
documents = []
metadatas = []
ids = []
# 扁平化政策数据
def flatten_dict(d, prefix=""):
items = []
for k, v in d.items():
if isinstance(v, dict):
items.extend(flatten_dict(v, f"{prefix}{k}."))
else:
items.append((f"{prefix}{k}", str(v)))
return items
flat_items = flatten_dict(policy)
for i, (key, value) in enumerate(flat_items):
documents.append(f"{key}: {value}")
metadatas.append({"type": "policy", "key": key})
ids.append(f"policy_{i}")
# 添加嵌入到向量数据库
embeddings = self.embedder.encode(documents).tolist()
self.collection.add(
embeddings=embeddings,
documents=documents,
metadatas=metadatas,
ids=ids
)
def query_policy(self, question: str) -> str:
"""查询差旅政策"""
query_embedding = self.embedder.encode([question]).tolist()[0]
results = self.collection.query(
query_embeddings=[query_embedding],
n_results=3
)
if results['documents']:
return "\n".join(results['documents'][0])
return "未找到相关政策信息"
B. MCP工具 - 航班搜索和预订
MCP服务器实现 (flight_mcp_server.py):
import json
import asyncio
from mcp import MCPServer, types
class FlightMCPServer:
def __init__(self):
self.server = MCPServer("flight-tools")
# 模拟航班数据
self.flight_data = {
"北京": [
{"flight_no": "CA1234", "airline": "中国国航", "departure": "09:00",
"price": 4800, "seats": 5, "class": "economy"},
{"flight_no": "MU5678", "airline": "东方航空", "departure": "14:30",
"price": 5200, "seats": 3, "class": "economy"}
],
"上海": [
{"flight_no": "CZ9012", "airline": "南方航空", "departure": "10:15",
"price": 4500, "seats": 8, "class": "economy"}
]
}
self._register_tools()
def _register_tools(self):
@self.server.tool()
async def search_flights(destination: str, date: str, max_price: int = None) -> str:
"""搜索航班信息
Args:
destination: 目的地城市
date: 出行日期 (YYYY-MM-DD)
max_price: 最高价格限制
"""
if destination not in self.flight_data:
return f"未找到到{destination}的航班"
flights = self.flight_data[destination]
if max_price:
flights = [f for f in flights if f['price'] <= max_price]
if not flights:
return "没有符合条件的航班"
result = [f"找到 {len(flights)} 个到{destination}的航班:"]
for flight in flights:
result.append(
f"- {flight['flight_no']} {flight['airline']} "
f"{flight['departure']} ¥{flight['price']} "
f"余票:{flight['seats']}"
)
return "\n".join(result)
@self.server.tool()
async def book_flight(flight_no: str, passenger_name: str, passenger_id: str) -> str:
"""预订航班
Args:
flight_no: 航班号
passenger_name: 乘客姓名
passenger_id: 身份证号
"""
# 在实际系统中这里会调用航空公司API
for city_flights in self.flight_data.values():
for flight in city_flights:
if flight['flight_no'] == flight_no:
if flight['seats'] > 0:
flight['seats'] -= 1
booking_ref = f"BK{flight_no}{passenger_id[-4:]}"
return (f"预订成功! 航班: {flight_no}\n"
f"乘客: {passenger_name}\n"
f"预订号: {booking_ref}\n"
f"状态: 已确认")
else:
return "抱歉,该航班已无余票"
return "未找到指定航班"
@self.server.tool()
async def get_weather(destination: str, date: str) -> str:
"""获取目的地天气信息"""
# 模拟天气数据
weather_data = {
"北京": "晴朗,15-25°C,适宜出行",
"上海": "多云,18-28°C,适宜出行",
"广州": "阵雨,22-30°C,建议带伞"
}
return weather_data.get(destination, "天气信息暂不可用")
async def run(self):
await self.server.run()
C. AI Agent - 智能决策核心
Agent实现 (flight_agent.py):
from openai import OpenAI
import json
import re
class FlightBookingAgent:
def __init__(self, api_key: str):
self.client = OpenAI(api_key=api_key)
self.rag = TravelPolicyRAG()
self.available_tools = {
"search_flights": "搜索航班信息",
"book_flight": "预订指定航班",
"get_weather": "获取目的地天气",
"query_policy": "查询公司差旅政策"
}
def _extract_tool_call(self, response: str) -> dict:
"""从AI响应中提取工具调用信息"""
tool_pattern = r'【(\w+)】:\s*(.+)'
match = re.search(tool_pattern, response)
if match:
return {"tool": match.group(1), "params": match.group(2)}
return None
def _parse_tool_params(self, tool_name: str, params_str: str) -> dict:
"""解析工具参数"""
if tool_name == "search_flights":
# 解析 "北京, 2024-01-15, 5000" 这样的参数
parts = [p.strip() for p in params_str.split(",")]
return {
"destination": parts[0],
"date": parts[1] if len(parts) > 1 else None,
"max_price": int(parts[2]) if len(parts) > 2 else None
}
elif tool_name == "book_flight":
parts = [p.strip() for p in params_str.split(",")]
return {
"flight_no": parts[0],
"passenger_name": parts[1] if len(parts) > 1 else "张三",
"passenger_id": parts[2] if len(parts) > 2 else "110101199001011234"
}
elif tool_name == "get_weather":
parts = [p.strip() for p in params_str.split(",")]
return {
"destination": parts[0],
"date": parts[1] if len(parts) > 1 else None
}
return {"query": params_str}
def process_request(self, user_request: str) -> str:
"""处理用户请求"""
print(f"用户请求: {user_request}")
# 步骤1: 规划决策
planning_prompt = f"""
你是一个机票预订助手。用户请求: {user_request}
可用工具:
- query_policy: 查询公司差旅政策
- search_flights: 搜索航班 (参数: 目的地,日期,最高价格)
- book_flight: 预订航班 (参数: 航班号,乘客姓名,身份证号)
- get_weather: 获取天气信息 (参数: 目的地,日期)
请分析需要按什么顺序调用哪些工具,用【工具名】: 参数 的格式回答。
示例: 【query_policy】: 北京差旅标准
"""
planning_response = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": planning_prompt}],
temperature=0
)
plan = planning_response.choices[0].message.content
print(f"执行计划: {plan}")
# 步骤2: 执行工具调用
final_result = []
lines = plan.split('\n')
for line in lines:
tool_call = self._extract_tool_call(line)
if tool_call:
tool_name = tool_call["tool"]
params = self._parse_tool_params(tool_name, tool_call["params"])
print(f"执行工具: {tool_name} 参数: {params}")
# 执行相应的工具
if tool_name == "query_policy":
result = self.rag.query_policy(params.get("query", ""))
elif tool_name in ["search_flights", "book_flight", "get_weather"]:
# 这里应该调用MCP客户端来执行工具
result = self._call_mcp_tool(tool_name, params)
else:
result = f"未知工具: {tool_name}"
final_result.append(f"{tool_name}结果: {result}")
print(f"工具结果: {result}")
# 步骤3: 生成最终回复
if final_result:
summary_prompt = f"""
用户原始请求: {user_request}
执行结果:
{chr(10).join(final_result)}
请根据以上信息给用户一个完整、友好的回复。
"""
summary_response = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": summary_prompt}],
temperature=0.7
)
return summary_response.choices[0].message.content
else:
return "未能处理您的请求"
def _call_mcp_tool(self, tool_name: str, params: dict) -> str:
"""模拟调用MCP工具"""
# 在实际实现中,这里会通过MCP客户端调用远程工具
if tool_name == "search_flights":
return f"模拟搜索: 到{params['destination']}的航班 (实际会调用MCP)"
elif tool_name == "book_flight":
return f"模拟预订: 航班{params['flight_no']} (实际会调用MCP)"
elif tool_name == "get_weather":
return f"模拟天气: {params['destination']}天气良好"
return "工具调用失败"
2. 完整工作流演示
# 主程序
def main():
# 初始化Agent (需要设置你的OpenAI API Key)
agent = FlightBookingAgent(api_key="your-openai-api-key")
# 示例用户请求
user_requests = [
"帮我预订下周三去北京的经济舱机票,预算不超过5000元",
"查询一下公司去上海的差旅政策,然后看看有没有明天下午的航班",
"我要去广州出差,先看看政策标准,再查查天气和航班"
]
for request in user_requests:
print("\n" + "="*50)
print(f"处理请求: {request}")
print("="*50)
result = agent.process_request(request)
print(f"\n最终回复:\n{result}")
if __name__ == "__main__":
main()
3. 预期执行流程对于请求"帮我预订下周三去北京的经济舱机票,预算不超过5000元":
- Agent规划:

-
工具执行:
-
RAG返回:
flight_standards.beijing.economy: 5500 -
MCP搜索返回航班列表
-
MCP返回天气信息
-
-
最终回复:

4. 进阶功能扩展
多步骤对话Agent:
class ConversationalFlightAgent(FlightBookingAgent):
def __init__(self, api_key: str):
super().__init__(api_key)
self.conversation_history = []
def chat(self, user_message: str) -> str:
self.conversation_history.append({"role": "user", "content": user_message})
# 基于对话历史进行决策
response = self.process_request_with_history(user_message)
self.conversation_history.append({"role": "assistant", "content": response})
return response
这个Demo展示了如何将:
-
AI (GPT-4) 作为决策大脑
-
RAG (公司政策查询) 提供专业知识
-
MCP (航班搜索/预订工具) 执行具体操作
-
Agent 整合所有组件,实现智能工作流
在实际部署时,你需要:
-
配置真实的OpenAI API密钥
-
部署MCP服务器并建立客户端连接
-
使用真实的航班API替换模拟数据
-
添加错误处理和重试机制
-
实现用户会话管理
这个架构具有很强的扩展性,可以轻松添加酒店预订、报销申请等其他商务旅行相关功能。
5. 完整可运行示例
# requirements.txt
# openai
# chromadb
# python-dotenv
import openai
import chromadb
import json
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
class TravelPolicyRAG:
def __init__(self):
self.client = chromadb.Client()
self.collection = self.client.create_collection("travel_policy")
openai.api_key = os.getenv("OPENAI_API_KEY")
self._initialize_knowledge_base()
def _get_embedding(self, text: str) -> list:
"""使用OpenAI API获取文本嵌入"""
try:
response = openai.embeddings.create(
input=text,
model="text-embedding-3-small"
)
return response.data[0].embedding
except Exception as e:
print(f"获取嵌入时出错: {e}")
return [0.1] * 1536 # text-embedding-3-small的维度
def _initialize_knowledge_base(self):
# 创建示例政策数据
policy = {
"travel_policy": {
"flight_standards": {
"beijing": {"economy": 5500, "business": 12000},
"shanghai": {"economy": 5000, "business": 11000},
"guangzhou": {"economy": 4500, "business": 10000}
},
"approval_required": {
"domestic": 10000,
"international": 20000
},
"preferred_airlines": ["中国国航", "东方航空", "南方航空"],
"advance_booking": "国内航班需提前3天预订"
}
}
documents = []
metadatas = []
ids = []
def flatten_dict(d, prefix=""):
items = []
for k, v in d.items():
if isinstance(v, dict):
items.extend(flatten_dict(v, f"{prefix}{k}."))
else:
items.append((f"{prefix}{k}", str(v)))
return items
flat_items = flatten_dict(policy)
for i, (key, value) in enumerate(flat_items):
doc_text = f"{key}: {value}"
documents.append(doc_text)
metadatas.append({"type": "policy", "key": key})
ids.append(f"policy_{i}")
# 批量获取嵌入
embeddings = []
for doc in documents:
embedding = self._get_embedding(doc)
embeddings.append(embedding)
# 添加到向量数据库
self.collection.add(
embeddings=embeddings,
documents=documents,
metadatas=metadatas,
ids=ids
)
print("知识库初始化完成!")
def query_policy(self, question: str) -> str:
"""查询差旅政策"""
query_embedding = self._get_embedding(question)
results = self.collection.query(
query_embeddings=[query_embedding],
n_results=3
)
if results['documents']:
return "\n".join(results['documents'][0])
return "未找到相关政策信息"
# 测试
if __name__ == "__main__":
# 确保设置了 OPENAI_API_KEY 环境变量
rag = TravelPolicyRAG()
test_questions = [
"去北京的差旅标准是多少?",
"经济舱的报销标准",
"需要提前多久预订机票?"
]
for question in test_questions:
print(f"问题: {question}")
answer = rag.query_policy(question)
print(f"回答: {answer}\n")
环境配置
创建 .env 文件:
env
OPENAI_API_KEY=你的OpenAI_API密钥
安装依赖:
bash
pip install openai chromadb python-dotenv
推荐使用方案(OpenAI API),因为它:
-
最稳定可靠
-
无需处理本地模型依赖
-
性能优秀
-
适合Demo和原型开发
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)