[Nacos/Docker/MCP] Nacos .x : 为 AI MCP 而生
·
[Nacos/Docker/MCP] Nacos .x : 为 AI MCP 而生
引言:从微服务到 AI 的桥梁在微服务架构中,Nacos 是服务发现和配置管理的标杆工具。随着 AI 时代的到来,MCP(Model Context Protocol,模型上下文协议)成为连接 AI 模型与外部数据/工具的关键标准。Nacos 3.x 版本正是为应对这一变革而生:它不仅保留了传统的注册中心和配置中心能力,更原生支持 MCP 协议,让 AI 模型能够动态发现服务、获取上下文配置。本文将实战演示如何在 Docker 中部署 Nacos 3.x,并通过 Python 代码实现 AI 模型通过 MCP 协议与 Nacos 交互,最终打造一个智能服务调用的闭环。## 环境准备:Docker 部署 Nacos 3.x首先,我们需要一个可运行的 Nacos 3.x 实例。使用 Docker 是最快捷的方式。bash# 创建自定义网络,方便后续服务间通信docker network create nacos-net# 启动 Nacos 3.x(单机模式,开启鉴权)docker run -d \ --name nacos-server \ --network nacos-net \ -p 8848:8848 \ -p 9848:9848 \ -e MODE=standalone \ -e NACOS_AUTH_ENABLE=true \ -e NACOS_AUTH_TOKEN=your-secret-key \ nacos/nacos-server:3.0.0关键点解释:- -p 8848:8848:Nacos 的 HTTP API 端口- -p 9848:9848:Nacos 的 gRPC 端口(MCP 协议底层使用)- NACOS_AUTH_ENABLE=true:开启鉴权,生产环境必须- NACOS_AUTH_TOKEN:自定义鉴权密钥部署完成后,访问 http://localhost:8848/nacos,默认账号密码 nacos/nacos,即可看到控制台。## 实战一:注册一个 AI 服务并暴露 MCP 能力假设我们有一个“天气查询”的 AI 工具服务,它需要被 MCP 协议发现。我们将通过 Nacos 的 REST API 注册该服务,并为其附加 MCP 元数据。### 步骤 1:注册服务实例pythonimport requestsimport json# Nacos 配置NACOS_HOST = "localhost"NACOS_PORT = "8848"NAMESPACE = "public" # 默认命名空间SERVICE_NAME = "ai-weather-service"GROUP_NAME = "AI_GROUP"# 构造 MCP 元数据metadata = { "mcp": { "version": "1.0", "endpoint": "http://127.0.0.1:5000/mcp", "capabilities": ["weather", "forecast"], "description": "实时天气查询服务,支持城市天气预报" }}# 注册服务实例def register_service(): url = f"http://{NACOS_HOST}:{NACOS_PORT}/nacos/v1/ns/instance" params = { "serviceName": SERVICE_NAME, "groupName": GROUP_NAME, "ip": "127.0.0.1", "port": 5000, "metadata": json.dumps(metadata), "namespaceId": NAMESPACE } response = requests.post(url, params=params) if response.status_code == 200: print(f"✅ 服务 {SERVICE_NAME} 注册成功") print(f" MCP 元数据: {metadata}") else: print(f"❌ 注册失败: {response.text}")if __name__ == "__main__": register_service()运行效果:✅ 服务 ai-weather-service 注册成功 MCP 元数据: {'mcp': {'version': '1.0', 'endpoint': 'http://127.0.0.1:5000/mcp', 'capabilities': ['weather', 'forecast'], 'description': '实时天气查询服务,支持城市天气预报'}}## 实战二:AI 模型通过 MCP 协议发现并调用服务现在,我们模拟一个 AI 模型(如 GPT 插件或 LangChain 工具)通过 MCP 协议从 Nacos 发现服务,并调用天气查询功能。### 步骤 2:实现 MCP 服务查询与调用pythonimport requestsimport json# ===== 1. 从 Nacos 发现 MCP 服务 =====def discover_mcp_services(service_name, group_name="DEFAULT_GROUP"): """ 通过 Nacos 查询指定服务的实例列表, 并提取 MCP 协议信息 """ url = f"http://{NACOS_HOST}:{NACOS_PORT}/nacos/v1/ns/instance/list" params = { "serviceName": service_name, "groupName": group_name, "namespaceId": NAMESPACE, "healthyOnly": True # 只返回健康实例 } resp = requests.get(url, params=params) if resp.status_code != 200: raise Exception(f"查询服务失败: {resp.text}") data = resp.json() hosts = data.get("hosts", []) mcp_endpoints = [] for host in hosts: # 解析元数据中的 MCP 信息 meta = host.get("metadata", {}) if isinstance(meta, str): meta = json.loads(meta) mcp = meta.get("mcp", {}) if mcp: mcp_endpoints.append({ "ip": host["ip"], "port": host["port"], "mcp_endpoint": mcp.get("endpoint"), "capabilities": mcp.get("capabilities", []) }) return mcp_endpoints# ===== 2. 调用 MCP 端点 =====def call_mcp_service(mcp_endpoint, action, params): """ 按照 MCP 协议规范调用服务 action: 动作类型,如 "weather" params: 动作参数,如 {"city": "北京"} """ payload = { "type": "action", "action": action, "params": params } resp = requests.post(mcp_endpoint, json=payload) if resp.status_code == 200: return resp.json() else: return {"error": resp.text}# ===== 3. 主流程:AI 模型发现并调用 =====if __name__ == "__main__": # 模拟 AI 模型需要查询天气 print("🔍 AI 模型正在发现天气服务...") services = discover_mcp_services("ai-weather-service", "AI_GROUP") if not services: print("❌ 未找到可用的 MCP 服务") exit(1) # 选择第一个可用服务 target = services[0] print(f"✅ 发现服务: {target['ip']}:{target['port']}") print(f" MCP 端点: {target['mcp_endpoint']}") print(f" 能力: {target['capabilities']}") # 调用天气查询 print("\n🌤️ AI 模型发起天气查询请求...") result = call_mcp_service( target["mcp_endpoint"], action="weather", params={"city": "北京"} ) print(f"📝 查询结果: {json.dumps(result, ensure_ascii=False, indent=2)}")预期输出:🔍 AI 模型正在发现天气服务...✅ 发现服务: 127.0.0.1:5000 MCP 端点: http://127.0.0.1:5000/mcp 能力: ['weather', 'forecast']🌤️ AI 模型发起天气查询请求...📝 查询结果: { "city": "北京", "temperature": "25°C", "condition": "晴", "humidity": "45%"}## 架构解析:Nacos 3.x 如何支持 MCP### 1. 元数据驱动Nacos 3.x 的服务实例支持丰富的元数据字段。当我们在注册服务时,将 MCP 协议相关的信息(端点、能力描述)放入 metadata 中,AI 模型即可通过 Nacos 的查询接口获取这些元数据,实现动态发现。### 2. gRPC 双通道Nacos 3.x 默认开启了 gRPC 端口(9848),这为 MCP 协议提供了高效的二进制传输通道。MCP 协议的数据交换可以基于 gRPC 完成,Nacos 作为服务注册中心,天然支持这种通信模式。### 3. 健康检查与负载均衡Nacos 3.x 内置了心跳检测,确保只有健康的服务实例才会被 AI 模型发现。同时,当多个实例提供同一 MCP 服务时,AI 模型可以根据需求(如轮询、权重)选择合适的端点。## 总结Nacos 3.x 不再仅仅是微服务的“名册”,它通过支持 MCP 协议,成功地将服务发现能力扩展到了 AI 领域。本文通过 Docker 部署、服务注册和 AI 模型调用的完整实战,展示了如何利用 Nacos 3.x 为 AI 模型提供动态、可靠的上下文服务。核心收益:- 动态发现:AI 模型无需硬编码服务地址,通过 Nacos 实时获取可用服务- 协议统一:MCP 标准化了 AI 与外部服务的交互方式- 生态融合:Nacos 3.x 作为桥梁,让传统的微服务生态与 AI 工具有机结合未来,随着 MCP 协议的普及,Nacos 3.x 将成为 AI 原生应用的基础设施之一。无论你是在构建智能 Agent、RAG 系统,还是 LLM 工具链,Nacos 3.x 都值得纳入你的技术栈。现在就开始,让你的 AI 模型“活”起来吧!
更多推荐

所有评论(0)