Python代码执行服务

通过RunPod基础设施和模型上下文协议(MCP)为AI助手提供Python代码执行功能。

  • by fulong98
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 fulong98/mcp_server

使用说明

使用MCP执行RunPod Python代码

该项目使AI助手能够使用模型上下文协议(MCP)在RunPod基础设施上执行Python代码。它由两个主要部分组成:

  1. 执行Python代码的RunPod无服务器API
  2. 连接到RunPod API并为人工智能助手提供标准化接口的MCP服务器

系统架构

┌───────────────┐     ┌───────────────┐     ┌───────────────┐
│               │     │               │     │               │
│  AI Assistant │────▶│   MCP Server  │────▶│ RunPod API    │
│  (e.g. Cline) │     │    (Python)   │     │ (Serverless)  │
│               │     │               │     │               │
└───────────────┘     └───────────────┘     └───────────────┘

交互顺序

统一建模语言

1.RunPod无服务器设置

先决条件

  • Docker已安装
  • 带有API密钥的RunPod帐户
  • Docker和Python基础知识

第一步:构建并推送Docker镜像

Dockerfile包括常见的数据科学库和代码处理程序: 当前docker镜像:docker.io/79c2e466/code_handler_serverless

# Clone this repository
git clone https://github.com/yourusername/runpod-python-executor.git
cd runpod-python-executor

# Build the Docker image
docker build -t yourusername/runpod-python-executor:latest .

# Login to Docker Hub
docker login

# Push the image to Docker Hub
docker push yourusername/runpod-python-executor:latest

步骤2:在RunPod无服务器上部署

  1. 首选 RunPod.io
  2. 导航到无服务器→ 部署
  3. 请输入您的Docker镜像URL: docker.io/79c2e466/code_handler_serverless
  4. 配置设置:
    • 工作类型:CPU或基本GPU
    • 最小/最大工作人数:1/3(根据您的需求调整)
    • 空闲超时:5分钟
  5. 点击“部署”

步骤3:获取端点ID

部署后,RunPod将生成一个端点ID。复制此ID,因为您需要它来配置MCP服务器。

您的无服务器API终结点将是: https://api.runpod.io/v2/{endpoint_id}/run

您可以使用以下方法测试您的端点:

curl -X POST \
  https://api.runpod.io/v2/{endpoint_id}/runsync \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_RUNPOD_API_KEY' \
  -d '{
    "input": {
      "code": "print(\"Hello, World!\")"
    }
  }'

2.MCP服务器设置

MCP服务器使用模型上下文协议将AI助手连接到RunPod端点。

先决条件

  • 已安装Python 3.8+
  • RunPod API密钥
  • 上述步骤3中的RunPod端点ID

步骤1:安装需求

安装 将MCP添加到python项目中 我们建议使用uv来管理您的Python项目。在uv管理的python项目中,通过以下方式将mcp添加到依赖项中:

uv添加“mcp[cli]” 或者,对于使用pip作为依赖关系的项目:

pip安装mcp 运行独立的MCP开发工具 要使用uv运行mcp命令:

紫外线运行mcp

pip install mcp requests

步骤2:配置MCP服务器

创建一个名为的文件 runpod_mcp_server.py 使用所提供模板中的代码。更新以下环境变量:

# Update these values
RUNPOD_API_KEY = "your_runpod_api_key"
RUNPOD_ENDPOINT_ID = "your_endpoint_id"  # From serverless deployment

步骤3:运行MCP服务器

cline添加mcp设置

"PythonServerlessExecutor": {
      "command": "xx/.local/bin/uv",
      "args": [
        "run",
        "xxx/mcp_server/runpod_serverless_mcp_server/server.py"
      ],
      "disabled": false,
      "autoApprove": []
    },

步骤4:使用MCP服务器

连接后,您可以使用以下工具:

  • execute_python_code:在RunPod上运行Python代码
  • check_runpod_status:检查与RunPod的连接状态

Cline的使用示例:

Can you run this Python code?
```python
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Sine Wave")
plt.savefig("sine_wave.png")
print("Generated sine wave plot")

Cline将使用MCP服务器执行此代码并返回结果。

样品

运作原理

  1. AI助手(如Cline)收到运行Python代码的请求
  2. 它援引了 execute_python_code 通过MCP协议使用工具
  3. MCP服务器将代码发送到RunPod无服务器端点
  4. RunPod执行Docker容器中的代码
  5. 结果(stdout、stderr、返回代码)返回给MCP服务器
  6. MCP服务器格式化结果并将其发送回AI助手
  7. AI助手向用户显示结果

安全考虑

  • 代码执行发生在一个隔离的容器中
  • 执行时间有限,以防止资源滥用
  • 您应该为生产使用实施额外的安全措施

故障排除

  • MCP服务器连接问题:检查您的API密钥和终结点ID
  • 代码执行超时:您的代码可能太复杂或无限循环
  • 缺失的图书馆:检查您的代码是否需要不在Dockerfile中的库

高级配置

您可以修改以下内容以调整行为:

  • MAX_EXECUTION_TIME:更改代码执行的超时时间
  • Dockerfile:根据需要添加或删除库
  • 错误处理:为特定场景自定义错误消息

为什么无服务器而不是Pod创建

我们选择使用RunPod的无服务器基础设施,而不是创建完整的Pod,原因有几个:

  1. 日志访问限制:RunPod不提供直接的API从创建的Pod中检索日志。这使得在使用pod创建方法时难以捕获代码执行的输出。
  2. 连接复杂性:维护与Pod的持久连接需要额外的SSH或其他远程访问方法基础设施。
  3. 资源管理:Pod即使在空闲时也会保持运行并产生费用,而无服务器功能只对实际执行时间收费。

无服务器方法的缺点

  1. 冷启动延迟:当容器启动时,第一次执行可能会出现延迟(冷启动)。
  2. 无持久存储:每次执行都从一个新的环境开始,因此很难在执行之间保持状态。
  3. 资源限制:与全Pod相比,无服务器功能通常具有更有限的CPU、内存和磁盘分配。 4.有限的GPU访问:虽然可能,但无服务器中的GPU访问比专用Pod更有限,通常也更昂贵。