@LangChain:让代理具备编写代码的能力,能让它们变得极其强大。这也使得安全性问题变得更加棘手。在L…

X AI KOLs Following 工具

摘要

LangChain的Deep Agents允许不受信任的代理编写的代码通过基于WebAssembly的代码解释器安全运行,提供执行和能力隔离,无需传统沙盒。

让代理具备编写代码的能力,能让它们变得极其强大。 这也使得安全性问题变得更加棘手。 在LangChain,我们今年花了大量时间探索如何兼顾这两者。https://t.co/iprTC7KCAe
查看原文
查看缓存全文

缓存时间: 2026/07/01 14:10

让智能体具备编写代码的能力,能显著提升其能力。

但这也让安全性变得困难得多。

今年,LangChain 花了大量时间思考如何两者兼顾。https://t.co/iprTC7KCAe


Deep Agents 如何在无沙箱环境下运行不可信代码

来源:https://www.langchain.com/blog/running-untrusted-agent-code-without-a-sandbox 我们最近在 Deep Agents 中引入了动态子智能体(https://www.langchain.com/blog/introducing-dynamic-subagents-in-deep-agents):不再是每次工具调用时分发子智能体,而是让智能体编写一个短脚本来编排它们。该脚本在代码解释器(https://docs.langchain.com/oss/python/deepagents/interpreters)中运行,智能体在其中编写和执行代码。

这是一个强大的模式,但它建立在某个看似容易实则困难的问题上:

安全、可靠地运行不可信代码是件难事。

运行不可信代码是一个研究充分的问题。但运行由受不可信输入影响的智能体编写的代码,则并非如此。由于提示注入(https://en.wikipedia.org/wiki/Prompt_injection)尚未解决,我们必须假设智能体编写的代码最终会做它不应该做的事。与其信任智能体会行为得当,不如限制它能做的事。要以此方式构建一个可信的智能体,需要满足三个设计需求:

  • 执行隔离:智能体编写的代码不能危害其运行的主机。
  • 能力隔离:智能体只能接触我们有意交给它的数据和操作。
  • 持久暂停:执行可以停下来等待人类输入,之后恢复时不会丢失现场。

在 Interrupt 2026(https://interrupt.langchain.com/)上,我们发布了基于这些需求的两项产品。

  • LangSmith 沙箱(https://docs.langchain.com/langsmith/sandboxes)为智能体提供一个完整的远程容器:大致相当于本地编码智能体的自由度,但隔离在不同的机器上。
  • Deep Agents 的代码解释器(https://docs.langchain.com/oss/python/deepagents/interpreters)则采取相反策略:一个更小的运行时,智能体可在其中编写和运行程序,但仅限于我们提供的框架内。

我们已经写过关于第一种沙箱的文章(https://www.langchain.com/blog/how-to-choose-the-right-sandbox-for-your-agent)。本文是关于第二种的:为什么编排工作流不一定需要沙箱化的计算机,以及我们如何在不大幅放弃沙箱吸引人的隔离特性的前提下,保持较小的攻击面。

执行隔离

任何运行不可信代码的人都会得出同样的结论:需要在代码与其他一切之间设置一个硬边界。解释器也需要这个边界,但不能离开进程,这就是我们使用 WebAssembly 的原因。

WebAssembly

WebAssembly(https://webassembly.org/)(WASM)是一种紧凑的二进制格式,运行在一个沙箱化的进程内虚拟机中,拥有自己的内存,并且只能通过主机提供的能力与外部世界交互。这个独立的线性内存是边界的核心:WASM 内部运行的代码无法解引用主机进程的指针,因此无法读取或破坏未交给它的内存。WASM 运行时使得强制执行严格的内存和执行限制变得简单直接;并且由于它与宿主框架一起运行,我们可以在不启动独立机器的情况下对其进行检测。

AWS(https://www.vantage.sh/blog/llrt-aws-lambda-javascript-runtime)、Shopify(https://shopify.engineering/javascript-in-webassembly-for-shopify-functions)和 Figma(https://www.figma.com/blog/an-update-on-plugin-security/)都使用 WASM 来运行其平台上的不可信代码,WebContainers(https://blog.stackblitz.com/posts/introducing-webcontainers/)和 wasmtime(https://wasmtime.dev/)等工具也采用了相同的隔离模型。

QuickJS

WASM 为我们提供了沙箱;我们仍然需要一些东西在沙箱内运行代码。这就是 QuickJS(https://github.com/quickjs-ng/quickjs)的用途:一个用纯 C 编写的小型、快速、符合 ECMA 规范的 JavaScript 引擎。它体积小,使得边界内的可信表面区域也很小;而且它能够干净地编译为 WASM,因此引擎本身位于边界之后而不是旁边。JavaScript 也很适合这项工作:它足够表达能力强,无需编译步骤即可编写编排逻辑,这正是智能体产生的短程序的特点。

能力隔离

执行边界阻止智能体危害主机,但并未说明智能体被允许做什么。智能体有多大用处,就有多大危险,完全取决于我们赋予它的能力。

想象一个正在规划婚礼的智能体。要发挥作用,它需要从各处读取敏感数据(合同、RSVP、家庭群聊),并对外执行操作(给供应商发邮件、批准一笔定金)。每个能力单独看起来都合理;但将它们组合在一个自主循环中,一个恶意 RSVP 就可能读取私人预算并向供应商发送“已批准”的修改。

Meta 的二原则(https://ai.meta.com/blog/practical-ai-agent-security/)概括了这一约束:在提示注入解决之前,智能体最多只能做到以下两项:

  • 访问敏感数据
  • 暴露于不可信内容
  • 改变状态或与外部通信

这正是解释器与传统沙箱的最大区别。沙箱从计算机形态(文件系统、依赖项、shell)开始,因此其安全工作是减法式的:你从广泛的能力开始,再逐步收回。代码解释器则从零开始。开箱即用时,它无法读取文件、发起网络请求或安装依赖项。它只有语言本身:变量、函数、对象、循环、条件语句等。所有更强大的能力都通过宿主框架有意桥接进来。

(图片:解释器与沙箱能力对比图)

最具代表性的桥接能力是在代码中调用子智能体(https://www.langchain.com/blog/introducing-dynamic-subagents-in-deep-agents)。智能体获得的不是进程管理器或网络栈,而是一个具有窄接口的函数,由宿主框架处理执行。因为桥接归我们所有,我们也能设定其限制:一次可以运行多少个子智能体,以及单个调用能生成多少个。

持久暂停

执行隔离和能力限制确保了正在运行的程序的安全;最后一项要求是保持它存活。一个生产级别的智能体必须在执行危险操作之前停下来等待人类,而这个批准可能在几秒、几小时甚至几天后才返回,那时智能体可能早已被进程驱逐。那么,如何将一个半途而废的程序暂停那么久,并精确地从暂停处恢复呢?

由于 QuickJS 在 WASM 内运行,我们可以直接暂停程序本身,而不是重新构建它。我们将解释器的线性内存序列化为 LangGraph 状态;恢复时,宿主框架恢复快照,并将结果反馈回正在等待该结果的调用。程序只会看到一次异步调用花了很长时间才返回。

试试看

背后的两个包现已公开,目前均为实验版本:

  • quickjs-rs(https://github.com/langchain-ai/quickjs-rs)—— 用于通过 WASM 运行 QuickJS 的运行时和 Python 绑定。
  • langchain-quickjs(https://pypi.org/project/langchain-quickjs/)—— 基于 quickjs-rs 构建的 Deep Agents 中间件。

我们正与少数紧密合作伙伴合作,将它们投入生产,并根据这些部署的反馈持续收紧运行时。如果你想了解解释器究竟能解锁什么,请阅读我们关于动态子智能体(https://www.langchain.com/blog/introducing-dynamic-subagents-in-deep-agents)的文章,或者直接亲自尝试!

uv add deepagents langchain-quickjs
from deepagents import create_deep_agent
from langchain_quickjs import CodeInterpreterMiddleware

agent = create_deep_agent(
    model="baseten:zai-org/GLM-5.2",
    middleware=[CodeInterpreterMiddleware()]
)

相似文章

@LangChain: 关于Managed Deep Agents您需要了解的一切:

X AI KOLs Timeline

LangChain 宣布 Managed Deep Agents 进入私有测试版,这是一个托管的 API 优先运行时,用于构建、运行和生产中操作深度代理,利用开源 Deep Agents 工具集,并与 LangSmith 集成,实现持久执行、流式处理和人机协作工作流。