
Deep Agents 上下文检索评测任务拆解以 cb-cloud-6 多文件聚合问答为例【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents导读cb-cloud-6是 deepagents 仓库context-retrieval-evals评测集中一个典型的**多文件聚合aggregation**任务Agent 必须在 10 个文本语料文件中完成跨表检索、多跳关联与数值聚合最终回答某人所有信用卡持有者中总余额最高者这类问题。本文以该任务的 instruction.md 为核心结合任务元数据、语料格式、评测生成器与评分器源码完整剖析一个medium难度上下文检索评测任务从构造、推理到打分的全链路并给出本地运行方法。一、任务定义一份克制到极致的 instruction.mdcb-cloud-6的 instruction.md 全文只有两句话却完整定义了一个上下文检索评测任务的全部约束What is the total bank balance of the person who has the most credit cards among all residents of the same state as the owner of the pet named Betty? If theres a tie for most credit cards, use the highest total bank balance as a tiebreaker.Use only the files under/app/files. Write your final answer (and nothing else) to/app/answer.txt.第一句是问题本体第二句是两条评测协议约束检索边界只能使用/app/files下的文件——这意味着 Agent 被明确禁止求助外部知识或猜测答案只能来自语料答案通道最终答案必须原样写入/app/answer.txt且不要写任何其他内容这保证了评分器可以以稳定的文件路径读取提交内容。从评测设计看该任务属于仓库 context-retrieval-evals README 所述的评测目标每个任务都下发完整语料10 个文件Agent 无法预先推断哪些文件相关必须自行检索、关联与聚合才能作答。二、任务的身份档案task.toml 元数据任务目录下的 task.toml 给出了任务的机器可读档案version 1.3 [metadata] source contextbench suite cloud difficulty medium source_difficulty medium question_type aggregation [environment] network_mode allowlist allowed_hosts [astral.sh, *.astral.sh, github.com, *.githubusercontent.com, pypi.org, *.pythonhosted.org, api.smith.langchain.com, api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, openrouter.ai, *.baseten.co, api.fireworks.ai, ollama.com, api.groq.com, integrate.api.nvidia.com, api.x.ai]关键字段的含义source contextbench任务源自Context-Bench的cloud套件合成的人/车/宠物/账户记录数据集仓库通过harbor_adapters/contextbench适配器从 vendored 的filesystem_cloud.jsonl100 条记录生成任务任务名cb-cloud-i对应第i条记录0 起difficulty/source_difficultydifficulty是权威难度档位初始复制自 Context-Bench 原始标签随后由 adapter.py 中的stamp_calibrated_tiers依据校准记录覆写source_difficulty保留原始标签用于溯源。本任务两字段均为mediumquestion_type aggregation任务类型为聚合——需要跨多条记录做数值求和/比较network_mode allowlist不是完全断网而是白名单模式。因为 Agent 在沙箱内运行必须能访问自身基础设施包镜像 所选模型 API完成引导与回答。白名单只放行基础设施域名任意网页访问被阻断从而防止直接查答案。三、任务目录解剖问题、标准答案与答案通道每个cb-cloud-*任务目录包含四个组成部分cb-cloud-6亦如此路径内容是否入库instruction.md问题文本 答案通道约束提交tests/case.json问题input与标准答案ground_truth提交solution/solve.sh参考解法把标准答案写入/app/answer.txt提交environment/Dockerfile 与生成后语料目录files/Dockerfile 提交语料 git-ignored 后生成tests/{test.sh,judge.py,rubric.txt}校验器三件套任务间字节级一致单源模板git-ignored--populate生成标准答案tests/case.jsoncase.json 是本任务唯一的按任务入库校验输入{input: What is the total bank balance of the person who has the most credit cards among all residents of the same state as the owner of the pet named Betty? If theres a tie for most credit cards, use the highest total bank balance as a tiebreaker., ground_truth: $138,439.16}参考解法solution/solve.shsolve.sh 展示了答案通道的标准写法——一条printf将答案写入/app/answer.txt#!/bin/sh set -eu printf %s\n $138,439.16 /app/answer.txt它同时印证了一个事实该评测是确定性任务标准答案精确到分$138,439.16。沙箱环境environment/Dockerfileenvironment/Dockerfile 与全部任务共享同一模板FROM python:3.12-slim # 构建阶段有网络预装 curl避免沙箱内运行时引导走 apt # 运行时出口流量全部经任务网络白名单走 HTTPS。 RUN apt-get update \ apt-get install -y --no-install-recommends curl ca-certificates \ rm -rf /var/lib/apt/lists/* COPY files/ /app/files/最后一行COPY files/ /app/files/正是 instruction.md 中/app/files约束的来源——语料在构建镜像时被固定进沙箱。四、语料格式10 个文件的合成数据库任务实际下发的是 10 个纯文本数据表全部位于 vendor/files/单源副本生成时复制进每个任务的environment/files/。行数wc -l实测如下文件行数内容people.txt1,500人员主表姓名 IDpets.txt5,742宠物owner 外键 名字vehicles.txt6,748车辆addresses.txt8,136地址owner 州credit_cards.txt8,869信用卡owner 卡号等bank_accounts.txt14,096银行账户owner balanceemployments.txt4,176雇佣关系insurance_policies.txt6,825保险单internet_accounts.txt7,035网络账户medical_records.txt1,530医疗记录合计 64,657 行README 中记录为 64.7K 行语料。各文件格式高度统一以### id (owner: pers-XXXX)作为记录头后续行为键值字段。例如### pet-0184 (owner: pers-0099) pet_id: pet-0184 name: Betty species: Bird breed: Purebred### addr-0188 (owner: pers-0099) address_id: addr-0188 street: 4164 Abigail Cove city: New Cheyenneberg state: Idaho postal_code: 62197 country: United States### acct-0001 (owner: pers-0001) account_id: acct-0001 bank_name: Ryan-Moore Bank routing: 069683510 account_no: KABB71620538179007 balance: 41026.72 currency: USD可以看出owner: pers-XXXX是跨文件关联的外键Agent 需要像操作关系型数据库一样在文件间做 JOIN。语料行数远超任何单文件的直接答案范围Agent 必须依赖工具grep 等而非整读。五、推理链拆解五步拿到 $138,439.16结合 vendored 数据pets.txt中Betty属于pet-0184owner 为pers-0099addresses.txt中pers-0099的州为 Idaho该问题的标准推理链是定位宠物在pets.txt中检索名为Betty的宠物 → 得到 ownerpers-0099定位州在addresses.txt中查pers-0099的state→ Idaho筛选同州居民在addresses.txt中找出所有 state 为 Idaho 的owner: pers-XXXX聚合比较在credit_cards.txt中统计这些人的信用卡数量找出持有最多者题目显式给出平局规则若数量并列则取总银行余额最高者作为 tiebreaker汇总余额在bank_accounts.txt中汇总该人全部账户的balance得到$138,439.16并写入/app/answer.txt。从 vendored 记录filesystem_cloud.jsonl第 7 行可知本题的required_files恰好标注为[pets.txt, addresses.txt, credit_cards.txt, bank_accounts.txt]——即 10 个文件中只有这 4 个真正参与解答这也是上下文检索评测的意义所在Agent 面对全量语料必须自行判断哪些文件相关。六、评分机制不是字符串比对而是 LLM model_judge该评测集的打分刻意避免字符串相等比对而是忠实复刻 Letta letta-evals 上游的model_judgeRubricGraderOpenAI provider。校验入口为 templates/test.sh#!/bin/sh set -eu # 忠实 Letta model_judge 评分器自行写入 /logs/verifier/reward.txt python3 /tests/judge.pyjudge.py 是上游 RubricGrader 的沙箱内复刻关键行为包括评分提示用string.Formatter().vformat将{input}、{ground_truth}、{submission}代入 rubric.txt 中的评分标准无系统提示词、无包裹模型调用通过 Chat Completions 调用要求 JSON Schema 响应格式{score: float ∈ [0,1], rationale}温度规则上游规定o1/o3/gpt-5系列推理模型拒绝 temperature 0.0直接调用会 400因此这类 judge 用 1.0其余模型用 0.0打分与兜底score clamp(float(score), 0.0, 1.0)任何异常按上游行为记 0.0/app/answer.txt不存在时记 0.0对 judge 调用失败重试 5 次后记 0.0。评分标准rubric.txt只允许三档分数0.0 / 0.5 / 1.0并定义了宽容规则数字格式等价$145,315.33 145315.33 $145315.33数字词等价2 dogs two dogs 2姓名匹配大小写不敏感措辞差异可接受单位可隐含只看最终答案中间过程有错但最终答案正确 → 1.0中间过程漂亮但最终答案错误 → 0.0禁止 0.25/0.75 之类的部分分明确拒绝回答refusal才记 0.5作答失败不算 0.5。这意味着 Agent 只要把正确数值以任何常见数字格式写入/app/answer.txt即可获得满分 1.0。七、从记录到任务适配器与生成 CLI任务的生成逻辑集中在 harbor_adapters/contextbench/adapter.pyparse_task_id/record_for_task_id解析cb-cloud-i从 vendoredfilesystem_cloud.jsonl按行索引取出记录generate_task从记录中提取input问题、ground_truth答案与agent_args.extra难度、题型、所需文件随后写入instruction.md、task.toml、Dockerfile、case.json、solve.sh并复制共享语料与校验器populate_corpus单源恢复——语料vendor/files/与不变校验器templates/、vendor/rubric.txt在全部任务间字节一致故不入库git-ignored本地运行前必须用该函数恢复stamp_calibrated_tiers用calibration.json中的权威难度档位覆写各任务task.toml的difficulty。生成/恢复/定档由 main.py 暴露为 CLI# 恢复所有 Context-Bench 任务的语料与校验器本地运行前必做 uv run python -m harbor_adapters.contextbench.main --populate datasets/context-retrieval-evals # 按 ID 生成单个任务 uv run python -m harbor_adapters.contextbench.main \ --output-dir datasets/context-retrieval-evals --task-ids cb-cloud-6 # 用校准记录覆写难度档位 uv run python -m harbor_adapters.contextbench.main \ --stamp-tiers datasets/context-retrieval-evals --calibration datasets/context-retrieval-evals/calibration.json单元测试 test_contextbench_main.py 中有test_checked_in_contextbench_dataset_matches_representative_calibration冻结 30 个任务与校准记录对齐、test_populate_restores_corpus_from_vendor验证语料恢复、test_generate_task_is_idempotent验证重复生成覆盖而非报错等用例可用于印证上述流程。八、难度定标与代表性采样calibration.json 记录了对 100 个源任务配对跑 6 轮gpt-5.6-terra 与 gpt-5.6-lunabarecreate_deep_agent框架的结果并从中选取 30 个代表性任务。cb-cloud-6的记录为cb-cloud-6: {source_difficulty: medium, pass_at_bare: 1.0, terra_pass_at_bare: 1.0, luna_pass_at_bare: 1.0, n: 6, tier: medium}即来源难度medium校准后tier仍为medium两模型 6 次试运行均通过pass6 6/6pass_at_bare为 Terra 分数1.0保留该字段仅为与既有适配器兼容。任务清单表见 README.md中cb-cloud-6位列aggregation类型。整个 30 任务样本保留了全量 100 任务的聚合画像Terra 510/60085.0%、Luna 552/60092.0%样本为 153/18085.0%与 166/18092.2%。九、本地运行从 populate 到 harbor run仓库 dataset.toml 注明这是本地 Harbor 数据集不发布到 registry按任务目录扫描发现。本地运行完整路径为# 1. 恢复每个任务的语料environment/files/与校验器tests/{test.sh,judge.py,rubric.txt} uv run python -m harbor_adapters.contextbench.main --populate datasets/context-retrieval-evals # 2. 通过 Harbor 运行示例只跑 cb-cloud-6 单任务配合模型与 judge 环境变量 uv run harbor run \ --agent langgraph \ --agent-kwarg project_pathdeepagents_harbor/langgraph_project \ --agent-kwarg configlanggraph.json \ --agent-kwarg graphbare \ --dataset datasets/context-retrieval-evals \ --model anthropic:claude-opus-4-8 \ --include-task-name cb-cloud-6 \ --verifier-env OPENAI_API_KEY${OPENAI_API_KEY} \ --verifier-env JUDGE_PROVIDERopenai \ --verifier-env JUDGE_MODELSgpt-5.6-luna \ ...CIharbor.yml在构建任务镜像前会自动执行--populate。注意校验器为LLM judge必须通过--verifier-env注入 judge 的 API Key 与JUDGE_MODELS默认gpt-5.6-luna评测被测模型时建议用独立模型作 judge 避免自评否则 verifier 会直接退出而不写 reward。更完整的本地环境变量清单参见 UNIFIED_EVALS.md 与 CONTRIBUTING.md。十、小结cb-cloud-6虽只是 30 个上下文检索评测任务之一却完整浓缩了该评测集的全部设计哲学检索不可预判10 个文件全量下发Agent 必须自行定位pets.txt → addresses.txt → credit_cards.txt → bank_accounts.txt四条相关文件推理必须多跳宠物 → 主人 → 州 → 同州居民 → 信用卡数最多的个人含平局规则→ 总余额缺一跳即无法作答答案通道严格/app/answer.txt只允许最终答案配合$138,439.16这一精确 ground truth打分宽容但结构化LLM model_judge 依 rubric 给出 0.0/0.5/1.0 三档数值格式、姓名大小写与措辞差异均被容忍但拒绝作答与作答错误泾渭分明。对于正在评测或训练 Deep Agents 的开发者cb-cloud-6是一个理想的聚合型上下文检索烟雾测试用例它难度适中medium、双模型 6/6 通过、所需文件仅为 4 个适合作为 pipeline 连通性验证与检索策略回归的锚点。【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考