news 2026/9/11 20:25:32

deepagents context-retrieval-evals 数据集解析:以 cb-cloud-49 多实体比较任务为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
deepagents context-retrieval-evals 数据集解析:以 cb-cloud-49 多实体比较任务为例

deepagents context-retrieval-evals 数据集解析:以 cb-cloud-49 多实体比较任务为例

【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents

本篇指南以 context-retrieval-evals 数据集 中的cb-cloud-49任务为完整样本,拆解 Deep Agents 上下文检索评测任务的数据结构、单源生成机制、沙箱环境与 LLM 评分逻辑。读完本文,你将掌握 30 个 Harbor 任务目录的每个文件含义、如何在本仓库中定位语料与验证器源码,并能独立复现该任务的"5 文件交叉检索 + 多实体比较"推理路径。

数据集概览:30 个上下文检索任务的来源与难度分层

cb-cloud-49隶属于 libs/evals/datasets/context-retrieval-evals 目录,该目录包含 30 个cb-cloud-<i>任务(cb-cloud-1cb-cloud-88的非连续采样)。数据集定位见 README:

  • 评测内容:Agent 必须在 10 个文件的完整语料中检索、关联(join)并聚合信息才能作答,任务不告知哪些文件相关;
  • 来源:任务派生自 Context-Bench 的cloud套件(合成的人/车辆/宠物/账户记录),由 harbor_adapters/contextbench 依据厂商数据filesystem_cloud.jsonl(100 条记录)生成,cb-cloud-<i>对应第<i>条记录(0 起始);
  • 评分:与上游 Letta letta-evals 一致,使用 LLMmodel_judge对照rubric.txt评分(对措辞/姓名/数字容错),而非字符串相等。

难度分层方面,difficultysource_difficulty是 Context-Bench 原始分层标签(非事后按模型表现标注):30 个任务为2 easy · 10 medium · 18 hardcb-cloud-49在 README 任务表 中标注为hard / multi_entity_comparison,且是入选样本中少数 Terra 未全过(5/6)的任务之一。

任务目录结构:一个自包含 Harbor 评测任务的四个组成部分

cb-cloud-49任务目录的自包含结构如下:

libs/evals/datasets/context-retrieval-evals/cb-cloud-49/ ├── instruction.md # 问题文本 + 作答约束 ├── task.toml # 任务元数据 + 网络环境配置 ├── environment/ │ └── Dockerfile # 沙箱镜像定义(构建期装 curl/ca-certificates) ├── solution/ │ └── solve.sh # 参考答案写入脚本 └── tests/ └── case.json # 问题 + 标准答案(唯一提交到仓库的按任务文件)

按 contextbench/adapter.py 的_write_task_files逻辑,任务目录由generate_task统一生成:每个任务拥有独立environment/files/(语料副本)、instruction.mdsolution/solve.shtask.tomltests/

instruction.md:问题陈述与作答约束

instruction.md 全文如下:

Who has more credit cards: the person with the most vehicles among residents of the same state as the owner of the pet named 'Austin' (using total bank balance as a tiebreaker), or the person with the most vehicles among residents of the same state as the owner of the pet named 'Caleb' (using the same tiebreaker)?

Use only the files under/app/files. Write your final answer (and nothing else) to/app/answer.txt.

后两行约束由 adapter.py 统一拼写:Agent 只能使用/app/files下的文件,最终答案(且只能写答案本身)写入/app/answer.txt

case.json:问题与标准答案

tests/case.json 是每个任务唯一提交的按任务验证输入:

{"input": "Who has more credit cards: the person with the most vehicles among residents of the same state as the owner of the pet named 'Austin' (using total bank balance as a tiebreaker), or the person with the most vehicles among residents of the same state as the owner of the pet named 'Caleb' (using the same tiebreaker)?", "ground_truth": "Gregory Luna"}

ground_truth的标准答案为Gregory Luna

task.toml:元数据与网络白名单

task.toml 声明:

version = "1.3" [metadata] source = "contextbench" suite = "cloud" difficulty = "hard" source_difficulty = "hard" question_type = "multi_entity_comparison" [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"]

关键字段含义(结合 adapter.py 的生成注释):

  • difficulty是权威难度桶,生成时等于源标签,校准后由stamp_calibrated_tiers覆写;source_difficulty保留原始标签用于溯源;
  • network_mode = "allowlist"白名单而非断网:沙箱内的 langgraph/dcode Agent 必须访问自己的基础设施(包镜像 + 所选模型的 API)才能引导启动并作答;任意网页访问仍被阻止,防止答案查找(LangSmith 通过 egress 代理强制执行);
  • allowed_hosts覆盖评分卡工作流可选的每个模型提供商 API 端点(仅 API 端点,绝不包含答案来源)。

Dockerfile:构建期预装 curl 以保持运行时纯 HTTPS

environment/Dockerfile:

FROM python:3.12-slim # Pre-install curl at build time (the build phase has network) so the # in-sandbox agent's runtime bootstrap skips apt; runtime egress is then # all-HTTPS via the task's network allowlist. RUN apt-get update \ && apt-get install -y --no-install-recommends curl ca-certificates \ && rm -rf /var/lib/apt/lists/* COPY files/ /app/files/

构建期(有网络)安装 curl 与 CA 证书,使运行期 Agent 引导流程跳过 apt,运行期出口流量全部经任务网络白名单走 HTTPS;COPY files/ /app/files/将语料注入沙箱。

solve.sh:参考答案回写

solution/solve.sh:

#!/bin/sh set -eu printf '%s\n' 'Gregory Luna' > /app/answer.txt

它演示了标准答案通道:最终答案仅写入/app/answer.txt,与 instruction.md 的作答约束一致。

单源生成机制:语料与验证器不重复提交

README 明确"Corpus and verifier are single-sourced":两类按任务文件在 30 个任务中逐字节相同,因此被 git-ignore,由生成器恢复,而非逐个提交:

  • 64.7K 行语料:唯一副本在 harbor_adapters/contextbench/vendor/files/,恢复进每个任务的environment/files/
  • 不变量验证器tests/{test.sh,judge.py,rubric.txt}唯一副本在 templates/ 与vendor/rubric.txt
  • 每个任务只提交tests/case.json(问题 + 标准答案)。

本地运行前需执行恢复:

uv run python -m harbor_adapters.contextbench.main --populate datasets/context-retrieval-evals uv run harbor run --path datasets/context-retrieval-evals ...

CI(harbor.yml)在构建任务镜像前自动执行--populate。对应实现为 adapter.py 的populate_corpus,只处理直接子目录中source = "contextbench"的任务,并从单源副本复制语料与验证器不变量。

生成与校准 CLI:从 JSONL 记录到可运行任务

main.py 提供 CLI 驱动,三个互斥模式:

参数作用
--task-ids cb-cloud-49 ...按 id 生成指定任务(配合--output-dir
--limit N--task-ids时生成cb-cloud-0..N-1前 N 个任务
--populate DATASET_DIR恢复各任务的environment/files/与验证器不变量
--stamp-tiers DATASET_DIR --calibration CAL.json用校准 JSON 覆写各任务difficulty

生成路径:record_for_task_id校验 id →parse_task_id解析cb-<suite>-<i>generate_taskfilesystem_cloud.jsonl<i>行读取记录并组装任务目录(adapter.py)。

cb-cloud-49 对应的源记录

cb-cloud-49对应filesystem_cloud.jsonl的第 49 行(0 起始),其agent_args.extra声明了推理所需的最小文件集:

{ "required_files": ["pets.txt", "addresses.txt", "vehicles.txt", "bank_accounts.txt", "credit_cards.txt", "people.txt"], "question_type": "multi_entity_comparison", "difficulty": "hard" }

校准覆写 difficulty

生成时difficulty = source_difficulty(源标签);校准后 stamp_calibrated_tiers 从校准 JSON 读取权威tier覆写difficultysource_difficulty保留溯源。calibration.json(仓库根libs/evals/datasets/context-retrieval-evals/calibration.json)是源运行的可机读记录,包含聚合总数与每个任务的 Terra/Luna 结果。

语料形态:10 个文件的合成数据仓库

语料由 vendor/files/ 下的 10 个纯文本文件构成,总行数 64,657:

文件行数主键/外键
people.txt1,500pers-XXXX
addresses.txt8,136addr-XXXX(owner: pers-XXXX)
vehicles.txt6,748veh-XXXX(owner: pers-XXXX)
bank_accounts.txt14,096acct-XXXX(owner: pers-XXXX, balance)
credit_cards.txt8,869card-XXXX(owner: pers-XXXX)
pets.txt5,742pet-XXXX(owner: pers-XXXX, name)
employments.txt4,176job-XXXX
insurance_policies.txt6,825pol-XXXX
internet_accounts.txt7,035net-XXXX
medical_records.txt1,530med-XXXX

记录格式为### 类型-编号 (owner: pers-XXXX)块 + 键值字段,例如:

### pet-0892 (owner: pers-0472) pet_id: pet-0892 name: Austin species: Rabbit
### card-0001 (owner: pers-0001) card_id: card-0001 provider: Discover

参考答案推理链复现:为什么答案是 Gregory Luna

结合语料可完整复现 cb-cloud-49 的推理链(问题为"多实体比较":比较两条支线中"信用卡数量更多者")。

支线 1:Austin 主人的州(Massachusetts)

  • pets.txt 中name: Austin→ 宠物pet-0892,主人pers-0472(Wesley Silva);
  • addresses.txt 中addr-0961 (owner: pers-0472)state: Massachusetts
  • 该州 21 名居民中,pers-0270(Gregory Luna)与pers-0282(Christopher Beck)车辆最多(各 4 辆);
  • 银行余额决胜:Gregory Luna $189,003.97 vs Christopher Beck $15,864.16;
  • 支线 1 代表:Gregory Luna,信用卡数4

支线 2:Caleb 主人的州(Vermont)

  • name: Caleb→ 宠物pet-0911,主人pers-0478(Kim Hampton);
  • 其州为 Vermont,该州 15 名居民中车辆最多者(各 4 辆)包括 Tiffany Johnson($139,717.48)、Steven Cook($115,794.76)、Kirk Moore($51,335.32)、James Foster($21,900.08);
  • 银行余额决胜后代表为Tiffany Johnson,信用卡数3

结论

4 > 3,故拥有更多信用卡者为 Gregory Luna,与 case.json 的ground_truth一致。该任务被标注为 hard,因为正确作答至少需要 5 个文件交叉引用(pets → addresses → vehicles → bank_accounts → credit_cards → people)且存在多个并列候选,验证了 README 所述"Agent 无法推断哪些文件重要,必须检索、连接并聚合"。

评分机制:LLM Judge 而非字符串比较

测试由 templates/test.sh 调用 templates/judge.py,是 Letta letta-evalsRubricGrader(OpenAI provider)的沙箱内复刻:

  • 判题提示:上游 rubric(vendor/rubric.txt)经string.Formatter().vformat代入{input}/{ground_truth}/{submission},无系统提示、无包裹;
  • 响应格式:Chat Completions +json_schema响应格式{score: float ∈ [0,1], rationale}
  • 温度规则:o1/o3/gpt-5 推理模型在 temperature 1.0 下调用(0.0 会 400),其余模型 0.0;
  • 分数归一score = clamp(float(score), 0.0, 1.0),任何异常记 0.0(与上游一致);
  • 重试:至多 5 次,最终失败记 0.0。

两处与上游有意的差异,均由 deepagents 测试框架而非本文件决定:判题模型取自JUDGE_MODELS(如gpt-5.6-luna)而非上游的gpt-5-mini;提交物为/app/answer.txt(测试框架答案通道)而非 Agent 最后一条助手消息。

评分规则(rubric.txt)要点:

  • 1.0 正确:最终答案与期望匹配。数字格式等价("$145,315.33"="145315.33");数字文字等价("2 dogs"="two dogs");姓名大小写不敏感;轻微措辞差异可接受;单位可隐含(问车辆时可写"4"="4 vehicles");若期望答案为姓名,响应中任意位置出现该姓名即视为正确;
  • 0.5 仅拒绝:Agent 明确拒绝作答且未尝试;
  • 0.0 错误:答案不同、声称找不到但答案存在、部分答案遗漏关键值、给出多个答案但未明确最终答案。

评分聚焦最终答案而非中间推理;过程有错但最终答案正确仍得 1.0;过程正确但最终答案错误得 0.0。

运行任务与查看结果

本地复现该任务的完整流程:

# 1. 恢复被 git-ignore 的语料与验证器(在 libs/evals 下执行) uv run python -m harbor_adapters.contextbench.main --populate datasets/context-retrieval-evals # 2. 运行 Harbor 评测(语法占位,参数按 Harbor CLI 实际提供) uv run harbor run --path libs/evals/datasets/context-retrieval-evals ...

运行后沙箱内 Agent 读取/app/files/(10 个语料文件)并写入/app/answer.txt;验证器将score写入/logs/verifier/reward.txt。注意语料为 64.7K 行、10 文件,Agent 无法预知哪些文件相关,这正是评测的核心挑战。

相关资源

  • 数据集总览与难度表:libs/evals/datasets/context-retrieval-evals/README.md
  • 生成器 CLI:libs/evals/harbor_adapters/contextbench/main.py
  • 任务组装/校准/恢复实现:libs/evals/harbor_adapters/contextbench/adapter.py
  • 判题器实现:libs/evals/harbor_adapters/contextbench/templates/judge.py
  • 评分规则原文:libs/evals/harbor_adapters/contextbench/vendor/rubric.txt
  • 语料(10 文件,64.7K 行):libs/evals/harbor_adapters/contextbench/vendor/files/

【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 20:24:07

Python算法工程化实践:可调试可验证的LeetCode解题模板

简介&#xff1a;本资源是面向Python开发者与算法求职者的LeetCode全题解学习包&#xff0c;覆盖从基础数据结构到动态规划、回溯等高频面试考点&#xff0c;助力系统性刷题、代码复盘与面试备战。压缩包共1160个文件&#xff0c;含580份Markdown题解文档&#xff08;含题目分析…

作者头像 李华
网站建设 2026/9/11 20:23:31

2026年AI领域高含金量证书解析与备考指南

1. 2026年AI领域高含金量证书全景解析在AI技术快速迭代的当下&#xff0c;专业认证已成为从业者能力背书的重要凭证。根据全球头部科技企业招聘偏好、LinkedIn人才数据分析以及权威学术机构调研&#xff0c;2026年最具市场认可度的AI资质认证呈现"32"格局——3个基础…

作者头像 李华
网站建设 2026/9/11 20:21:51

STM32+AD5293数字电位器:从原理到校准应用的完整方案

做产线校准设备这几年&#xff0c;我对"机械电位器"真是又爱又恨。样品阶段用小螺丝刀拧几下&#xff0c;调个电压出来&#xff0c;方便&#xff1b;一到批量阶段就开始出幺蛾子&#xff1a;震动后阻值漂了、温度一变化输出飘了、老化后接触不良了&#xff0c;更别提…

作者头像 李华
网站建设 2026/9/11 20:19:09

网络空间测绘技术在冲突态势分析中的应用与实践

1. 项目概述&#xff1a;网络空间测绘视角下的冲突态势分析2019年4月&#xff0c;当某中东地区关键基础设施遭遇网络攻击导致大面积停电时&#xff0c;全球网络安全专家首次意识到网络空间测绘技术在冲突监测中的独特价值。这个项目正是基于类似场景&#xff0c;通过持续采集和…

作者头像 李华
网站建设 2026/9/11 20:18:58

Anomalib异常检测库实战:算法选型与OpenVINO部署指南

简介&#xff1a;面向图像异常检测算法研究与工程落地的开发者&#xff0c;Anomalib是一套集成最先进算法的开源库&#xff0c;提供从实验管理、超参数优化到边缘推理的完整工具链。该库基于PyTorch Lightning统一实现&#xff0c;内置多种即用型异常检测模型&#xff0c;并支持…

作者头像 李华