尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Harbor 智能体任务验证

Harbor 智能体任务验证 Harbor 智能体任务验证框架实战国内 Windows 环境从 0 到 1 全流程踩坑记录本文记录了从环境搭建、任务结构理解、三步验证流程nop → oracle → check到五个隐蔽深坑镜像浮动 tag、CRLF 行尾、镜像加速器 DNS、Agent 预装超时、check 命令语法的完整实战一、Harbor 是什么Harbor 是一个Agent 任务验证框架它把让 AI 智能体Agent解决一个软件开发任务并自动验证结果是否正确这件事流水线化。核心概念概念说明Task一个软件开发任务包含任务描述instruction、初始代码workspace、参考解法solution、验证脚本verifier/testsAgent用来解题的 AI 编码代理如 codex、claude-code、openclaw 等Trial一次Agent 从零解题 → 跑验证的完整尝试Reward验证结果得分0.0 失败 / 1.0 成功nop / oracle内置的两种对照 agentnop 什么都不做验证基线oracle 直接应用官方解法验证任务本身可解check子命令用真实 Agent 解任务并按 rubric 审查任务质量一句话理解验证逻辑nop啥也不干 → reward 应为 0.0验证镜像能构建、测试能跑 oracle应用官方解→ reward 应为 1.0验证任务本身有解、环境干净 check真实 Agent 解→ reward 反映 Agent 能力rubric 反映任务质量二、环境准备Windows Docker uv本实战环境项配置操作系统WindowsPowerShell容器Docker Desktopdaemon 配置在~/.docker/daemon.jsonHarbor 安装方式uv tool install harbor二进制在~/.local/bin沙箱后端docker本地镜像构建 容器运行Agentcodex容器内预装模型通过 OpenAI 兼容网关OPENAI_BASE_URLOPENAI_API_KEY环境变量注入PowerShell 下每次运行前注入环境变量注意替换为你自己的网关地址与密钥# 让 harbor CLI 进 PATHuv tool 安装的位置$env:Path $env:USERPROFILE\.local\bin;$env:Path# 解决中文输出乱码$env:PYTHONUTF8 1# LLM 网关换成你自己的 OpenAI 兼容地址与密钥$env:OPENAI_BASE_URL https://your-gateway/v1$env:OPENAI_API_KEY YOUR_API_KEY# 临时目录Windows 上给容器/构建用$env:TMPDIR D:/tmp;$env:TEMP D:/tmp;$env:TMP D:/tmp提示uv tool install harbor安装的 harbor 用的是独立 Python 环境在%APPDATA%\uv\tools\harbor与系统 Python 互不干扰升级用uv tool upgrade harbor。三、理解任务结构一个 task 由什么组成以实战中的task_06预约时区一致性为例标准目录结构task_06/ ├── task.toml # 任务元信息名称、环境规格、超时、模型配置 ├── instruction.md # 给 Agent 看的任务描述需求文档 ├── environment/ # 沙箱环境构建材料 │ ├── Dockerfile # 环境镜像含 workspace 拷贝 依赖安装 │ └── workspace/ # 初始代码Agent 在这个基础上改—— 通常是个 git 仓库 ├── solution/ # 官方参考解法 │ ├── solve.sh # 应用解法的方式 │ └── gold_patch.diff # 官方补丁oracle 用 git apply 应用 ├── tests/ # 验证脚本verifier 在容器内跑 └── workspace/ # host 侧的 git 仓库供检查task.toml关键字段[task] name example/task_06_appointment_timezone_consistency version 1.0.0 [verifier] timeout_sec 900.0 [agent] timeout_sec 1800.0 [environment] network_mode public # 需要联网装依赖 build_timeout_sec 1200.0 os linux cpus 2 memory_mb 4096 storage_mb 8192 [environment.env] TZ UTC理解要点environment/workspace会被COPY进镜像tests由 verifier 在容器内挂载运行solution不进镜像防作弊。Agent 解题时只能看到 instruction.md workspace。四、三步验证流程nop / oracle / check4.1 nop 基线 —— 验证环境能跑harbor run-p D:\tasks-a nop-m model-i task_06预期输出1/1 Mean: 0.000 # nop 不干活reward 必须是 0.0 Trials 1 Exceptions 0 Mean 0.000意义nop 通过 镜像能构建、测试套件能跑、verifier 正常。如果 nop 都报错说明是环境问题不是 Agent 问题。4.2 oracle 参考解 —— 验证任务有解harbor run-p D:\tasks-a oracle-m model-i task_06预期输出1/1 Mean: 1.000 # 官方解能过全部测试 Reward 1.0 Count 1意义oracle 1.0 说明任务本身可解、workspace 初始状态正确、测试与解法匹配。oracle 不调模型直接应用官方 patch所以它失败一定是环境/任务问题。4.3 check —— 真实 Agent 质量审查harbor check D:\tasks\task_06-a codex-m model-k 3-n 3 --ae OPENAI_BASE_URLhttps://your-gateway/v1 --ae OPENAI_API_KEYYOUR_API_KEY-k 3每个 task 尝试 3 次算 passk-n 3并发 3--ae把网关环境变量传给容器内的 Agent关键不传 Agent 起不来-o结果输出目录默认jobs/预期输出Task Pass Fail N/A Cost ($) task_06 5 5 1 0.0833 ... Total agent cost: $0.27意义check 用真实 Agent 独立解题验证人类新手能不能做出来同时跑 rubric 审查任务描述、测试覆盖、依赖钉版等 11 项质量指标。五、踩坑实录重点以下五个坑是本实战最有价值的部分全部是真实踩过并修复的。坑 1镜像构建 exit 100 —— 浮动 tag 引发的 perl 版本冲突现象harbor run构建环境镜像时 apt 报错exit code 100The following packages have unmet dependencies: git : Depends: perl but it is not installable E: Unable to correct problems, you have held broken packages.排查过程一开始怀疑是国内 apt 源问题换成阿里云源依旧报错。仔细看报错git依赖perl但系统里的perl-base版本和 apt 仓库里的perl对不上。查证后确认根因基础镜像 python:3.11-slim浮动 tag ↓ 2026 年实际指向 Debian 13 (trixie)perl-base 5.40 apt 源锁定 Debian 12 (bookworm)git 依赖的 perl 5.36 ↓ git 装上后依赖 bookworm 的 perl与系统 trixie 的 perl-base 冲突根因python:3.11-slim这个浮动 tag会跟随 Debian 发行版演进。2026 年它已经指向 trixieDebian 13而很多人 apt 源还锁着 bookwormDebian 12两边包版本对不上。修复把基础镜像钉死到具体发行版# 错误浮动 tag FROM python:3.11-slim # 正确钉死发行版base 与 apt 源一致 FROM python:3.11-slim-bookworm通用教训凡是基础镜像用浮动 tag 自配 apt 源的组合都必须把 base 也钉到同一发行版否则 apt 装包迟早踩版本冲突。这坑对任何 Python/Debian 系镜像都通用。坑 2oracle reward0.0 —— CRLF/LF 行尾不匹配现象oracle 跑 45 秒就结束Mean: 0.000但日志里 Agent 明明执行了git applypatch failed: main.py:1 error: patch does not apply排查过程先在宿主 Windows 上git apply --check gold_patch.diff——完全成功。诡异。对比 workspace 内容与 patch 期望 —— 内容一致。用cat -A看行尾发现真相# workspace/main.pyWindows 检出CRLF 行尾 ...timedelta^M$ ← 每行末尾有 ^M回车符 \r # gold_patch.diffLF 行尾 ...timedelta$ ← 干净无 \r根因链条Windows git autocrlftrue → .py 文件全部 CRLF COPY 进 Linux 容器 → 行尾保持 CRLF 容器内 Linux git core.autocrlffalse → 不自动转换 git apply 第 1 行上下文 timedelta\r ≠ patch timedelta → 全部 hunk 失败 → 代码没改 → 测试全挂 → reward 0.0为什么宿主测试通过Windows 上 git 默认自动转换行尾所以宿主git apply --check永远看不出问题。只有进 Linux 容器才暴露。修复Dockerfile 里COPY workspace/之后统一把 CRLF 转 LFCOPY workspace/ /app/ # Normalize CRLF - LFWindows 检出的 git 仓库必加否则 git apply 全失败 RUN find /app -type f \( -name *.py -o -name *.sh -o -name *.txt \ -o -name *.md -o -name *.toml -o -name *.cfg -o -name *.ini \ -o -name *.json -o -name *.yml -o -name *.yaml \) \ -exec sed -i s/\r$// {} 2/dev/null; true修复后 oracle 重跑reward 1.017 tests PASSED。通用教训凡是 “Windows 上管理的 git 仓库 Linux 容器里 git apply 补丁” 的组合CRLF 坑必踩。修复统一加在 Dockerfile一劳永逸。坑 3镜像拉取失败 —— 加速器域名 DNS 不稳定现象oracle 重跑时镜像构建报错failed to fetch anonymous token: Get https://docker.m.daocloud.io/auth/token...: dial tcp: lookup docker.m.daocloud.io: no such host排查过程宿主机nslookup docker.m.daocloud.io能解析出 IP —— 说明不是全网挂。Docker daemon 配置的 DNS223.5.5.5/8.8.8.8解析失败。结论国内公共镜像加速器域名不稳定时好时坏daemon 内部解析失败导致拉不到 base 镜像。修复不重启 Docker 的最快路径先用docker pull把 base 镜像直连拉下来做本地缓存dockerpull python:3.11-slim-bookworm之后 Harbor 构建时FROM直接命中本地缓存不再走加速器。验证dockerimages python# python:3.11-slim-bookworm 199MB 本地缓存命中通用教训国内 Docker 环境凡是构建需要拉 base 镜像的环节先docker pull预热本地缓存能绕开绝大多数加速器抽风。长期方案是换更稳的加速器或自建 registry。坑 4Agent 初始化超时 —— 运行时下载被墙现象check 用 codex agent 时容器内 Agent 初始化阶段卡住直到AgentSetupTimeoutError。根因codex agent 首次运行时要下载 Node 运行时 npm 包而默认源nodejs.org / npmjs.org在国内环境极慢或被墙导致 setup 超时。修复在环境镜像里预装好 Agent 及其运行时让 Harbor 的install()短路它检测到codex --version能跑就直接跳过下载# 国内源npmmirror 装 Node 22 RUN set -eux; \ NODE_VER22.11.0; \ curl -fsSL https://registry.npmmirror.com/-/binary/node/v${NODE_VER}/node-v${NODE_VER}-linux-x64.tar.xz -o /tmp/node.tar.xz; \ tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components1; \ rm -f /tmp/node.tar.xz; \ npm config set registry https://registry.npmmirror.com; \ npm install -g openai/codex0.149.0; \ codex --version同时镜像里还需要 codex 的运行时依赖bash、ripgrep、curl、xz-utils。通用教训Agent 框架的运行时下载环节是国内环境的头号超时源。把 Agent 整个预装进环境镜像是最稳的做法。坑 5check 命令报 “Agent name not valid”现象harbor run -a check ... ValueError: Agent name check is not valid. Valid agent names: {goose, openclaw, aider, ..., nop, oracle, ...}根因把check当成了 agent 名因为 nop / oracle 是-a的值误以为 check 也是。实际上check是 harbor 的子命令不是 agent。正确语法harbor check --help权威确认# 错误harbor run -a check ... # 正确 harbor check path --agent codex --model model -k 3 -n 3注意check 里path是位置参数task 目录或其父目录不是-p在 check 子命令里-p是 prompt 文件-i才是按 task 名过滤。# 只检查某个 taskharbor check D:\tasks\task_06-a codex-m model-k 3-n 3# 检查目录下所有 taskharbor check D:\tasks-a codex-m model-k 3-n 3通用教训nop / oracle 是 agent-a指定check / run / view 是子命令。搞混是 harbor 新手最高频错误。六、结果解读reward / passk / cost以 task_06 最终 check 为例3/3 trials reward1.0 codex 3 次尝试全部解出 pass2 1.0 n_errors 0 Total agent cost: $0.27解读要点指标含义参考值reward单次尝试的验证得分1.0 全过passkk 次尝试中至少一次成功的概率1.0 稳定可解Mean多次尝试平均分反映难度costAgent 调用的 token 花费用于评估性价比rubric pass/fail任务本身质量描述/测试/依赖全绿 高质量任务rubric 常见扣分点如果想让任务质量更高behavior_in_task_description需求描述没写全接口契约behavior_in_tests测试没覆盖某些声明的行为分支pinned_dependencies依赖没钉版本用了latest/ 浮动 tagtests_or_solution_in_image测试代码混进了 runtime 镜像test_deps_in_imagepytest 等测试依赖装进了 runtime 层七、最佳实践清单直接抄7.1 Dockerfile 模板国内 Windows 环境# 1. 钉死基础镜像发行版防浮动 tag 的 perl 冲突 FROM python:3.11-slim-bookworm # 2. 国内 apt 源阿里云 RUN printf %s\n \ precedence ::ffff:0:0/96 100 \ /etc/gai.conf ENV DEBIAN_FRONTENDnoninteractive \ PYTHONDONTWRITEBYTECODE1 \ PIP_NO_CACHE_DIR1 \ PIP_DISABLE_PIP_VERSION_CHECK1 \ PIP_INDEX_URLhttp://mirrors.aliyun.com/pypi/simple \ PIP_TRUSTED_HOSTmirrors.aliyun.com \ TZUTC RUN set -eux; \ { \ echo deb http://mirrors.aliyun.com/debian/ bookworm main; \ echo deb http://mirrors.aliyun.com/debian/ bookworm-updates main; \ echo deb http://mirrors.aliyun.com/debian-security/ bookworm-security main; \ } /etc/apt/sources.list; \ rm -f /etc/apt/sources.list.d/debian.sources; \ apt-get update; \ apt-get install -y --no-install-recommends \ ca-certificates curl bash ripgrep xz-utils git patch tzdata; \ rm -rf /var/lib/apt/lists/* # 3. 预装 Agentnpmmirror避免 setup 超时 # ...见坑 4 的 Node codex 安装段... # 4. 拷贝 workspace 后做 CRLF - LF 归一化Windows 检出必加 COPY workspace/ /app/ RUN find /app -type f \( -name *.py -o -name *.sh -o -name *.txt \ -o -name *.md -o -name *.toml -o -name *.cfg -o -name *.ini \ -o -name *.json -o -name *.yml -o -name *.yaml \) \ -exec sed -i s/\r$// {} 2/dev/null; true # 5. 安装应用依赖国内 pip 源 RUN pip install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com \ --no-cache-dir -r /app/backend/requirements.txt \ pip install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com \ --no-cache-dir pytest8.3.3 httpx0.27.2 tzdata7.2 流程检查单□ 1. docker pull 预热 base 镜像绕开加速器 DNS 抽风 □ 2. nop 跑通Mean0.0, Exceptions0→ 环境 OK □ 3. oracle 跑通Mean1.0→ 任务有解、环境干净 □ 4. check 跑通reward 高 rubric 全绿→ 任务质量达标 □ 5. 所有 Dockerfile 钉版基础镜像 CRLF 归一化 国内源 Agent 预装7.3 命令速查目的命令跑 nop 基线harbor run -p parent -a nop -m model -i task跑 oracle 参考解harbor run -p parent -a oracle -m model -i task真实 Agent 验证harbor check path -a codex -m model -k 3 -n 3 --ae OPENAI_BASE_URL... --ae OPENAI_API_KEY...查看结果harbor view jobs_dir上传结果harbor upload job_dir总结跑通 Harbor 任务验证本质是解决三件事环境能构建、任务有解、Agent 能解。国内 Windows 环境的难点全在环境这一环——浮动 tag、CRLF、加速器、运行时下载四个坑一个比一个隐蔽。本文的核心资产就是这四个坑的根因 修复以及一套可以直接复用的 Dockerfile 模板。
返回列表