SUZENT / 文档
SUZENT 使用手册

工作区与沙盒

智能体能访问哪些文件夹、文件保存在哪里、如何在隔离沙盒中运行代码,以及如何撤销一轮对话。

主权容器。 主权智能体运行在由你掌控的空间里。本页的设置精确决定了它能访问哪些文件夹、代码在哪里运行,这些都由你有意授予,而不是从某个平台继承而来。请见什么才是主权智能体?。

两种运行方式

主机模式(默认)沙盒模式
命令在哪里运行直接在你的电脑上在隔离的 Docker 容器中
能访问什么只有它的工作区文件夹和你挂载的文件夹只有挂载进容器的文件夹
需要什么无需额外安装Docker Desktop(Windows、macOS)或 Docker Engine(Linux)

可以在对话设置中为单个对话开启沙盒,也可以在 设置 → 安全 中为所有对话开启。

文件放在哪里

每个项目都有自己的工作区文件夹,由项目内的所有对话共享;另外还有一个所有项目共享的文件夹:

文件夹说明沙盒路径主机模式路径
项目工作区智能体的工作文件夹。相对路径都落在这里,所以 report.md 会保存在工作区中。/workspace$PROJECT_PATH
上传文件你在聊天中附加的文件,或从聊天应用发来的文件。/workspace/uploads$PROJECT_PATH/uploads
共享文件夹所有项目共享。记忆也存放在这里。/shared$SHARED_PATH
挂载的文件夹你从电脑上挂载的文件夹(见下文)。你设定的路径,例如 /data以该路径命名的变量,例如 $DATA

在主机模式下,智能体直接使用你电脑上的真实文件夹,所以沙盒路径并不存在,Shell 命令要改用这些变量。$PROJECT_PATH 和 $SHARED_PATH 在沙盒中同样可用,用它们写的脚本在两种模式下都能运行。

在你的电脑上,这些文件夹位于 ~/.suzent/sandbox/:每个项目的工作区在 projects/<项目>/,共享文件夹在 shared/。

对话默认属于默认项目。在侧边栏点击 新建项目(或在对话上选择 移动到项目)可以把相关对话归到一起,它们会共享工作区和项目记忆,但看不到其他项目的文件。

智能体无法读取这些文件夹之外的内容。像 /etc/passwd、../../secret 或 Suzent 自身源代码这样的路径都会被拒绝。

让智能体访问你的文件夹

想让智能体处理你电脑上的某个文件夹,需要先挂载它。

最快的方法是聊天输入框里的 工作目录 按钮:选择一个文件夹,或从 最近使用 中挑一个,它就会挂载到当前对话。再次点击可以查看或移除已挂载的文件夹。

要为所有对话挂载文件夹,在 ~/.suzent/config/local.yaml(这个文件里的设置只留在本机)中为每个文件夹加一行,格式为 "你电脑上的文件夹:智能体看到的路径":

sandbox_volumes:
  - "D:/datasets:/data"
  - "C:/Users/you/Documents/MyVault:/mnt/notebook"

这样智能体就会把 D:/datasets/file.csv 看作 /data/file.csv。在主机模式下,Shell 命令通过以路径命名的变量访问同一个文件夹:/data 对应 $DATA,/mnt/ 下的路径(如 /mnt/notebook)对应 $MOUNT_NOTEBOOK。

使用沙盒

  1. 安装 Docker 并确保它正在运行。
  2. 开启沙盒(见上文)。

就这么简单。每个对话第一次运行命令时会获得自己的容器。容器崩溃会自动重启,闲置 30 分钟后自动停止。你的文件保存在自己的电脑上,所以即使容器被停止或删除,文件也不会丢失。

默认容器包含 Python 和 Shell,可以联网,内存上限 512 MB、使用 1 个 CPU。常见调整写在 ~/.suzent/config/default.yaml 中:

sandbox_network: none          # 让沙盒断网
sandbox_image: suzent-sandbox  # Python + Node.js + 常用数据处理包

要使用 suzent-sandbox 镜像,先在 Suzent 文件夹中构建一次:docker compose -f docker/sandbox-compose.yml build。

全部沙盒设置
设置默认值作用
sandbox_enabledfalse为所有对话使用沙盒
sandbox_imagepython:3.11-slim使用的 Docker 镜像
sandbox_networkbridgebridge 允许联网,none 禁止联网
sandbox_idle_timeout_minutes30闲置多久后停止容器
sandbox_setup_command""容器创建时运行一次的命令,比如安装软件包
sandbox_env{}额外的环境变量(密钥类变量会被拦截)
sandbox_volumes[]要挂载的文件夹,格式为 主机路径:容器路径
shell_denied_env_patterns[]在主机模式下对命令隐藏的环境变量,例如 OPENAI_*

撤销上一轮(重试)

对回答不满意?点击智能体最后一条回复下方的重试图标(↺),或在聊天应用中发送 /retry。Suzent 会回滚这一轮做过的所有改动,然后重新运行你的消息:

  • 对话本身,
  • 智能体用文件工具创建或修改过的文件,无论它们在哪里。

需要注意两点:

  • 只能重试最后一轮,没有多步撤销。
  • Shell 命令做出的改动不会撤销,比如安装的软件包或脚本写出的文件。重要内容请自行备份(或使用 Git)。

故障排查

问题检查什么
智能体找不到文件在你的电脑上查看 ~/.suzent/sandbox/projects/<项目>/。
报错"Path traversal"路径不在允许的文件夹内,先挂载该文件夹。
挂载的文件夹不见了检查 sandbox_volumes 那一行,然后重启 Suzent。
沙盒无法启动确认 Docker 正在运行(docker ps)。
沙盒里找不到 node构建并使用 suzent-sandbox 镜像(见上文)。
沙盒无法联网设置 sandbox_network: bridge(默认值)。
在 GitHub 上编辑此页 ↗

本页内容