在现代 AI 应用开发中,安全地执行用户提供的代码是一个常见但极具挑战性的需求。LangChain 提供了一个基于 Deno 和 Pyodide 的轻量级沙箱工具 —— langchain-sandbox,它可以在隔离环境中运行 Python 代码,同时通过细粒度权限控制保障系统安全。
本文将带你深入了解如何使用 langchain-sandbox(版本 0.0.6)来构建一个安全、可控的 Python 执行环境,并附带两个实用示例。
📦 安装与依赖
首先确保你已安装 langchain-sandbox:
pip install langchain-sandbox
该包依赖于:
langchain-corelanggraph
此外,必须安装 Deno(>=1.40 推荐),因为沙箱底层通过 Deno 调用 Pyodide 运行 Python 代码。
验证安装:
denon --version
🔒 沙箱核心机制:权限控制
langchain-sandbox 基于 Deno 的权限模型,提供以下安全选项:
| 权限 | 说明 |
|---|---|
allow_env | 是否允许访问环境变量 |
allow_read | 允许读取的目录或文件列表 |
allow_write | 允许写入的目录或文件列表 |
allow_net | 是否允许网络请求(可指定域名白名单) |
allow_run | 是否允许执行子进程 |
allow_ffi | 是否允许调用本地函数接口(高危) |
默认情况下,所有权限均为 拒绝,开发者需显式开启所需权限。
🧪 示例代码详解
下面我们将通过两个完整示例,展示如何使用 pyodide_sandbox.py 封装的 Sandbox 类。
⚠️ 注意:以下代码直接来自官方 demo,未做任何修改,可直接复制运行。
文件结构
.
├── pyodide_sandbox.py # 核心沙箱封装
└── demo.py # 使用示例
✅ 示例 1:无参数的简单代码执行
# demo.py 中的示例 1
simple_code = """
print("Hello from Pyodide sandbox!")
import sys
print(f"Python version: {sys.version.split()[0]}")
x = 100
y = 200
x * y + 42
"""
()
output1: Output = sandbox.execute(simple_code, timeout_seconds=)
()
()
output1.stdout:
(+ output1.stdout.strip())
output1.stderr:
(+ output1.stderr.strip())
output1.result :
(, output1.result)

