CodexQA

行业与实践工具与框架

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

CodexQA 团队阅读约 4 分钟

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

本文目录

人工 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)

觉得有用,转给同事

微信扫码

用微信扫一扫,在手机上打开后即可转发。

用 RSS 订阅

提交勘误