Chapter 7: Server/Client Communication
从工具集成到服务器通信:如何让AI“远程协作”?
在上一章的工具与LLM集成中,我们已经能让AI调用真实世界的工具。但你是否想过:如果多个用户同时请求天气查询,或者需要远程控制AI代理,该怎么办?就像快递公司需要统一的包裹格式和运输方式一样,本章将介绍如何通过服务器-客户端通信实现跨设备的AI协作。
核心问题:如何让AI代理“像快递员一样远程工作”?
想象你是一家快递公司的经理:
- 客户端:用户填写的寄件单(类似我们的命令行请求)
- 服务器:快递分拣中心(负责处理所有代理任务)
- 运输方式:货车(stdio)或无人机(sse)
通过本章学习,我们将实现:
✅ 通过不同网络协议远程控制AI代理
✅ 配置多个服务器并切换使用
✅ 支持实时消息流式传输
核心概念分解
1. MCP协议:AI的“通用快递单格式”
就像快递单有统一的地址、重量、收件人信息,MCP协议定义了:
- 请求格式:用户问题、代理参数等
- 响应格式:AI回答、错误信息等
- 状态码:200(成功)、500(服务器错误)等
# 示例:MCP协议请求结构(简化)
{
"type": "request",
"content": "今天天气如何?",
"agent_id": "weather_agent"
}
2. 传输方式:选择“货车”还是“无人机”
支持两种通信方式:
- stdio(标准输入输出):通过命令行直接连接(适合本地测试)
- sse(服务器发送事件):通过网络实时传输(适合远程协作)
# 配置示例:选择stdio模式(货车)
{
"type": "stdio",
"command": "python run_mcp_server.py"
}
# 配置示例:选择sse模式(无人机)
{
"type": "sse",
"url": "http://127.0.0.1:8000/sse"
}
3. 服务器配置:管理“快递分拣中心”
通过config/mcp.json
文件配置多个服务器:
{
"mcpServers": {
"local": {
"type": "stdio",
"command": "python run_mcp_server.py"
},
"remote": {
"type": "sse",
"url": "https://api.example.com/sse"
}
}
}
如何用服务器通信解决问题?
场景:远程查询上海天气
步骤1:启动服务器
# 启动本地stdio服务器(货车模式)
python run_mcp_server.py --transport stdio
# 或启动远程sse服务器(无人机模式)
python run_mcp_server.py --transport sse
步骤2:配置客户端连接
# 使用stdio连接本地服务器(货车)
python run_mcp.py -c stdio -i
# 使用sse连接远程服务器(无人机)
python run_mcp.py -c sse --server-url "https://api.example.com/sse" -i
步骤3:运行交互模式
Enter your request: 上海今天天气如何?
Agent: 上海今天多云,气温28°C,记得带伞哦!
内部实现揭秘:通信的“快递分拣流程”
流程分解(用简单序列图演示)
关键代码解析
1. 客户端初始化(run_mcp.py片段)
# 根据连接类型选择协议
async def initialize(self, connection_type: str, server_url: str | None = None):
if connection_type == "stdio":
await self.agent.initialize(
connection_type="stdio",
command=sys.executable,
args=["-m", self.server_reference] # 启动本地服务器
)
else:
await self.agent.initialize(
connection_type="sse",
server_url=server_url # 连接远程URL
)
2. 服务器启动(run_mcp_server.py片段)
# 根据传输方式选择协议
server = MCPServer()
server.run(transport=args.transport) # stdio/sse
深入理解服务器-客户端通信
通过本章,你已掌握:
✅ 如何通过MCP协议标准化通信格式
✅ 根据需求选择stdio或sse传输方式
✅ 配置多服务器支持灵活切换
小结与展望
通过服务器-客户端通信,我们实现了:
✅ 跨设备的远程任务处理
✅ 实时消息流式传输支持
✅ 多服务器环境的配置管理
下一章我们将探讨错误处理,学习如何让系统像“快递客服”一样优雅应对异常——现在你可以尝试修改配置文件,让AI代理通过远程服务器响应更多复杂请求了!