第七章:Server/Client Communication

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,记得带伞哦!

内部实现揭秘:通信的“快递分拣流程”

流程分解(用简单序列图演示)
用户 MCPRunner MCPServer WeatherAgent 输入"上海天气?" 通过MCP协议发送请求(货车/无人机) 分发任务给对应代理 返回天气数据 通过MCP协议返回结果 显示回答 用户 MCPRunner MCPServer WeatherAgent
关键代码解析

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代理通过远程服务器响应更多复杂请求了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱花穿过千岛湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值