CodexQA

Industry & PracticeTools & Frameworks

Inspect 人工 Agent:用同一套沙箱给智能体任务做人类基线

CodexQA 团队4 min read

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

In this piece

人工 Agent

概述

Inspect 的人工 Agent 用来给跑在 Linux 环境里的智能体任务做人类基线。人类基线(human baselining)是让人用和模型相同的任务、沙箱和评分配置把任务做一遍,用来对照模型分数。人工 Agent 只是一种特殊的 Agent:数据集、沙箱和评分器配置与模型完成任务时相同。它不进入智能体循环,而是由 human_cli 向做基线的人提供:

  1. 要完成的任务说明(来自样本的输入或提示)。
  1. 登录为该样本准备的容器的办法(包括开一个远程 VS Code 会话)。
  1. 在容器里使用的命令行,用来查看说明、提交答案、暂停工作等。

人类基线的终端会话默认会录制,以便事后查看用户为完成任务做了哪些操作。

示例

这里对一个 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 之前应满足一些要求:

  1. 任务应能用 Linux 环境里的工具完成(外加可能的网页访问,做基线的人可以用外部浏览器)。
  1. 数据集的 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=myuser

task 命令的 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 -l

UK 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)

Found it useful? Pass it on

WeChat

Scan with WeChat to open it on your phone and forward it.

Subscribe via RSS

Submit a correction