数据准备 Agent 可以做什么?
数据准备 Agent 会根据模型生成的工具调用读取资料、整理数据并写入工作区。它没有不受限制的系统 Shell,但部分工具能够修改或删除工作区内容。开始运行前,应把工作区视为可由 Agent 操作的区域。
默认工具一览
| 工具 | 主要参数 | 能力与影响 |
|---|---|---|
workspace_shell | commandoutput_limit_bytes | 在工作区中读取、复制、移动、删除、创建和解压文件。会改变工作区。 |
workspace_code_executor | programtimeout_secondsmemory_limit_mboutput_limit_bytes | 执行受限 Python,用于 pandas/NumPy 数据处理;可以读写、重命名和删除可写工作区文件。 |
web_search | querymax_results(1–10) | 向公共搜索服务发送查询并返回搜索结果,不写工作区。 |
web_fetch | urlmax_characters(1000–50000) | 读取公共 HTTP/HTTPS 网页;拒绝私网地址、带凭据 URL 和重定向。 |
read_pdf | sourcestart_pagemax_pages(1–50) | 读取工作区 PDF 或公共 URL;下载上限 25 MiB,不修改文件。 |
read_skill | namefile_pathshow_treequery | 读取已启用 Skill 的说明和附属文件。Skill 是给 Agent 的指令,可能影响后续工具选择。 |
validate_context_data | 无参数 | 使用生产环境的数据加载器校验工作区中的 context.data/manifest.json 与 NPY 文件,并给出可操作的错误和修复建议;不直接修改内存上下文。 |
可以在数据准备 Agent 的“设置 → 能力”中停用不需要的工具。启用自定义工具或 Skill 后,实际能力可能超出本页列出的默认范围。
会改变工作区的工具
高影响workspace_shell
这是用 Python 实现的受限 Shell 风格命令语言,并不会把文本交给系统 Shell。支持:
ls, cat, head, tail, wc, grep, sort, cut cp, mv, rm, mkdir, gzip, gunzip, unzip, tar
允许的参数形式如下;除此之外的选项会被参数解析器拒绝:
ls [-a|--all] [-l] [PATH ...]
cat [-n|--number] [FILE ...]
head [-n N|--lines N|-N] [FILE]
tail [-n N|--lines N|-N] [FILE]
wc [-l] [-w] [-c] [-m] [FILE ...]
grep [-i|--ignore-case] [-v|--invert-match] [-n|--line-number]
[-c|--count] [-F|--fixed-strings] PATTERN [FILE]
sort [-r|--reverse] [-n|--numeric-sort] [-u|--unique] [FILE]
cut [-d DELIMITER|--delimiter DELIMITER] -f FIELDS [FILE]
cp [-r|-R|--recursive] [-f|--force] SOURCE DESTINATION
mv [-f|--force] SOURCE DESTINATION
rm [-r|-R|--recursive] [-f|--force] PATH ...
mkdir [-p|--parents] DIRECTORY ...
gzip [-k|--keep] [-f|--force] FILE
gunzip [-k|--keep] [-f|--force] FILE
unzip [-d DIRECTORY|--directory DIRECTORY] FILE
tar (-x|--extract) [-z|--gzip] (-f FILE|--file FILE)
[-C DIRECTORY|--directory DIRECTORY]
cp、mv、rm、mkdir、压缩与解压命令会创建、覆盖、移动或删除工作区内容。- 路径必须位于工作区内;绝对路径、
..路径穿越以及逃逸工作区的符号链接会被拒绝。 - 不支持未列出的命令,包括
chmod、curl、wget、python和bash。 - 不支持重定向、
;、&&、||、后台任务、通配符展开、环境变量展开、命令替换或任意程序启动。 - 只支持由竖线连接的内存文本管道;
output_limit_bytes默认 64 KiB,有效范围为 1 KiB–1 MiB。
高影响workspace_code_executor
该工具为数据清理提供受限 Python 环境。它允许 NumPy、SciPy、pandas、CSV 等模块,并允许通过 open() 以及受限 os 接口操作工作区。
- 可以在可写工作区内创建、改写、重命名或删除文件和目录。
- 不能访问工作区外的路径,也不能修改
--mount输入。 - 网络和 subprocess 模块不在允许列表;系统命令、进程创建、信号、符号链接与路径逃逸被阻止。
- 执行在独立进程中:
timeout_seconds默认 30、范围 1–120;memory_limit_mb默认 1024、范围 64–4096;output_limit_bytes默认 64 KiB、范围 1 KiB–1 MiB。超出范围的数值会被收窄到边界。
这是纵深防御,而不是通用恶意 Python 沙箱。第三方科学库很复杂,不应把这个工具当作保护同一用户账户下机密文件的唯一边界。
两种“只读”保护
--mount 启动只读挂载
用 sr-harness run --mount PATH ... 提供的文件或目录会显示锁图标。SRHarness 保存逻辑路径与源路径的映射,所有内置工作区写接口都会拒绝修改这些路径;网页不提供解锁操作。它适合把原始数据作为只读输入交给 Agent。
sr-harness run \ --workspace-dir ./sr-workspaces \ --mount ./original-data ./papers
--mount 是 SRHarness 的应用层只读约束。若 SRHarness 进程本身对源文件具有系统写权限,那么未来启用的自定义工具、存在缺陷的依赖或工作区约束之外的代码仍可能绕过应用层规则。
网页手动锁定
在左侧“工作区”中打开文件或目录的 ⋯ 菜单,选择“锁定”。目录锁定会递归处理其中的文件和子目录;锁定后显示锁图标,移动、重命名和删除入口会隐藏。再次打开菜单可选择“解锁”。
该操作使用 chmod 移除写权限,并由内置工作区接口额外检查权限位。它能有效避免 Agent 的正常工具调用误改数据。
workspace_shell 不支持 chmod,受限代码执行器也不公开它,但拥有等价权限修改能力的自定义工具、Skill 或未来配置原则上可以重新添加写权限,然后修改或删除数据。如何确保原始数据不会被修改
要对 Agent 进程提供系统层面的强制保护,请同时采用以下做法:
- 保留一份不交给 SRHarness 的离线或不可变备份。
- 让 SRHarness 使用独立的非 root 系统用户运行,该用户对原始数据没有写权限。
- 由管理员把原始数据以操作系统级只读 bind mount、只读容器卷或只读存储快照提供给该用户,再通过
--mount加入工作区。 - 把所有输出写入单独的可丢弃工作区。
# Linux 示例:由管理员建立内核强制的只读 bind mount sudo mount --bind /data/original /mnt/srh-original sudo mount -o remount,bind,ro /mnt/srh-original # 以无提权能力的独立用户启动,并使用独立输出目录 sudo -u srharness sr-harness run \ --workspace-dir /srv/srharness/workspaces \ --mount /mnt/srh-original
在 SRHarness 进程不具备 root、CAP_SYS_ADMIN 或源目录写权限的前提下,Agent 无法通过 chmod 将内核只读挂载变为可写。对于不可替代的数据,离线备份仍是最终保障。