当前位置: 首页 > news >正文

使用 LangChain Pyodide Sandbox 在安全环境中执行 Python 代码

在现代 AI 应用开发中,安全地执行用户提供的代码是一个常见但极具挑战性的需求。LangChain 提供了一个基于 Deno 和 Pyodide 的轻量级沙箱工具 ——langchain-sandbox,它可以在隔离环境中运行 Python 代码,同时通过细粒度权限控制保障系统安全。

本文将带你深入了解如何使用langchain-sandbox(版本 0.0.6)来构建一个安全、可控的 Python 执行环境,并附带两个实用示例。


📦 安装与依赖

首先确保你已安装langchain-sandbox

pipinstalllangchain-sandbox

该包依赖于:

  • langchain-core
  • langgraph

此外,必须安装 Deno(>=1.40 推荐),因为沙箱底层通过 Deno 调用 Pyodide 运行 Python 代码。

验证安装:

deno --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 中的示例 1simple_code=""" print("Hello from Pyodide sandbox!") import sys print(f"Python version: {sys.version.split()[0]}") x = 100 y = 200 x * y + 42 """print("=== 示例 1:无参数 ===")output1:Output=sandbox.execute(simple_code,timeout_seconds=15)print(f"状态:{output1.status}")print(f"执行时间:{output1.execution_time:.2f}s")ifoutput1.stdout:print("标准输出:\n"+output1.stdout.strip())ifoutput1.stderr:print("错误输出:\n"+output1.stderr.strip())ifoutput1.resultisnotNone:print("返回结果:",output1.result)

输出效果:

=== 示例 1:无参数 === 状态: success 执行时间: 1.23s 标准输出: Hello from Pyodide sandbox! Python version: 3.11.9 返回结果: 20042

说明

  • 代码在 Pyodide 环境中运行(非本地 Python)
  • 最后一行表达式x * y + 42的值被自动作为返回结果
  • 无网络、无文件写入,完全隔离

✅ 示例 2:带参数的异步函数执行

# demo.py 中的示例 2function_code=""" async def main(args): name = args.params.get("name", "陌生人") num = args.params.get("num", 1) print(f"收到参数: name={name}, num={num}") await asyncio.sleep(0.1) return { "greeting": f"Hello, {name}!", "result": num * 42 } """print("\n=== 示例 2:带参数 ===")output2:Output=execute_function(code=function_code,params={"name":"小白","num":10},timeout_seconds=15,)print(f"状态:{output2.status}")print(f"执行时间:{output2.execution_time:.2f}s")ifoutput2.stdout:print("标准输出:\n"+output2.stdout.strip())ifoutput2.stderr:print("错误输出:\n"+output2.stderr.strip())ifoutput2.resultisnotNone:print("返回结果:",output2.result)

输出效果:

=== 示例 2:带参数 === 状态: success 执行时间: 0.35s 标准输出: 收到参数: name=小白, num=10 返回结果: {'greeting': 'Hello, 小白!', 'result': 420}

说明

  • 用户代码必须定义async def main(args)函数
  • args.params接收传入的参数字典
  • 支持asyncio.sleep等异步操作
  • 返回值为 JSON 序列化对象

🔧 沙箱配置详解(Sandbox 初始化)

demo.py中,我们这样初始化沙箱:

sandbox=Sandbox(allow_env=False,allow_read=["."],# 允许读取当前目录allow_write=["."],# 允许写入当前目录allow_net=False,# 禁止网络memory_limit_mb=256,# 内存限制 256MB)

💡 实际生产中,建议最小权限原则:只开放必要权限。例如,若无需写文件,则allow_write=False


⚠️ 安全注意事项

  1. 不要开启allow_ffiallow_run,除非你完全信任代码来源。
  2. 网络访问 (allow_net)应限制到具体域名,如["api.example.com"]
  3. 内存和超时限制必须设置,防止 DoS 攻击。
  4. 所有代码在Pyodide(浏览器级 Python)中运行,无法访问宿主机文件系统(即使allow_read=["."]也只是虚拟文件系统)。

🚀 适用场景

  • LLM 生成代码的安全执行(如 LangChain Agent 工具调用)
  • 在线编程教学平台
  • 用户自定义脚本插件系统
  • 安全的公式/表达式计算引擎

🔚 总结

langchain-sandbox提供了一种轻量、安全、基于 WebAssembly 的 Python 沙箱方案。通过 Deno + Pyodide 的组合,它实现了:

  • 强隔离性(无系统调用)
  • 细粒度权限控制
  • 异步支持
  • JSON 序列化输入输出

虽然目前仍处于早期版本(0.0.6),但对于需要在服务端安全执行不可信 Python 代码的场景,它是一个非常值得尝试的工具。

安装教程参考

使用 jsr:@langchain/pyodide-sandbox 构建 Python 安全沙箱(完整入门教程)

http://www.jsqmd.com/news/283767/

相关文章:

  • 聊聊河南高性价比的舞蹈艺考培训公司,CDC舞蹈艺考值得选吗?
  • 2026年目前重切削的刀塔机定制选哪家,排刀机/4+4车铣/双主轴双排刀/46排刀机/36排刀机,刀塔机工厂需要多少钱
  • WordPress如何实现微信公众号图文中的公式一键转存?
  • 2026热门厂家盘点:磁力搅拌器行业分析及十大厂家推荐
  • 深聊深圳秀优国际会展市场口碑,看其值得推荐不?
  • 2026年上海高端网站建设公司哪家好?12个深耕网站建设行业的网站建设公司推荐
  • 2026年专业的换热器用无缝钢管厂家Top10
  • 网页富文本编辑器如何保留Word文档原始排版?
  • 计算机毕设 deadline 前 1 个月慌了?我用 “模块拆分法” 救回我的工程
  • Path Traversal Vulnerability in zlib untgz ≤ 1.3.1
  • 基于CodeSys和Raspberry Pi制作简单PLC
  • 8.6 统一标准:OpenTelemetry 核心概念与全链路追踪实现
  • 【2026最新】大模型学习指南:零基础入门,从概念到应用,程序员必备,建议收藏!
  • 2022年深圳中学自招真题(答案版)
  • 时序数据库 Apache IoTDB V2.0.6/V1.3.6 发布|新增查询写回功能,优化查询与同步性能
  • 2026年低楼层微通风系统窗定制源头厂家排名,阜积铝业表现亮眼
  • 【2026】 LLM 大模型系统学习指南 (14)
  • 收藏!2026招聘市场回暖,AI岗位供需反转下程序员的破局指南
  • expect脚本自动化地执行linux环境下的命令行交互任务
  • 2026链板提升机市场盘点:哪些企业值得信赖,密封输送机/大倾角输送机/全封闭输送机/上料提升机,提升机实力厂家联系电话
  • 收藏备用|Java程序员转型AI大模型指南:从入门到实战
  • 8.5 进阶实战:Thanos 高可用架构与多租户监控方案落地
  • 8.4 告警策略:Alertmanager 配置指南与告警降噪最佳实践
  • 深聊包饺子要放什么调料更香,鸿禄食品调味品选哪家好?
  • 【2026】 LLM 大模型系统学习指南 (15)
  • 告别选择困扰!为您推荐国内符合国标的高低温拉力试验机实力厂家!
  • 9.1 永不宕机三板斧:探针、资源配额与弹性伸缩的协同作战
  • 收藏!大模型赛道全指南:就业竞争力打造+保研路径规划(2026小白必看)
  • 深度收藏:从大厂JD看AI Agent开发学习路线,从小白到大厂必备技能
  • 2026年辽宁裁断机生产厂家排行榜,前十强都有谁?