🟡 🛡️ 安全 发布于: · 3 分钟阅读 ·

LangChain:如何在无需外部沙箱的情况下运行不受信任的智能体代码

编辑配图:LangChain 在 QuickJS 和 WebAssembly 环境中安全运行不受信任的智能体代码

LangChain 团队的 Hunter Lovell 描述了一种在编译为 WebAssembly 的 QuickJS 引擎内执行不受信任智能体代码的技术——无需外部沙箱。三大安全支柱与两个实验性开源库已向开发者社区开放。

🤖

本文由人工智能基于一手来源生成。

运行 AI 智能体生成的代码始终存在固有的安全风险:如果智能体被提示注入(prompt injection)操控并生成恶意代码怎么办?常见的解决方案是外部沙箱——独立进程、Docker 容器或虚拟机。LangChain 团队的 Hunter Lovell 现在提出了一个更优雅的解决方案:在进程内运行不受信任的智能体代码,但置于坚固的内存边界之后。

为什么经典方案不够用?

外部沙箱解决了隔离问题,但带来了自身的复杂性:进程间通信延迟、复杂的生命周期管理,以及——对智能体而言尤为棘手的——无法在需要人工审批的步骤之间自然保持状态。

Lovell 的技术建立在一个关键洞察之上:WebAssembly(WASM) 在单个进程内提供了足够的边界隔离,无需外部容器。AWS、Shopify 和 Figma 已在生产环境中将 WASM 边界用于类似目的。

该架构的三大安全支柱

Lovell 定义了每个不受信任智能体代码执行系统必须满足的三个条件:

执行隔离。 智能体代码不能危害宿主系统。WASM 通过自己的线性内存空间实现这一点——一个无法在分配区域之外读写的沙箱化进程内虚拟机。运行时在架构层面强制执行内存和执行边界,无需依赖被执行代码的规范性。

能力隔离。 智能体默认不获得对文件系统、网络或外部依赖的访问权限。所有能力必须通过具有严格契约的执行程序显式桥接。这在架构层面实现了最小权限原则——智能体只能做被程序性授权的事情,别无其他。

有状态暂停。 执行必须能够暂停并等待人工审批,然后在不丢失上下文的情况下恢复。Lovell 通过将解释器的线性内存空间序列化到 LangGraph 状态来解决这个问题——这个快照被存储,程序可以从中断处精确恢复。

为什么选择 QuickJS 进行编排?

在所有可用的 JavaScript 引擎中,LangChain 选择了 QuickJS——一个用 C 编写的小型、快速、符合 ECMA 标准的运行时。原因有三:它完全编译为 WASM(意味着引擎本身位于边界之后,而非旁边),对于编排脚本足够表达力,而且不需要对短程序进行编译步骤——这消除了启动智能体脚本时的延迟。

在这一模型中,智能体编写短小的 JavaScript 编排脚本,而非逐个分发子智能体。这种转变改变了工作模式:智能体以声明方式定义执行流程,执行程序在持续检查能力和显式桥接的同时执行。

Mete 安全原则的引用

Lovell 明确引用了 Mete 安全原则:智能体不能同时访问敏感数据、暴露于不受信任的输入,以及具有修改外部状态或向外通信的能力。三个因素同时具备——无论系统其余部分多么复杂——都会使智能体架构变得不安全。

QuickJS-WASM 方法直接应对了第二和第三个条件:在没有默认网络或系统访问权限的情况下,即使是被攻破的智能体,其影响半径也会大幅受限。

两个全新的开源库

随文章发布,LangChain 开源了两个实验性库

  • quickjs-rs — 通过 WASM 为 QuickJS 提供运行时和 Python 绑定,面向开发者社区开放,作为自定义实现的基础
  • langchain-quickjs — 将 quickjs-rs 与 LangGraph 集成的 Deep Agents 中间件,包含跨步骤持久暂停和状态序列化机制

两者均标记为实验性——API 可能在版本间变化,但核心架构和安全模型保持稳定。

对生产级智能体架构的启示

可靠执行生成代码是迈向生产级健壮自主智能体道路上的关键技术挑战之一。提示注入仍是一个开放问题——但如果智能体即使被成功操控,也无法在没有明确授权的情况下访问文件系统、网络或外部服务,可能的损害半径将大幅缩小。

LangChain 的方法并非万能钥匙:它需要仔细设计能力桥接,以及在定义严格 API 契约时保持规范性。但这种在单次方案中同时解决执行、能力和状态隔离——无需外部容器且不牺牲延迟——的架构,对于 2026 年构建生产级智能体系统的开发者而言,是一项切实的进步。

常见问题

为什么选择 QuickJS 而非其他 JavaScript 引擎?
QuickJS 体积小巧、符合 ECMA 标准,且可以完全编译为 WebAssembly,无需对短程序进行编译步骤,使其成为以最小延迟进行进程内智能体编排的理想选择。
Lovell 引用的 Mete「双重规则」是什么?
这一安全原则指出,智能体不能同时访问敏感数据、接收不受信任的输入并修改外部状态——三者同时具备将使架构不安全。
随本文发布的开源库有哪些?
发布了两个实验性库——quickjs-rs(运行时及 Python 绑定)和 langchain-quickjs(面向 LangGraph 集成的 Deep Agents 中间件)。