Inspect 人工 Agent: 用 同 一套 沙 箱 给 智能 体 任务 做 人类 基 线
英国 AI Security Institute 的 Inspect 文档:human_cli 不跑模型循环,而是让人登录同一沙箱提交答案。说明任务命令、中途评分、终端录制和无界面登录。

本文目录
人工 Agent
概述
Inspect 的人工 Agent 用来给跑在 Linux 环境里的智能体任务做人类基线。人类基线(human baselining)是让人用和模型相同的任务、沙箱和评分配置把任务做一遍,用来对照模型分数。人工 Agent 只是一种特殊的 Agent:数据集、沙箱和评分器配置与模型完成任务时相同。它不进入智能体循环,而是由 human_cli 向做基线的人提供:
- 要完成的任务说明(来自样本的输入或提示)。
- 登录为该样本准备的容器的办法(包括开一个远程 VS Code 会话)。
- 在容器里使用的命令行,用来查看说明、提交答案、暂停工作等。
人类基线的终端会话默认会录制,以便事后查看用户为完成任务做了哪些操作。
示例
这里对一个 Intercode CTF 样本做人类基线。用 --solver 指定 human_cli,而不是任务默认的求解器:
inspect eval inspect_evals/gdm_intercode_ctf \
--sample-id 44 --solver human_cli评测照常运行,任务界面里会出现 Human Agent 面板,向做基线的人说明任务,并给出进入容器的方法。用户点击 VS Code Terminal 链接后,VS Code 里会打开容器的终端界面:
这个例子用了 VS Code,但并非必须。做基线的人可以用面板底部给出的 docker exec 命令,配合自己习惯的编辑器和终端。人类基线也可以不用任务界面、以无界面方式进行(见下文无界面)。
用户找到旗标后,用 task submit 提交。例如:
task submit picoCTF{73bfc85c1ba7}用法
把 human_cli 指定为任何已有任务的 --solver 即可。重复上面的例子:
inspect eval inspect_evals/gdm_intercode_ctf \
--sample-id 44 --solver human_cli也可以在 Python 里写:
from inspect_ai import eval
from inspect_ai.agent import human_cli
from inspect_evals import gdm_intercode_ctf
eval(gdm_intercode_ctf(), sample_id=44, solver=human_cli())不过,任务在配合人工命令行 Agent 之前应满足一些要求:
- 任务应能用 Linux 环境里的工具完成(外加可能的网页访问,做基线的人可以用外部浏览器)。
- 数据集的
input必须把任务说明写全。许多现有任务做不到这一点,因为它们在默认求解器里才做提示工程。例如,Intercode CTF 评测曾按这种方式修改,才能和人工 Agent 兼容。
进入容器
人工 Agent 在任务的默认沙箱容器里工作。可以用 Human Agent 面板底部打印的命令进入容器。例如:
docker exec -it inspect-gdm_intercod-itmzq4e-default-1 bash -l如果人在 VS Code 里工作,还会提供两个进入容器的链接:
- VS Code Window 打开一个已登录容器的新 VS Code 窗口。人可以在 VS Code 界面里建终端、浏览文件系统等。
- VS Code Terminal 在 VS Code 主编辑区打开新终端(比面板里默认终端的空间更大)。
任务命令
人工 Agent 会在默认沙箱里安装任务工具,并向用户展示任务说明和各工具的文档(例如 task submit、task start、task stop、task instructions 等)。默认可用命令如下:
| 命令 | 说明 |
|---|---|
task submit | 提交任务的最终答案。 |
task quit | 不提交答案就退出任务。 |
task note | 在任务记录里记一条笔记。 |
task status | 打印任务状态(时钟、评分等)。 |
task start | 启动任务时钟(继续工作)。 |
task stop | 停止任务时钟(暂停工作)。 |
task instructions | 显示任务命令和说明。 |
说明也会复制到容器用户工作目录下的 instructions.txt。
提交答案
人完成任务后,用 task submit 提交答案。默认情况下,task submit 要求给出明确答案(例如 task submit picoCTF{73bfc85c1ba7})。
如果任务是靠读取容器文件系统来评分,就不需要明确答案。向 human_cli() 传入 answer=False:
solver=human_cli(answer=False)或在命令行用 -S:
--solver human_cli -S answer=false也可以指定正则来校验答案,例如:
solver=human_cli(answer=r"picoCTF{\w+}")退出
如果用户在给定时间内完不成任务,可以用 task quit 退出。这时 answer 为空字符串(随后通常会被判为不正确)。
中途评分
可以选做:让做基线的人在工作中检查可能的答案。用 intermediate_scoring(默认 False):
solver=human_cli(intermediate_scoring=True)或在命令行用 -S:
--solver human_cli -S intermediate_scoring=true打开后,人可以用 task score 查看某个答案在该任务上的可能分数。例如:
task score picoCTF{73bfc85c1ba7}容器用户
默认情况下,人工 Agent 用容器的默认用户登录。可以用 user 指定其他用户。例如:
solver=human_cli(user="myuser")或在命令行用 -S:
--solver human_cli -S user=myusertask 命令的 shell 钩子会追加到该用户的 ~/.bashrc,并且以该用户身份运行。因此如果镜像自带 .bashrc,它必须是该用户可写的普通文件(例如 Dockerfile 里 COPY .bashrc 时要给登录用户 --chown,否则安装会因权限错误失败)。
录制
默认用 Linux 的 script 命令 录制人工 Agent 的终端会话。录下的会话保存在样本存储里,可在 Inspect View 中回放:
可以用 record_session 关掉录制:
--solver human_cli -S record_session=false无界面
上面的例子是从命令行和标准任务界面发起人类基线。你也可能想在服务器环境里准备会话,再单独把登录说明给用户。要压掉标准任务界面、只打印容器登录信息,传入 --display=plain:
inspect eval inspect_evals/gdm_intercode_ctf \
--sample-id 44 --solver human_cli --display plain终端会打印:
Running task gdm_intercode_ctf (1 sample): anthropic/claude-3-5-sonnet-20240620 (config: sample_id: 44)...
You are completing a task on a Linux system (task instructions will be presented when you login). Login to the system with the following command:
docker exec -it inspect-gdm_intercod-iebwzkg-default-1 bash -lUK AI Security Institute,Human Agent,文档页无单独发布日期(检索于 2026-10-06),https://inspect.aisi.org.uk/human-agent.html ,MIT License(Copyright (c) 2024 UK AI Security Institute)
觉得有用,转给同事
微信扫码
用微信扫一扫,在手机上打开后即可转发。