LangChain最新发布:AI Agent沙箱连接模式详解
Witan Labs的Nuno Campos指出了另一个安全隐患:在这种模式下,Agent的所有部分都拥有与Bash工具相同的权限。随着AI Agent能力的提升,越来越多的Agent需要一个独立的"工作空间"——一台可以运行代码、安装依赖包、访问文件的计算机。Agent在本地运行,当生成需要执行的代码时,调用沙箱提供商(如E2B, Modal, Daytona, Runloop)的API。对于构
随着Agent应用场景的深入,安全隔离的执行环境将成为标配。理解这两种模式的区别,有助于开发者根据实际需求构建更安全、高效的Agent架构。
随着AI Agent能力的提升,越来越多的Agent需要一个独立的"工作空间"——一台可以运行代码、安装依赖包、访问文件的计算机。为了保证安全,这个工作空间通常是一个隔离的沙箱(Sandbox)。

对于构建Agent的开发者来说,问题不在于"是否"使用沙箱,而在于"如何"将沙箱集成到Agent架构中。
LangChain官方博客最近详细探讨了两种主流的连接模式,并分析了各自的优劣势。
核心观点速览
目前主要存在两种架构模式:
• 模式一(Agent IN Sandbox):Agent直接运行在沙箱内部,通过网络与外部通信。这种模式模拟了本地开发环境,Agent与环境紧密耦合。
• 模式二(Sandbox as Tool):Agent运行在本地或服务器上,通过API远程调用沙箱执行代码。这种模式下,沙箱仅作为Agent的一个工具,便于逻辑更新和密钥管理。
模式一:Agent运行在沙箱内 (Agent IN Sandbox)
在这种模式下,Agent本身就驻留在沙箱环境中。你通过网络与Agent进行交互。

实践方式:
构建一个预装了Agent框架的Docker镜像或虚拟机镜像,在沙箱中启动它,并通过HTTP或WebSocket暴露接口供外部调用。
优势:
这种方式最接近本地开发体验。Agent拥有直接的文件系统访问权限,可以自由修改环境。当Agent与执行环境紧密耦合(例如需要特定依赖库或复杂的环境状态)时,这种模式非常有效。
挑战与权衡:
1. 通信基础设施:需要处理跨沙箱边界的通信。虽然部分提供商(如E2B)提供了封装好的SDK,但如果自行实现,则需要处理WebSocket/HTTP层、会话管理和错误处理。
2. 安全风险:API密钥必须存放在沙箱内部以便Agent调用模型。如果沙箱隔离被突破或遭遇提示词注入攻击,密钥可能泄露。
3. 迭代效率:更新Agent逻辑通常需要重新构建镜像并部署,这会减慢开发迭代速度。
4. 知识产权:Agent代码完全运行在沙箱中,面临更高的代码泄露风险。
Witan Labs的Nuno Campos指出了另一个安全隐患:在这种模式下,Agent的所有部分都拥有与Bash工具相同的权限。如果LLM生成的代码可以无限制地访问网络,这将是一个巨大的安全漏洞。而在"沙箱即工具"模式下,你可以更精细地控制权限边界。
模式二:沙箱即工具 (Sandbox as Tool)
在这种模式下,Agent运行在你的本地机器或服务器上。当需要执行代码时,它通过API调用远程沙箱。

实践方式:
Agent在本地运行,当生成需要执行的代码时,调用沙箱提供商(如E2B, Modal, Daytona, Runloop)的API。对Agent而言,沙箱只是众多工具中的一个。
优势:
1. 快速迭代:更新Agent代码无需重构镜像,开发效率极高。
2. 安全性:API密钥保留在沙箱外部,只有代码执行在隔离环境中进行。
3. 关注点分离:Agent的状态(对话历史、推理链、记忆)与执行环境分离。沙箱崩溃不会导致Agent状态丢失,且更换沙箱后端不影响Agent核心逻辑。
4. 并行与成本:支持在多个远程沙箱中并行执行任务,且只需为代码执行时间付费,而非整个Agent运行时间。
挑战与权衡:
主要的缺点是网络延迟。每次执行都需要跨越网络边界,对于包含大量微小执行任务的场景,延迟会累积。不过,许多沙箱提供商支持有状态会话(Stateful Sessions),可以在多次调用间保持变量和文件状态,从而减少不必要的往返。
如何选择?
选择"Agent IN Sandbox"模式,如果:
• Agent与执行环境高度耦合(依赖特定库或复杂状态)
• 需要生产环境与本地开发环境完全一致
• 使用的SDK已经完美封装了通信层
选择"Sandbox as Tool"模式,如果:
• 需要快速迭代Agent逻辑
• 希望将API密钥保存在沙箱之外
• 倾向于将Agent状态与执行环境解耦
代码实现示例
以开源框架 deepagents 为例,展示"沙箱即工具"模式的实现:
from daytona import Daytona
from langchain_anthropic import ChatAnthropic
from deepagents import create_deep_agent
from langchain_daytona import DaytonaSandbox
# 初始化沙箱后端(也可以使用 E2B, Runloop, Modal 等)
sandbox = Daytona().create()
backend = DaytonaSandbox(sandbox=sandbox)
# 创建 Agent,将沙箱作为后端传入
agent = create_deep_agent(
model=ChatAnthropic(model="claude-sonnet-4-20250514"),
system_prompt="You are a Python coding assistant with sandbox access.",
backend=backend,
)
# 调用 Agent
result = agent.invoke(
{
"messages": [
{
"role": "user",
"content": "Run a small python script",
}
]
}
)
sandbox.stop()
在这个流程中:
1. Agent在本地进行规划
2. 生成解决问题的Python代码
3. 调用API在远程沙箱中执行代码
4. 沙箱返回结果
5. Agent根据结果继续在本地进行推理
随着Agent应用场景的深入,安全隔离的执行环境将成为标配。理解这两种模式的区别,有助于开发者根据实际需求构建更安全、高效的Agent架构。
更多推荐
所有评论(0)