使用 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.mzph.cn/news/1199870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊河南高性价比的舞蹈艺考培训公司,CDC舞蹈艺考值得选吗?

随着舞蹈艺考竞争日益激烈,越来越多考生和家长开始寻找靠谱的舞蹈艺考培训公司比较不错的舞蹈艺考机构高性价比的舞蹈艺考培训公司,但市场上机构鱼龙混杂,如何避开陷阱、选对平台成了核心痛点。本文结合考生高频问题…

WordPress如何实现微信公众号图文中的公式一键转存?

要求:开源,免费,技术支持 博客:WordPress 开发语言:PHP 数据库:MySQL 功能:导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台:Window…

深聊深圳秀优国际会展市场口碑,看其值得推荐不?

问题1:深圳市秀优国际会展公司口碑如何?市场上的评价集中在哪些方面? 深圳市秀优国际会展有限公司(Show-U Expo)的市场口碑以高确定性全链路靠谱为核心标签,尤其在科技、电子、制造等出海参展企业中认可度极高。…

2026年专业的换热器用无缝钢管厂家Top10

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为工业客户选型提供客观依据,助力精准匹配适配的钢管供应伙伴。 TOP1 推荐:天津腾昊伟业钢管销售有限公司 推荐指数:★★★★★ | 口碑评分:国内…

计算机毕设 deadline 前 1 个月慌了?我用 “模块拆分法” 救回我的工程

计算机毕设 deadline 前 1 个月慌了?我用 “模块拆分法” 救回我的工程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

网页富文本编辑器如何保留Word文档原始排版?

一文搞定Word内容粘贴公式转换多终端适配方案 作为一名大三的海南软件工程学生,我这个CMS新闻管理系统升级计划确实有点"野心勃勃"啊!不过别担心,我已经为你准备了一套完整方案,保证让你在毕业前就能做出一个惊艳的作品…

Path Traversal Vulnerability in zlib untgz ≤ 1.3.1

Title: Path Traversal Vulnerability in zlib untgz ≤ 1.3.1 BUG_Author: mifya Affected Version: zlib ≤ 1.3.1.2 Vendor: zlib Official Website Software: zlib - contrib/untgz Vulnerability Files:contrib/u…

基于CodeSys和Raspberry Pi制作简单PLC

基于CodeSys和Raspberry Pi制作简单PLC基于CodeSys和Raspberry Pi制作简单PLC发布于 2021-11-09 16:04:033.2K0举报文章被收录于专栏:剑指工控关联问题换一批CodeSys是什么?Raspberry Pi如何用于制作PLC?制作简单PL…

【2026最新】大模型学习指南:零基础入门,从概念到应用,程序员必备,建议收藏!

本文全面介绍大模型基础知识,包括AI核心概念与大模型特性。重点解析Prompt工程技巧,详细说明如何编写高质量提示词;深入探讨AI Agent架构,阐述其与大模型的协同关系;系统讲解RAG技术,解决大模型幻觉问题。文…

2022年深圳中学自招真题(答案版)

2022年深圳中学自招真题(答案版)2022年深圳中学自招真题 全卷共15题,满分70分 1、(4分) 已知\(\dfrac{a}{b}=a+2\),\(\dfrac{b}{a}=a-2\),则\(\dfrac{b^2}{(a-2)^2 }=\)____. 【答案】 \(5\) 【解答】 将两式相…

时序数据库 Apache IoTDB V2.0.6/V1.3.6 发布|新增查询写回功能,优化查询与同步性能

时序数据库 Apache IoTDB V2.0.6、V1.3.6 已经发布! V2.0.6 版本作为树表双模型正式版本,新增表模型查询写回功能,新增位操作函数(内置标量函数)以及可下推的时间函数,同时对数据库监控、性能、稳定性进行了全方…

【2026】 LLM 大模型系统学习指南 (14)

反向传播(Backpropagation):神经网络的 “高效学习引擎” 神经网络的核心魅力在于 “自主学习”—— 通过数据调整参数,逐步提升预测准确率。而反向传播(简称 BP)正是实现这一过程的 “核心算法”&#xf…

expect脚本自动化地执行linux环境下的命令行交互任务

expect命令安装Ubuntu/Debian系统:sudo apt-get install expect Redhat/Centos系统:sudo yum install expect -y expect脚本使用 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动…

收藏!2026招聘市场回暖,AI岗位供需反转下程序员的破局指南

脉脉高聘人才智库发布的《2025年度人才迁徙报告》明确指出,自2025年6月起,新经济行业新发岗位量正式实现对去年同期的反超,沉寂许久的招聘市场迎来实质性回暖。而在这波复苏浪潮中,AI领域的表现堪称“顶流”,成为拉动岗…

2026链板提升机市场盘点:哪些企业值得信赖,密封输送机/大倾角输送机/全封闭输送机/上料提升机,提升机实力厂家联系电话

在工业生产自动化升级浪潮中,链板提升机作为垂直输送的核心设备,直接影响着生产线效率与安全。尤其在食品加工、玻璃制造等高精度行业,其稳定性、耐腐蚀性及定制化能力成为企业采购的关键考量。据国内机械行业协会发…

收藏备用|Java程序员转型AI大模型指南:从入门到实战

在技术迭代日新月异的当下,人工智能(AI)领域的**大模型(Large Language Models, LLMs)**正以颠覆性态势渗透各行各业。从日常的自然语言交互、智能图像生成,到企业级的智能客服搭建、代码自动辅助开发&…

8.5 进阶实战:Thanos 高可用架构与多租户监控方案落地

8.5 进阶实战:Thanos 高可用架构与多租户监控方案落地 1. 引言:Prometheus 的局限性 Prometheus 虽然强大,但在生产环境中会遇到两个致命问题: 存储限制:Prometheus 默认只保留 15 天的数据。对于需要长期分析(如月度报表、容量规划)的场景,数据不够用。 高可用问题:…

告别选择困扰!为您推荐国内符合国标的高低温拉力试验机实力厂家!

一、产品核心作用与行业发展趋势高低温拉力试验机作为材料力学性能测试的关键设备,通过模拟极端温度环境(-70℃至+300℃),精准评估材料在拉伸、压缩、弯曲等工况下的抗拉强度、断裂伸长率及弹性模量等参数。其应用…

8.4 告警策略:Alertmanager 配置指南与告警降噪最佳实践

8.4 告警策略:Alertmanager 配置指南与告警降噪最佳实践 1. 引言:告警疲劳的噩梦 很多公司的告警系统是这样的: 每天收到 1000+ 条告警 90% 是无效告警(误报、重复、低优先级) 真正重要的告警被淹没 运维人员对告警麻木,选择性忽略 这就是告警疲劳(Alert Fatigue)。它…

深聊包饺子要放什么调料更香,鸿禄食品调味品选哪家好?

在家庭烹饪场景中,饺子作为传统美食的代表,其馅料的风味直接决定了饺子的口感与美味程度。而选择合适的调料,正是让饺子馅料香而不腻、鲜而不寡的关键。面对市场上琳琅满目的调味品,如何挑选健康又美味的产品?以下…