把MCP和AI代理部署在无服务器架构上,大幅提升业务性能

本文转载自原文地址 mp.weixin.qq.com 腾讯程序员@腾讯技术工程 2025年04月07日 17:37

作者:maxlong

MCP协议通过标准化接口实现AI模型与外部工具的无缝连接,而Serverless架构提供弹性计算资源,两者结合可解决AI代理的动态资源需求。例如,企业内大量AI智能体(如千人规模)的实时调度,可通过Serverless函数动态部署MCP服务器,按需扩展计算能力。这种模式尤其适用于低频但需快速响应的场景(如临时视频处理、数据查询),避免传统软件采购的高昂成本。同时在 Serverless 环境中,每个函数执行都有独立的执行环境,这种隔离性确保了不同 AI 代理之间的安全性。通过精细的权限控制和资源访问管理,可以有效防止数据泄露和未经授权的访问,增强系统的安全性。

1. MCP

1.1. 简介

模型上下文协议(Model Context Protocol,简称 MCP)是由 Anthropic 推动的一项开放标准,它标准化了应用程序向 LLM 提供上下文的方式。可以将 MCP 视为 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一种将 AI 模型连接到不同数据源和工具的标准化方式。

近期,OpenAI 对其 Agent SDK 进行了重大更新,正式支持 MCP 协议。这一举措使开发者能够在统一的接口标准下,快速集成多种工具,极大地扩展了 AI 模型的能力。这一变化标志着 MCP 协议在业界的广泛认可和应用,进一步推动了人工智能技术的发展。

1.2. 为什么用MCP

MCP可以帮助我们在LLM之上构建Agent或者复杂的工作流,对于一些经常需要与数据和工具集成的场景,MCP协议提供以下功能:

  1. 基于协议实现的集成数据集或工具可以以插件方式快速连接到LLM。

  2. 解耦工具和LLM,使得应用可以在多个LLM提供商切换。

  3. 数据和工具不需要上传远端,保护数据隐私。

1.3. 总体架构

MCP 的核心是客户端-服务器架构,其中主机应用程序可以连接到多个服务器:

● MCP 主机:希望通过 MCP 访问数据的程序,例如 Claude Desktop、IDE 或 AI 工具

● MCP 客户端:与服务器保持 1:1 连接的协议客户端

● MCP 服务器:轻量级程序,每个程序都通过标准化模型上下文协议公开特定功能

● 本地数据源:MCP 服务器可以安全访问的您的计算机文件、数据库和服务

● 远程服务:MCP 服务器可通过互联网(例如通过 API)连接到的外部系统

2. MCP Server On Serverless

2.1. 效果展示

先看看效果,模仿mcp 官方server例子开发一个天气查询的mcp server,同时部署到腾讯云云函数。

2.2. 天气查询MCP Server代码

python 复制代码
from mcp.server.fastmcp import FastMCP  
import os  
import logging  
import httpx  
import json  
  
  
# Initialize FastMCP server  
mcp = FastMCP("weather", host="0.0.0.0", port=9000)  
  
# Constants  
# 天气API地址 设置对应天气api接口地址 如腾讯天气api接口地址https://apis.map.qq.com/ws/weather/v1/  
NWS_API_BASE = "api url"  
USER_AGENT = "weather-app/1.0"  
API_KEY = "api key"  
  
#以下为腾讯天气api接口伪代码,需要自行完善  
@mcp.tool()  
def get_weather(city: str) -> str:  
    """  
    获取某个城市的天气  
  
    Args:  
    city: 城市  
    """  
      
    try:  
        # 使用 HTTPS 协议并验证 SSL  
        client = httpx.Client(verify=True)  
          
        # 构建请求参数  
        params = {  
            "key": API_KEY,  
            "city": city,  
            "output": "json"  
        }  
          
        # 使用新的天气API地址  
        response = client.get(  
            "https://apis.map.qq.com/ws/weather/v1/",  
            params=params,  
            timeout=10  
        )  
          
        # 打印响应状态和内容以便调试  
        logging.info(f"Status Code: {response.status_code}")  
        logging.info(f"Response: {response.text}")  
          
        weather_data = response.json()  
          
        if weather_data.get("status") != 0:  
            return f"获取天气信息失败: {weather_data.get('message', '未知错误')}"  
              
        # 获取实时天气数据  
        data = weather_data.get("result", {})  
        observe = data.get("realtime", {})  
        infos = data.get("infos", {})  
          
        if not observe:  
            return "无法获取天气信息: 数据为空"  
              
        # 返回格式化的天气信息  
        weather_info = f"""  
            天气: {infos.get('weather', '')}  
            温度: {infos.get('temperature', '')}°C  
            湿度: {infos.get('humidity', '')}%  
            风力: {infos.get('wind_power', '')}级  
        """  
        return weather_info  
          
    except httpx.HTTPError as e:  
        error_msg = f"HTTP请求失败: {str(e)}"  
        logging.error(error_msg)  
        return error_msg  
    except Exception as e:  
        error_msg = f"获取天气信息失败: {str(e)}"  
        logging.error(error_msg)  
        return error_msg  
    finally:  
        if 'client' in locals():  
            client.close()  
  
if __name__ == '__main__':  
    logging.basicConfig(level=logging.INFO)  
    mcp.run(transport='sse')  

特别注意的地方是函数镜像或者web代码都需要设置9000的监听端口,所以代码要设置server 端口为9000

ini 复制代码
mcp = FastMCP("weather", host="0.0.0.0", port=9000)  

2.3. 相关依赖

requirements.txt

复制代码
httpx  
mcp  

2.4. 部署到云函数

Remote MCP Server VS Local MCP Server

2.4.1. 通过镜像部署云函数

Dockerfile内容

bash 复制代码
# 使用官方的 Python 3.13 镜像作为基础镜像  
FROM python:3.13.2-slim  
# 设置工作目录  
WORKDIR /app  
# 复制当前目录下的所有文件到工作目录  
COPY . /app  
# 安装依赖  
RUN pip install --no-cache-dir .  
# 暴露端口  
EXPOSE 9000  
# 运行应用  
CMD ["python", "weather.py"]  

``

构建好Docker镜像,将Docker进行push到tcr镜像仓库

tcr镜像仓库详见: cloud.tencent.com/document/pr...

web镜像函数: cloud.tencent.com/document/pr...

上传好镜像之后,可以开始创建云函数,选择使用容器镜像 ,函数类型选择Web函数

选择函数镜像

在高级配置中需要设置超时时间为较长时间,比如120s,因为sse服务需要进行长连接,如果时间太短,连接会被快速断开。

同时需要设置函数支持请求多并发。

**【保存】**之后就完成了mcp server函数的创建

最后一步创建函数的URL,使用该URL提供给mcp client进行sse方式的访问:

同时使用**镜像加速,**云函数拉取镜像会比较快:

最后在cursor mcp中设置好函数的url即可进行mcp tools的使用了

2.4.2. 通过代码函数部署

区别于镜像方式部署,通过代码部署的云函数拉取代码的耗时会比镜像耗时小

创建函数的方式以下图例子方式创建即可,其它步骤同镜像部署

app.py代码使用前面的代码范例即可

使用云函数的CLI工具能更快速(秒级)的部署MCP Server服务,相对于tke或者CVM部署速度和管理成本极低

云函数也支持java,go,nodejs,php的代码

2.5. 使用云函数的收益

2.5.1. 云函数相比K8S优势

腾讯云云函数(SCF, Serverless Cloud Function)和 Kubernetes(K8s)相比,也有一些明显的优势,尤其是在特定的应用场景下。以下是腾讯云云函数相对于 Kubernetes 的一些优势:

1. 无服务器架构 (Serverless)

无需管理基础设施:腾讯云云函数是完全托管的计算服务,用户不需要关注底层服务器、虚拟机、容器集群等基础设施的管理。与此相比,Kubernetes 需要管理集群中的节点、容器生命周期以及各种资源调度。

自动扩展和缩减:云函数会根据实际的事件或请求数量自动扩展和缩减,用户无需手动配置和调整。Kubernetes 的扩展则需要配置 Horizontal Pod Autoscaling(HPA)或 Vertical Pod Autoscaling(VPA),并且通常还需要设置资源池和负载均衡策略。

2. 按需计费

按请求和执行时间计费:腾讯云云函数是按请求数和执行时间计费的,用户只需为实际使用的计算资源付费。相比之下,Kubernetes 中通常需要为整个集群中的节点付费,即使节点没有承载任何负载也需要支付固定费用,可能导致资源的浪费。

零资源消耗:当没有请求时,云函数不会消耗任何计算资源,而 Kubernetes 需要至少保持最小的节点运行状态,即使没有容器或任务需要处理。

3. 简化的运维和管理

自动化运维:腾讯云云函数完全托管,自动管理所有的计算资源和基础设施,包括计算、存储和网络资源,减少了运维负担。相比之下,Kubernetes 需要用户自己管理集群、节点、负载均衡、网络配置等,增加了运维复杂度。

无需管理容器或集群:云函数抽象了底层容器或虚拟机的管理,用户只需关注业务逻辑,而 Kubernetes 则需要开发者管理容器化应用的构建、镜像推送、容器调度、服务暴露等。

4. 快速部署和启动

快速响应时间:腾讯云云函数是事件驱动的,可以在几毫秒内响应并启动,特别适合短时间、瞬时计算的任务。Kubernetes 的容器虽然也支持快速启动,但仍然需要更多的时间来调度和运行,尤其是涉及到节点的资源分配和容器的启动。

简化的部署流程:云函数支持从代码直接部署,不需要预先构建和管理镜像,而 Kubernetes 通常要求将应用打包为容器镜像,推送到容器注册表并进行部署。

5. 事件驱动

无缝与事件源集成:腾讯云云函数能够直接与腾讯云其他服务(如对象存储 COS、消息队列 CKafka、数据库等)进行事件驱动的集成,支持自动触发,简化了应用架构的设计。Kubernetes 虽然也能与事件源进行集成,但通常需要额外的配置和工具(如通过消息队列或触发器调度 Pod)。

自动触发:腾讯云云函数可以轻松响应云端各种事件,如文件上传、数据库变更、HTTP 请求等,而 Kubernetes 通常需要设置外部系统来触发容器启动或服务处理。

6. 自动弹性伸缩

无限扩展:腾讯云云函数能够根据请求自动扩展,支持从零到上千个实例的快速扩展,用户无需担心如何管理资源的扩展和缩减。Kubernetes 需要手动配置集群的资源池,并根据需要调整节点或Pod数量。

零延迟扩展:云函数可以非常迅速地应对突发流量,Kubernetes 可能需要一定的时间来扩展节点并启动新容器,特别是在大规模应用中,可能会受到集群资源的限制。

7. 低成本和高效能

精细的资源使用:由于按执行时间和请求数计费,云函数的资源利用率非常高,能够确保不浪费资源。在 Kubernetes 中,虽然容器也可以相对轻量化,但资源消耗依赖于集群中配置的节点大小和容器数量。

无闲置成本:Kubernetes 集群中即使没有请求,节点也可能保持活动,用户仍然需要为空闲的资源支付费用。而云函数在没有请求时完全不消耗资源,从而降低了成本。

8. 开发和调试简化

简单的开发流程:开发者只需要关注代码的实现,上传到腾讯云云函数即可,开发和部署非常快速。而 Kubernetes 通常要求开发者将应用容器化,构建镜像、推送到容器注册表,并配置复杂的部署管道。

内置集成调试工具:腾讯云云函数提供了调试和日志功能,能够方便地查看函数执行过程中的详细日志,帮助开发者快速定位问题。而 Kubernetes 的调试通常涉及到容器日志、Pod 状态和容器的网络配置,调试可能更为复杂。

9. 简化的 CI/CD 流程

无缝与 CI/CD 集成:腾讯云云函数可以直接与 CI/CD 工具集成(例如腾讯云开发工具、GitHub 等),实现自动化的代码部署。Kubernetes 则需要手动配置持续集成和持续交付流程,并且通常需要更多的工具和管理。

快速更新:云函数支持快速更新和版本管理,开发者可以轻松更新代码并部署。Kubernetes 则需要通过滚动更新或蓝绿部署等方式来更新容器中的应用,管理相对更复杂。

总结

腾讯云云函数 的优势在于完全托管的无服务器架构、按需计费、快速启动和事件驱动架构,使得它非常适合用于轻量级、事件驱动的应用场景,尤其是那些短时间、瞬时任务和弹性伸缩需求较高的场景。与此相比,Kubernetes 更适合需要大规模、高度可配置、容器化管理的长时间运行的应用,尤其是在复杂的微服务架构中,Kubernetes 提供了更高的控制权和灵活性,但也增加了更多的管理复杂度。

如果你需要快速部署、低成本、简单运维的应用,云函数可能是更好的选择;如果你需要更复杂的应用架构、容器编排和集群管理,Kubernetes 则可能更适合。

2.5.2. 基于Cube底座的云函数

云函数是基于Cube安全容器来打造的Serverless服务,Cube 提供了高并发,高密度部署的运行环境,使Serverless场景下的安全容器的交付更加迅速,并在有限空间内提供高性能、低开销的解决方案。

并且通过CubeGW打通云函数和用户VPC网络,用户可以使用MCP来操作VPC内资源,比如数据库的操作,内部系统的访问等等。

使用基于Cube底座的云函数,具备强隔离的安全性,灵活的规格可以支撑0.1C64M的MCP Server实例,启动速度在100ms以内(不包括mcp server启动时间)。

2.5.3. Cube安全容器优势

Cube 安全容器在 AI 代理(AI Agent)和 MCP(模型上下文协议)方面,相较于传统的 Kubernetes (K8s) 和虚拟机 (VM),具有以下优势:

1. 更高的安全性和隔离性

Cube使用安全容器技术,提供比传统容器更强的隔离性。每个容器都运行在独立的安全环境中,能够有效防止容器之间的攻击或数据泄漏,特别是在多租户环境中。对于 AI 代理和 MCP 服务器,这种强隔离能够确保不同代理或工具之间的操作不会互相影响,减少了潜在的安全风险。

● 相比之下,Kubernetes 和传统的虚拟机通常需要额外的配置来实现类似的隔离效果。Kubernetes 在多租户场景下的容器隔离依赖于操作系统的安全性,而虚拟机虽然提供更强的隔离,但由于资源消耗较大,可能无法高效处理大量小规模的容器化任务。

2. 更轻量的资源消耗

Cube安全容器比传统虚拟机轻量,具有虚拟机的隔离性,但启动时间和资源消耗接近容器。这使得它特别适合用于那些需要高度并发和快速响应的 AI 代理和 MCP 服务器场景,例如短期的推理请求、实时数据处理等。相对于虚拟机,Cube 容器能更高效地利用计算资源,减少开销。

● 在 Kubernetes虚拟机 中,虚拟机的资源消耗较高,启动时间较长,尤其是在多实例部署的场景下,K8s 集群的扩展可能会受到资源瓶颈的限制。而 Cube 的轻量级特性使得在这些场景中更具优势,尤其是对于需要弹性扩展的应用。

3. 快速启动和高效扩展

Cube 安全容器 提供接近容器的启动速度,但又具有虚拟机级别的隔离性,非常适合动态扩展的需求,例如 AI 代理需要快速启动多个实例来处理突发流量或大规模请求。在 Serverless 架构中,这种快速扩展的能力尤为重要,可以减少冷启动延迟,提高响应速度。

● 与传统的 Kubernetes虚拟机 相比,Cube 容器的启动时间远远快于虚拟机,能够在高负载和高并发场景中提供更好的性能表现。

4. 容器与虚拟化的完美平衡

Cube 安全容器 提供了容器的轻量级特性和虚拟机的隔离性,弥补了传统容器的不足。AI 代理和 MCP 服务器通常需要频繁与外部工具和数据源交互,容器化方式能够提高服务部署和管理的效率,Cube 的虚拟化特性进一步确保了在复杂场景下的高安全性和稳定性。

虚拟机 虽然提供更强的隔离,但其资源开销较大,启动速度较慢,通常不适合用来处理高频、短时任务。而 Kubernetes 本身并不提供虚拟化隔离,它依赖于容器和节点来提供服务,这会在某些高安全要求的场景中带来风险,尤其是当多个用户或服务共享同一 Kubernetes 集群时。

5. 与 AI 和 MCP 的集成优势

AI 代理和 MCP 服务器 需要快速处理大量数据并进行实时推理,尤其是在 AI 推理请求和数据交互密集的场景中。Cube 安全容器 能够为这些任务提供快速响应和动态扩展,同时保留虚拟机级别的安全隔离特性,从而提供更好的服务质量。

Kubernetes 在大规模分布式部署和容器管理方面的优势毋庸置疑,但对于需要更高隔离性和快速响应的场景,Cube 安全容器 提供了更好的选择。特别是在处理敏感数据或需要高安全性和资源隔离的任务时,Cube 提供了容器和虚拟机的最佳平衡。

6. 更好的资源调度与成本优化

Cube 安全容器 能够高效地调度资源并优化成本,它在提供虚拟机隔离的同时,减少了虚拟机带来的资源消耗和成本。对于需要频繁扩展和收缩的 AI 代理和 MCP 服务器场景,Cube 容器提供了较传统虚拟机或 Kubernetes 更加高效的解决方案,减少了因过度预分配资源而产生的浪费。

● 传统的 Kubernetes 需要配置和管理节点,并且节点上常常有较多的资源冗余,造成资源浪费。而 Cube 容器 能够在提供虚拟机级别的隔离的同时,减少这些冗余。

7. 容器化与虚拟化的一体化管理

Cube 安全容器 提供了统一的容器化与虚拟化管理体验,简化了基础设施的管理和运维。相比于 Kubernetes 需要通过多个组件来管理容器和虚拟机,Cube 可以提供一体化的解决方案,降低管理复杂度,尤其适合多租户的 AI 和 MCP 部署。

总结:Cube 安全容器 在 AI 代理与 MCP 部署中的优势

Cube 安全容器 是一种高效、轻量、安全的容器化技术,特别适合 AI 代理和 MCP 服务器的动态扩展与快速响应需求。它在提供容器的灵活性和虚拟机的隔离性方面找到了完美的平衡,能够在多租户、高安全性需求的场景中提供显著优势。相比于传统的 Kubernetes虚拟机,Cube 更适合处理那些需要快速扩展、低延迟、强隔离的任务,特别是在 Serverless 架构下,能够为 AI 和 MCP 提供更高效、可靠和安全的运行环境。

2.6. AI On Serverless

模型上下文协议(MCP)AI 代理(AI Agent) 部署在无服务器(Serverless)架构上,展现出显著的优势:

1. 模型上下文协议(MCP)与无服务器架构的结合

MCP 旨在为大型语言模型(LLM)提供标准化的接口,使其能够连接和交互外部数据源和工具。在无服务器架构中,MCP 服务器可以作为轻量级的执行单元,动态处理 AI 代理的请求。这种结合带来了以下好处:

弹性扩展:无服务器平台根据需求自动分配资源,确保 MCP 服务器在高负载时能够扩展,满足大量并发请求的处理需求。

按需计费:用户仅为实际使用的计算资源付费,避免了资源闲置带来的成本浪费。

简化运维:无服务器架构由云服务商管理基础设施,开发者专注于业务逻辑的实现,减少了运维复杂度。

2. AI 代理与无服务器架构的结合

AI 代理是能够自主执行任务的智能实体,需要频繁访问外部工具和数据源。无服务器架构为 AI 代理提供了以下优势:

高可用性:无服务器平台通常具备高可用性和容错性,确保 AI 代理在各种条件下稳定运行。

快速响应:无服务器函数的快速启动时间有助于 AI 代理及时响应外部事件和请求。

灵活性:无服务器架构支持事件驱动的执行模型,AI 代理可以根据不同事件触发相应的功能,提高系统的灵活性。

3. MCP 和 AI 代理在无服务器架构中的协同作用

将 MCP 与 AI 代理部署在无服务器架构中,二者相互补充,优势互补:

标准化通信:MCP 提供统一的通信协议,使 AI 代理能够高效地与各种数据源和工具交互。

动态资源分配:无服务器平台根据实际需求动态分配资源,确保 MCP 服务器和 AI 代理在高负载时获得足够的计算能力。

简化开发流程:开发者可以专注于业务逻辑的实现,无需关心基础设施的管理,提高了开发效率。

4. 适用场景

将 MCP 和 AI 代理部署在无服务器架构上,适用于以下场景:

动态生成 AI 代理:随着业务需求变化,动态生成和部署大量 AI 代理,利用无服务器架构的弹性满足计算资源的波动需求。

工具和数据源集成:需要将 AI 代理与多种工具和数据源集成的场景,MCP 提供了标准化的集成方式,简化了开发和维护工作。

5. 结论

综合来看,将 MCP 和 AI 代理部署在无服务器架构上,是一种非常契合的组合,能够充分发挥各自的优势。这种架构在需要高弹性、动态扩展和简化运维的场景中,表现尤为出色。然而,具体的应用效果还需根据实际业务需求和技术环境进行评估和实施。

2.7. 应用场景

1.访问数据库的MCP Server访问内部数据库进行数据分析

2.通过云API的MCP Server管理资源

3.通过CLS的MCP Server来进行日志的分析

4.通过云监控的MCP Server分析系统运行状态

5.通过云函数的MCP Server来调度云函数的Job以及各种ai agent服务

6.基于云函数执行Puppeteer实现爬虫或者页面操作任务

相关推荐
Ender(弹射回家版)6 小时前
Augment Code:下一代AI编程助手,能否超越GitHub Copilot?
github·copilot·ai编程
Captaincc6 小时前
模型上下文协议 (MCP):现状剖析、安全威胁与未来研究方向
mcp
Captaincc6 小时前
如何在 Copilot Studio 使用MCP扩展代理
ai编程·mcp
Captaincc7 小时前
免费的「网页版 Cursor」!新版 DeepSeek-V3 加持,秒秒钟编出 APP
ai编程·cursor
Captaincc7 小时前
AWS MCP Servers:开源套件,将 AWS 最佳实践无缝融入开发流程
aws·mcp
Captaincc7 小时前
Dify MCP 插件指南:一键连接 Zapier,轻松调用 7000+ App 工具
mcp
Captaincc7 小时前
利用 MCP 服务器增强 Amazon Bedrock Agents 的能力
mcp
Captaincc7 小时前
从 0 到 1 玩转 MCP:AI 的「万能插头」,代码手把手教你!
ai编程·mcp
_jiang8 小时前
一文掌握 MCP 开发:从原理到实战(飞书客户端 MCP)
ai编程·cursor·mcp