SRHarness
← 返回工作台
Data & system safety

数据准备 Agent 可以做什么?

数据准备 Agent 会根据模型生成的工具调用读取资料、整理数据并写入工作区。它没有不受限制的系统 Shell,但部分工具能够修改或删除工作区内容。开始运行前,应把工作区视为可由 Agent 操作的区域。

结论:不要把唯一副本直接放进可写工作区。网页中的“锁定”适合防止意外修改;它不是针对恶意代码的安全边界。

默认工具一览

工具主要参数能力与影响
workspace_shellcommand
output_limit_bytes
在工作区中读取、复制、移动、删除、创建和解压文件。会改变工作区。
workspace_code_executorprogram
timeout_seconds
memory_limit_mb
output_limit_bytes
执行受限 Python,用于 pandas/NumPy 数据处理;可以读写、重命名和删除可写工作区文件。
web_searchquery
max_results(1–10)
向公共搜索服务发送查询并返回搜索结果,不写工作区。
web_fetchurl
max_characters(1000–50000)
读取公共 HTTP/HTTPS 网页;拒绝私网地址、带凭据 URL 和重定向。
read_pdfsource
start_page
max_pages(1–50)
读取工作区 PDF 或公共 URL;下载上限 25 MiB,不修改文件。
read_skillname
file_path
show_tree
query
读取已启用 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]

高影响workspace_code_executor

该工具为数据清理提供受限 Python 环境。它允许 NumPy、SciPy、pandas、CSV 等模块,并允许通过 open() 以及受限 os 接口操作工作区。

这是纵深防御,而不是通用恶意 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 的正常工具调用误改数据。

警告:网页锁定不是强安全边界。Agent 与 Web 服务通常以同一系统用户运行。虽然当前默认 workspace_shell 不支持 chmod,受限代码执行器也不公开它,但拥有等价权限修改能力的自定义工具、Skill 或未来配置原则上可以重新添加写权限,然后修改或删除数据。

如何确保原始数据不会被修改

要对 Agent 进程提供系统层面的强制保护,请同时采用以下做法:

  1. 保留一份不交给 SRHarness 的离线或不可变备份。
  2. 让 SRHarness 使用独立的非 root 系统用户运行,该用户对原始数据没有写权限。
  3. 由管理员把原始数据以操作系统级只读 bind mount、只读容器卷或只读存储快照提供给该用户,再通过 --mount 加入工作区。
  4. 把所有输出写入单独的可丢弃工作区。
# 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 将内核只读挂载变为可写。对于不可替代的数据,离线备份仍是最终保障。