[智能体-364]: Deep Agents,什么样的代码是在沙箱中执行?
一、核心判定规则
一句话总结:凡是会调用系统接口、读写本地文件、执行脚本、发起网络请求、运行外部可执行程序的代码 / 命令,一律在沙箱执行;仅纯内存逻辑、文本计算、纯算法运算,默认不走沙箱。
结合之前的架构:
- 属于Tool(外部调用)的代码 / 命令 → 沙箱执行
- 属于Skill(纯 LLM 推理、文本处理)的逻辑 → 不进沙箱
二、必须在沙箱中执行的代码 & 指令
1. Python 代码(最常见)
只要是 Agent动态生成、并要求运行的 Python 代码,全部走沙箱。
典型场景 & 示例
- 数值运算、循环、基础算法
python
运行
# 执行类代码 → 沙箱 total = 0 for i in range(1, 101): total += i print(total)- 数据处理、第三方库调用(
pandas/numpy/matplotlib等)
python
运行
import pandas as pd df = pd.DataFrame([1,2,3]) print(df.describe())- 文件读写(本地物理文件,非 VFS)
python
运行
# 操作宿主机本地文件 → 沙箱 with open("test.txt", "w") as f: f.write("hello")- 网络请求(
requests/urllib)
python
运行
import requests res = requests.get("https://xxx.com")- 子进程、系统调用
python
运行
import os os.system("ls -l")2. Shell / 终端命令
Deep Agents 内置execute工具调用的 Shell 指令,强制沙箱运行:
- 文件操作:
ls/cat/mkdir/cp - 版本控制:
git clone/git pull - 包安装:
pip install/npm install - 进程查看:
ps/top
高危命令(
rm -rf、sudo、useradd等)会先被沙箱黑名单拦截,直接拒绝执行。
3. 其他脚本与可执行程序
- JavaScript / Node.js 代码
- Bash / Shell 脚本
- 编译型程序、二进制可执行文件
- 数据库客户端命令、运维脚本
4. 补充规则
- 子代理(Subagent)生成并执行的代码 / 命令,同样进入独立沙箱;
- 自定义 Tool 中封装的代码执行逻辑,建议手动接入沙箱;
- 只要代码具备影响宿主机环境、访问外部资源的能力,一律沙箱隔离。
三、不会在沙箱中执行的内容
这类逻辑只在LLM 进程、LangChain 应用进程内运行,无系统级风险。
1. 纯文本生成 & 语义处理(Skill 范畴)
只是生成代码文本,不运行代码:
让模型 “写一段排序代码”,仅输出代码字符串,不调用执行器 → 不走沙箱
plaintext
# 模型输出纯文本代码,无运行动作 def sort_list(arr): return sorted(arr)2. LLM 原生能力(各类 Skill)
- 文本摘要、改写、翻译、实体抽取
- 文案创作、逻辑分析、问答对话
- 规则校验、格式整理 全程只有文本交互、模型推理,不触发代码执行。
3. VFS 虚拟文件系统操作
Deep Agents内置read_file/write_file操作虚拟文件:
- 仅操作内存级 VFS,不触碰宿主机真实文件系统
- 属于框架内置能力,不进入沙箱
4. 普通 API 调用(业务接口 / 第三方接口)
通过 LangChain 常规 Tool 发起的 HTTP 接口调用(非代码内requests):
- 例:对接内部业务接口、MCP 服务、通用查询接口
- 这类请求由应用进程直接发起,默认不进沙箱(可按需配置隔离)
5. 纯配置、纯描述性内容
配置文本、JSON、YAML、注释、方案大纲等,仅字符串处理。
四、易混淆场景区分(重点避坑)
场景 1:写代码 VS 运行代码
- 👉写代码(输出文本):Skill → 不进沙箱
- 👉 运行代码(执行逻辑):Tool → 进沙箱
场景 2:VFS 文件读写 VS 本地物理文件读写
- 👉
write_file(操作虚拟文件):框架内置能力 → 不进沙箱 - 👉 Python 代码里
open()(操作本地真实文件):代码执行 → 进沙箱
场景 3:模型内置计算 VS 代码计算
- 👉 LLM 口算、简单逻辑推理:不进沙箱
- 👉 生成代码并用解释器运行:必须进沙箱
场景 4:普通 Tool 网络调用 VS 代码内网络调用
- 👉 自定义 Tool 调用接口:应用进程直接执行
- 👉 Python 代码中
requests.get:代码执行 → 沙箱
五、Deep Agents 自动判定逻辑(框架内部)
- 识别工具类型:
- 调用
execute、代码执行类内置工具 → 自动路由沙箱 - 调用 VFS、规划、纯文本工具 → 跳过沙箱
- 调用
- 内容检测:动态识别内容为Python/Shell/ 脚本,强制执行环境隔离;
- 黑白名单前置拦截:即使进入沙箱队列,命中高危关键字也会直接终止,不执行。
备注:
不对本地文件系统造成未知风险的操作,都可以不再沙箱中执行。
对本地文件系统造成未知风险的操作,都需要在沙箱中执行。
六、极简速记表
表格
| 行为 | 是否进沙箱 | 原因 |
|---|---|---|
| 运行 Python/Shell/ 脚本 | ✅ 是 | 操作系统 / 资源,存在风险 |
| 仅让模型编写代码文本 | ❌ 否 | 纯文本生成,无执行动作 |
| 读写本地真实文件 | ✅ 是 | 系统文件操作 |
| 读写 VFS 虚拟文件 | ❌ 否 | 框架内存文件,无系统风险 |
| 摘要、改写、分析等 Skill | ❌ 否 | 纯 LLM 推理 |
| 代码内发起网络请求 | ✅ 是 | 代码执行行为 |
| 普通业务 API 调用(Tool) | ❌ 否 | 应用层直接调用 |
