langgraph工作流之Code节点:搭建Python代码执行容器

597 阅读3分钟

在langgraph工作流中,Code节点扮演着至关重要的角色,它需要一个安全、隔离且高效的沙箱环境来执行Python代码。本文将详细介绍如何基于Docker技术,结合开源项目 Code-Interpreter-Api 搭建这样一个Python代码执行容器。

一、项目选择与准备

为实现Code节点的功能,我们选择了Code-Interpreter-Api这一开源项目作为参考。尽管该项目提供了完整的API服务和多种集成方案(如Docker、PostgreSQL等),但在此场景下,我们仅关注其Docker部署Python沙箱代码执行器的部分。因此,构建过程简化为仅需要三个核心文件:app.pyrequirements.txtDockerfile

  • app.py:作为Docker容器内部提供API交互的程序文件,基于Flask框架开发,负责接收和执行用户提交的Python代码。
  • requirements.txt:列出了Docker容器中需要安装的Python依赖库。你可以根据实际需求手动编辑此文件,或者利用项目中的build.py脚本和config.yml配置文件动态生成。
  • Dockerfile:该文件包含了构建本地Docker镜像的所有配置指令。在本文中,我们将展示一个经过修改,添加了清华源以提高依赖安装效率的Dockerfile示例。

二、Docker容器的构建与部署

1. 编写Dockerfile

首先,我们需要编写或修改Dockerfile,以便从正确的源(如清华源)拉取依赖,提高构建效率。以下是一个示例Dockerfile:

# 第一阶段:构建阶段
FROM python:3.10-slim AS builder

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装构建依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    libssl-dev \
    libffi-dev \
    python3-dev \
    && apt-get clean \
    && pip install --no-cache-dir --upgrade pip \
    && pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 第二阶段:运行阶段
FROM python:3.10-slim

# 设置工作目录
WORKDIR /app

# 从构建阶段复制必要的文件
COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin
COPY . .

# 设置环境变量
ENV PYTHONUNBUFFERED=1

# 暴露 Flask 端口
EXPOSE 5000

# 运行 Flask 应用
CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]
2. 准备其他文件

确保app.pyrequirements.txt文件已经根据你的项目需求准备好。这些文件将被Docker在构建过程中复制到容器中。

3. 构建Docker镜像

在包含Dockerfile、app.py和requirements.txt的目录中,运行以下命令构建Docker镜像:

	docker build -t code-interpreter-api .

这条命令会读取当前目录下的Dockerfile,并根据其中的指令构建一个名为code-interpreter-api的Docker镜像。

4. 运行Docker容器

构建完成后,通过以下命令启动Docker容器:

	docker run -d -p 5000:5000 code-interpreter-api

这条命令会以后台模式启动一个容器,并将容器的5000端口映射到宿主机的5000端口上,使得你可以通过访问宿主机的5000端口来与Flask应用交互。

三、结语

通过上述步骤,我们成功搭建了一个可以在线执行Python代码的沙箱环境,并将其集成到langgraph工作流的Code节点中。这个容器环境不仅安全隔离,而且通过Docker的轻量级和可移植性,确保了在不同环境下的高效运行和灵活部署。未来,你可以根据需要进一步扩展和定制这个环境,以满足更复杂的应用场景。