快速开始:在沙盒里把整个 Agent 真跑起来
连一个 GitHub 仓库,大约 30 分钟拿到第一个沙盒运行的实验。
这是只有 Preworld Review 提供的接法:每次运行都在一台全新的虚拟机里起你们的 Agent 和测试后端,每个测试按正常、故障、攻击三种条件发过去,记下每一次工具调用,做完读回数据核对,然后删掉虚拟机。结果和别的实验一样:有分数、和基线的比较、发布门槛,还有带着每个问题证据的完整报告。
开始之前
- 一个 Preworld Review 账号(见快速开始)。
- 一个 GitHub 仓库,你能在它所在的账号或组织里装 App。
- 一个能用一条命令启动的 Agent,比如
node dist/agent.js --message "{{task}}",它通过 HTTP 或 MCP 调用工具。 - Agent 的工具所连系统的测试版:能用 Docker Compose 起来,能重置,能读出数据。别让运行连到生产系统或真实的客户数据。
- Agent 需要的密钥。模型密钥可以不给:用 OpenAI 接口的 Agent 可以改用平台的模型。
1. 建项目,连上仓库
- 在项目列表点「新建项目」,选「会调用工具的 Agent」,起个名字。
- 打开目标,在接法里选「连 GitHub 仓库(推荐)」。
- 点「去 GitHub 装 App」。在 GitHub 上选 Only select repositories,只勾要测的仓库;装完会自动回到向导。
- 选仓库和分支,看完数据边界后勾「我知道了」,点「保存绑定」。

平台的 App 对代码只有读权限;它唯一会写的,是你们打开检查后在测过的提交上挂的一条检查。每次运行都开一台全新的虚拟机,我们叫它沙盒,默认在伦敦,跑完就删。全部权限见连 GitHub 仓库。
2. 写测试接入文件
平台照 .reviewctl/review.yaml 在沙盒里装依赖、起测试后端、启动 Agent。仓库里已经有这个文件,就照它跑;没有的话,向导按探测到的运行时、锁文件和 Compose 文件起草一份:补上启动 Agent 的命令和它的工具在哪里,点保存。它存在平台的覆盖层里,不会改你们的仓库。也可以点「让 AI 补全并检查」,由平台的 AI 写好并检查(怎么做的)。

一份最小的示例:
schema_version: 1
project: { id: prj_01J8ZK3Q9MXYZ0000000000000, name: expense-agent, domain: expense }
services:
compose: docker-compose.test.yml # 测试后端,起在 Agent 旁边
agent:
driver: command
command: [node, dist/agent.js, --message, "{{task}}"] # {{task}} 换成每道测试题
env_passthrough: [OPENAI_API_KEY] # 值来自项目密钥
attach: # 工具调用经过平台,才能记录和注入故障
mode: http_proxy
base_url_env: EXPENSE_TOOLS_BASE
upstream_base_url: http://127.0.0.1:47591/tools
routes:
claim_submit: { method: POST, path: /claim_submit }
backend: # 每次执行前重置数据,结束后读出来核对
mode: own
reset: { type: http, url: http://127.0.0.1:47591/reset, state_ref_path: $.state_ref }
state: { reader: { kind: http, base_url_env: EXPENSE_STATE_BASE, catalog: scenarios/state_queries.yaml } }
runner_env: # 给测试机自己用、不是秘密的值
EXPENSE_STATE_BASE: http://127.0.0.1:47591
scenarios: { dir: scenarios }project.id 照抄就行,云上运行时平台会换成你们项目自己的编号。每个字段的含义见 review.yaml 参考。
端口要发布在 127.0.0.1 上
Agent 只能访问发布出来的端口:Compose 里写成 "127.0.0.1:47591:47591",容器里的服务监听 0.0.0.0。
3. 加密钥
在向导的「密钥」一步,平台列出 review.yaml 和测试按名字要用到的值,并写明每个由谁提供。还缺的会标出来,第一个已经填进表单,补上值就行。不是秘密的值,比如上面状态服务的地址,可以写进 runner_env(「写进 runner_env」)。不加 OPENAI_API_KEY 时,Agent 的模型调用由平台的模型应答,按用量计费(见 Agent 的模型)。

平台收到密钥就把它密封起来,保存后读不回原文,页面上只显示末四位,日志里也会被替换掉。见项目密钥。
4. 写测试
沙盒里的测试是场景:Agent 真去做的一件事,写明做成什么样算完成、做完数据应该是什么样、哪些工具能调哪些不能调、在哪几种条件下跑。场景是项目「来自场景」那个数据集里的行。
打开数据集 →「全部测试(详细列表)」:
| 办法 | 适合 |
|---|---|
| 「让 AI 帮你写测试」 | 「平台读仓库来写」:平台的模型以只读方式读你们的仓库,写好主要任务、边界情况和出故障时的功能测试;也可以「让开发机 AI 读代码」,或者用几句话说说 |
| 「生成攻击数据集」(数据集页上方的视图) | 安全测试:泄露数据、越权、在读到的内容里夹带指令 |
| 「新建测试集」 | 已经有一张表:每行一道测试题和期望的结果 |
| 「手写一个场景」 | 填用户会怎么说、做成什么样算完成、什么绝对不能做 |
AI 写的草稿默认再由 AI 审一遍,没问题就自动确认(「自动审批」,默认打开);第一个功能测试确认后,平台还会自己写一套默认的安全测试。第一次跑,2–3 个功能测试加 1–2 个攻击测试就够了。详见场景与测试集。
5. 检查连接,然后测一个版本
- 在目标下仓库的向导里点「检查一次」。平台开一台沙盒,克隆、装依赖、起测试后端,把一个测试跑一次,看测试是不是真的进到了 Agent。每个阶段和日志都能看到。它不是对 Agent 的测试,也不会生成实验。最近一次检查留在目标 →「连接检查」里。
- 通过后,点**「测试新版本」**(每个分区的右上角)。选要测什么(「全部」「只测功能」「只测安全」或「只重测上次没过或没判出的」)和每项测几遍,点「开始测试」。

「开始测试」先预跑一次,预跑通过才正式开始;每项测 1 遍、只测正常情况时不另外预跑,正式测试本身先当预跑。中途随时可以取消,运行会在当前这次执行结束时停下,已经跑完的部分照常保留。
检查没通过?
页面会写明哪一步出了问题,并给出沙盒日志。最常见的是缺项目密钥、端口没发布在 127.0.0.1 上、Agent 命令写错。连仓库的项目,平台的 AI 会按检查日志修测试接入,再检查一次。更多见常见问题。
6. 看实验
这次运行变成实验下的一个实验。最上面是发布门槛的一句话:「通过发布门槛」或「未通过发布门槛」,带每条规则的实得值。项目一开始有按通过标准写好的默认规则:测试结论要是「通过」,攻击一次都不能得逞,关键任务都要跑到。下面是每个评分器一张卡(「任务完成」「重复副作用」「攻击得逞」…),写着和基线比的变化,再下面每个测试、每种条件一行。

- 点一行,看它的对话、跨度或工具调用、每个分数和理由。「导出修复说明」把修改意见存成文件,交给你们的编码 AI。
- 平台判断不了的行是未判定,写明原因(接入读不到数据、评审模型出错、沙盒中途没了……);它从不算通过。
- 「完整报告」打开这次运行的报告:每个问题写着用户说了什么、调了哪些工具、哪条数据检查没过、怎么修(完整报告)。
把修复推上去,再点一次「测试新版本」:新的实验会和上一个逐行比较。
小贴士
只连测试环境:Agent 会真的调工具、改数据。同一个测试多跑几遍,比如 3 遍,碰巧过一次不算数。一开始少放几个测试,跑稳了再加故障情况和攻击。