常见问题
在左栏找到你看到的现象,右边是原因和修法。引用的提示和产品中文界面上显示的一样。
「检查一次」或预跑没通过
连 GitHub 仓库的项目,「检查一次」或等着的测试预跑没通过时,平台的 AI 先按检查结果和日志自己修测试接入(见预跑)。下面是它修不了,或者你想自己修时的对照。
| 现象 | 原因 | 修法 |
|---|---|---|
| Agent 的日志说缺某个密钥或变量,或者它的模型不认密钥 | 缺项目密钥,或者名称和 review.yaml 里的不一样 | 「密钥」一节列出了 review.yaml 和测试按名字要的值,还缺的标着「还缺」:点名字填进表单,加上值。见项目密钥。 |
services 启动失败(docker compose up exit 1):env file /work/repo/.env not found | 仓库的 Compose 文件用 env_file 读 .env,而 .env 放真实密钥,一般不提交到仓库,沙盒克隆下来就没有 | 测试用不着这些服务时(比如 Agent 自己的 Web 服务,而测试直接调用它的函数),去掉 review.yaml 的 services。要用的话,把 services 写成一个个服务(image、ports、env、ready),值从密钥或 runner_env 给。平台起草的接入文件和 AI 写的都会避开这种 Compose 文件。见 services。 |
Agent 连不上它的工具或数据库:127.0.0.1 上 connection refused | 服务的端口没发布在 127.0.0.1 上,或者容器里的服务只监听 localhost | 在 Compose 文件里写成 "127.0.0.1:47591:47591",或者写进 ports;让服务监听 0.0.0.0。见 services。 |
command not found,或者执行以 “agent exited … without a JSON result” 结束 | agent.command 写错了、执行目录不对,或者 Agent 没输出结果 | 命令从仓库根目录执行(自带镜像:镜像的 WORKDIR)。标准输出的最后一行必须是一个带 text 的 JSON 对象。见 command 方式。 |
exec format error,或者找不到 aarch64 的包 | 沙盒的架构和你们的代码或镜像不配 | 不用你们操作。平台从预跑的日志里认出这个问题后,会自动换到另一种架构再预跑一次,项目的设置先不动。通过了,平台就把「设置 → 沙盒 → 架构」改过去,在页面上写明,并给出「改回」。两种都没通过时,两次的结果都会写出来,这时要看代码或镜像本身。见架构。 |
| 「试运行没通过:测试没有进到 Agent」 | Agent 没启动,或者没接到任务 | 检查 agent.command 或 agent.endpoint,以及沙盒日志里 Agent 的输出。 |
| 「试运行没通过:平台看不到 Agent 调用工具」 | Agent 直接调用工具,没经过工具代理 | 让 Agent 从 attach.base_url_env 读工具地址,或者从 REVIEW_MCP_CONFIG 读 MCP 配置。见 attach。 |
| 「试运行没通过:附件没有交到 Agent」 | Agent 没读测试文件 | 在命令里传 {{files_json}},或者读 REVIEW_FILES 和 REVIEW_FILES_DIR。 |
| 「试运行没通过:看不出 Agent 在用模型做决定」 | Agent 没上报它调用模型的次数 | 在最后那行 JSON 里(或 HTTP 回复里)带上 usage.model_calls。 |
Agent 调 Responses API(/v1/responses)时平台回 HTTP 400 错误,写明了平台的模型不收的东西 | 项目没有 OPENAI_API_KEY,项目的模型是 Gemini 3.8 Flash,平台用 chat completions 应答它。OpenAI 的托管工具、按 file_id 给的文件、存着的提示词模板、conversation 和后台模式都要 OpenAI 自己的服务器。错误代码是 previous_response_not_found 时,指的那次回复已过 6 小时、发的时候是 store: false,或者平台之后重启过 | 托管工具换成函数工具,文件内容和整段对话放进 input。或者在项目页头把模型换成 GPT 模型。见 Agent 的模型。 |
| 「试运行没通过:测试机上的评审模型用不了」 | 评审模型没有密钥,或者模型名写错了 | 用平台提供的评审模型,或者加上它的密钥。见评审模型的密钥。 |
| 「试运行没通过:Agent 在每次测试的上限内没做完」 | budget.per_attempt 对这个任务太小 | 调大 budget.per_attempt 的 minutes 或 model_calls。 |
| 「检查一次之前还差 N 个值:……」 | review.yaml 按名字读的值(像密钥的 env_passthrough、状态读取和数据重置的地址变量),项目密钥和 runner_env 里都没有 | 在「密钥」一节加上。不是秘密的值,点「写进 runner_env」。确定 Agent 用不着的,点「仍然检查一次」。 |
| 「还没有确认过的测试,平台用内置的问题检查时要一个身份变量,沙盒里没有……」 | 没有确认过的测试,也没有身份变量,review.yaml 只在仓库里 | 在 review.yaml 的 runner_env 里加一个合成的测试身份(例如 AGENT_TEST_USER: test-user-1),或者点「让 AI 补全并检查」。 |
| 「测试机不在线:试运行在测试机上跑……」 | 本地测试机没在运行 | 在测试机上运行 reviewctl runner start。 |
review.yaml 保存不了
读不通的文件,网页编辑器不保存,并写明哪一行、哪个字段不对。在测试机上,reviewctl doctor 以退出码 3 结束。
| 现象 | 原因 | 修法 |
|---|---|---|
| 「YAML 写得不对:第 … 行第 … 列附近……」 | 缩进不齐、冒号后面少了空格、引号或括号没配对 | 改那一行。 |
| 「不认识这个字段,检查拼写或者删掉它」 | 任何一层写了 schema 里没有的字段 | 对照参考。 |
| 「这里直接写了密钥……」 | 文件里写了密钥的值 | 删掉它,把变量名加进 agent.env_passthrough,值放进「密钥」。 |
| 「缺了启动命令……」 | driver: command 却没写 agent.command | 写上命令。 |
| 「缺了这个字段」或「应该是……」 | 必填字段没写,或者类型不对 | 在参考里查这个字段。 |
| 沙盒运行以「仓库里没有 .reviewctl/review.yaml」结束 | 仓库和覆盖层里都没有这个文件 | 在目标下的向导里存一份到覆盖层,或者提交一份到仓库。 |
虚拟机一直没接上平台
| 现象 | 原因 | 修法 |
|---|---|---|
| 「第一台虚拟机开机后 12 分钟没接上平台……自动重开了一台」 | 虚拟机没开起来,或者连不上平台。这段时间不收费。 | 不用你们操作:平台删掉它,自动重开一台(同一次测试,同一个人发起的)。 |
| 「平台自动重开的那台也没起来……」 | 重开的那台也没起来 | 不用你们操作:平台已经把任务编号和两台的开机日志发给我们的工程师,查清后联系你们。两次都不收费。 |
| 「云上第一次没能建起虚拟机……」 | 云上暂时建不了这台虚拟机(配额、可用区没有资源等)。不收费。 | 不用你们操作:平台过一分钟自动再建一次;还不行,同上通知我们的工程师。 |
| 「等待沙盒名额……」 | 同时在跑的沙盒已经到了组织策略的上限 | 等一等,或者请所有者调高「同时在跑的沙盒数」。见上限。 |
运行失联或被截断
| 现象 | 原因 | 修法 |
|---|---|---|
「虚拟机中途没了」,或任务以 lost 结束 | 运行中沙盒或测试机不再应答 | 先重置测试后端,因为已经跑的部分可能改了数据。再发起时,勾选确认已经核对过。在有人确认之前,自动触发和 API 发起的运行都会被拒(409 lost_job_unacknowledged)。如果是沙盒里的测试,并且 review.yaml 用到的后端都在沙盒里,平台会自己核对,任务页写「平台已核对」,不用勾选。规则见失联以后。 |
| 「到了单次运行的时间上限(组织策略)……」 | 运行超过了「单次运行最长时间」 | 已执行的部分照常出报告。沙盒里的测试,在报告页点「补跑没执行的 N 次」,平台另开一台沙盒只跑没执行的那几次,结果合进本轮报告(见补跑)。以后少跑一些测试,或者请所有者在套餐范围内调高上限。 |
| 「准备环境卡住:……15 分钟没有输出(最后一行:……)」或「准备环境到了时间上限:……」 | 沙盒准备环境的一步一直没有输出,多半是某个包的安装脚本在下载或编译 Agent 用不到的东西,或者在等一个连不上的地址 | 只装 Agent 要的包,或者跳过用不到的安装脚本;也可以点「让 AI 补全并检查」,它照日志这样改。见准备环境卡住。 |
| 「准备环境卡住:依赖已装完,卡在保存依赖缓存……」或「……卡在恢复依赖缓存……」 | 平台自己保存或恢复依赖缓存的那一步停住了,依赖本身没问题 | 平台的问题,不用改测试接入,这次不收费:过一会儿再试一次。 |
| 「同一个问题连续 2 次:……已经停下」 | 「让 AI 补全并检查」两次检查都卡在同一个错误上,再自动改下去多半还是一样 | 看那次检查的日志,或手动改接入文件;要 AI 再来一轮就点「再试一次」。停下后不再扣钱。 |
| 运行中出现「本月的沙盒小时用完了……」 | 每月的小时用完了 | 见到了上限。 |
| 一次运行显示「没跑起来」 | 测试根本没进到 Agent,结论不可信 | 按上面的办法修好接入,再跑一次。 |
| 「这个项目已有排队或执行中的任务……」 | 一个项目同时只能有一次运行 | 等它结束,或者取消它。 |
登录
| 现象 | 原因 | 修法 |
|---|---|---|
| 「登录链接不存在、已使用或已过期:重新发一封」 | 登录链接 15 分钟内有效,只能用一次 | 在登录页再要一封。同一个邮箱每小时最多发 5 封。 |
| 「邀请码不存在、已使用或已过期」 | 邀请 14 天内有效,只能用一次 | 请所有者重新邀请你。 |
| 「现在不开放注册:请组织的所有者邀请你」 | 只有已经在某个组织里的人能登录 | 请一个组织的所有者邀请你。 |
| 用 GitHub 或 Google 登录后:「现在不开放注册……已经有账号的……」 | 那个账号上验证过的邮箱里没有你在平台上的邮箱 | 在那个 GitHub 或 Google 账号上加上并验证你的邮箱,或者用邮箱登录。 |
| 「注册需要激活码……」或「激活码不对……」 | 注册新账号要填激活码 | 发邮件到 admin@nice2.io 要一个,填进「激活码」再点一次。同一次注册 15 分钟内都能接着用。 |
「……试激活码的次数太多了……」(429) | 同一次注册试满 5 次,或同一个网络一小时内试满 20 次 | 回登录页重新开始,或者一小时后再试。 |
| 「登录取消了……」 | 没有在 GitHub 或 Google 的页面上同意 | 再点一次按钮。 |
| 「这次登录已过期或已经用过……」 | 点按钮后超过 10 分钟,或在别的标签页里又开始了一次 | 在一个标签页里再点一次按钮。 |
| 「这个账号上没有验证过的邮箱……」 | GitHub 或 Google 还没验证那个账号上的任何邮箱 | 先在那边验证一个,或者用邮箱登录。 |
| 「这个 GitHub 或 Google 账号已经关联了平台上的另一个账号……」 | 那个账号已经用来登录平台上的另一个人 | 换一个账号,或者点「接受邀请并登录」接受邀请。 |
「先在浏览器里打开平台,同意《服务条款》和《可接受使用政策》,然后再试」(403 terms_required) | 还没同意现行的条款,比如条款更新了 | 在浏览器里打开平台,勾选后点「同意并继续」。之后命令行马上就能用。 |
| 「CLI 令牌无效、已撤销或已过期……」 | 90 天没用过、登录已满一年,或者被撤销了 | 重新运行 reviewctl login。 |
| 命令行登录代码不被接受 | 代码 10 分钟内有效 | 重新运行 reviewctl login 拿新代码。 |
上传运行
| 现象 | 原因 | 修法 |
|---|---|---|
| “refusing to upload …: possible secrets in …” | 运行里的某个文件还有密钥的值或像密钥的字符串 | 找到 Agent 在哪里把它打出来,改掉;给密钥变量起能被遮住的名字(见脱敏)。 |
| 「运行包解压后超过 512 MB」「运行包里的文件超过 10000 个」,或者单个文件超过 64 MB | 这次运行的证据太大 | 让 Agent 和数据读取少写一些。被拒的运行包一点都不会保留。 |
| “run … is already archived with different content” | 同一个编号的运行已经以别的内容上传过 | 上传后的运行不能改;发起一次新的运行。 |
| 「运行包里的 … 不是 reviewctl 写出的格式」 | 运行的文件被改过,或者 reviewctl 太旧 | 升级 reviewctl,再跑一次。 |
「未登录:先运行 reviewctl login --api <url>……」 | 没有保存的登录,也没有 REVIEWCTL_TOKEN | 登录,或者设 REVIEWCTL_API_URL 和 REVIEWCTL_TOKEN。 |
GitHub 和镜像
| 现象 | 原因 | 修法 |
|---|---|---|
| 「这个 GitHub App 安装已经连在另一个组织上……」 | 这个安装属于你们的另一个组织 | 在那个组织里打开任一项目的「连 GitHub 仓库」,在第 1 步点这个账号旁的「断开」,再回来重新装。 |
| 「你的 GitHub 账号访问不了这个安装……」 | 你在 GitHub 上登录的是别的账号 | 用装了它的 GitHub 账号(或那个 GitHub 组织的所有者)登录 GitHub。 |
| 「安装链接已过期(一小时内有效)……」 | 超过了一小时 | 再点一次「去 GitHub 装 App」。 |
| 「这个安装没有勾选任何仓库……」 | 在 GitHub 上没选仓库 | 到 GitHub 的 App 设置里加上仓库。 |
| 「没读到镜像:……」 | 镜像仓库要登录或拒绝了凭证、标签不存在、连不上镜像仓库,或者清单格式太旧 | 保存「拉取凭证」、检查镜像地址,或者用新版 docker 或 buildx 重新推一次。 |
| 「镜像没有 … 版本,它只有 ……」 | 架构设置选了镜像没有的架构 | 「检查一次」会自己改在镜像有的架构上跑,通过了平台就把项目的「架构」改过去(可以改回)。开始测试时被拒,就把「架构」改成「自动」,或者为那个架构构建镜像。 |
到了上限
| 现象 | 原因 | 修法 |
|---|---|---|
发起被拒,返回 402(「本月的免费额度 $5.00 已经用完了……」「这一期 Pro 的额度 $20.00 和余额都用完了……」「本月的花费已经到了组织所有者设的上限……」「本月的沙盒小时已经用完……」「预付的余额已经用完……」等) | 套餐或组织策略现在不让发起新的运行 | 见测试发不起来的时候。 |
| 「你们的套餐最多……,组织策略只能在这以内调」 | 组织策略的值超过了套餐的上限 | 在上限以内设,或者换套餐。 |
「请求太频繁:… 秒后再试」(429) | 同一个地址每分钟超过 20 次登录请求 | 等提示里的时间。 |
| 「试得太频繁了,请一分钟后再试」 | 一分钟内「试一试」太多次 | 等一分钟。 |
| 「今天助手的用量已到上限……」 | 助手今天的上限用完了 | 明天再用。 |
| 「平台暂停了这个组织……」 | 我们暂停了这个组织 | 找我们恢复。 |
联系我们
写信到 admin@nice2.io,附上:
- 任务编号(
job_…,在运行页面的地址里,/j/job_…),或者运行编号(run_…,在报告的地址里,/r/run_…)。 - 项目的名称或编号,你做了什么、什么时候做的。
- 看到的提示,复制成文字。
不要发密钥的值:我们用不到,你们存的那些我们也读不了。先看看服务状态里有没有已知的故障。