Package 布局
Dataset 根与 task 成员目录、根 yaml 与成员 yaml 怎么分工。
让 agent 代写
npx skills add ZJU-REAL/ageval --skill ageval-config-package装好后把需求说给本机 coding agent,让它写出 dataset 根和 tasks/<id>/;照下面的约定手写也一样。
两层
| 层 | 文件 | 职责 |
|---|---|---|
| Dataset | 根 ageval.yaml | dataset 身份、版本、成员在哪 |
| Task | tasks/<id>/task.yaml | 这一题怎么跑、怎么评 |
CLI 路径永远是 Dataset 根;--task 选成员。
my-dataset/
├── ageval.yaml
├── profiles.yaml # 可选:job binding 默认
├── shared/ # 可选:跨 task 共享(进 packageDigest)
│ ├── lib/ # 以 shared.lib.* 导入
│ ├── assets/ # 只读领域数据(代码路径读取)
│ └── README.md
└── tasks/
└── hello/ # 目录名 == task_id
├── task.yaml
├── run.py
├── evaluator.py
├── prompts/
├── environment/ # Agent Dockerfile;打分配方在 evaluate.Dockerfile 或 evaluate/<name>/
├── evaluation/ # 参考答案等,默认不给 agent;禁止放打分 Dockerfile
├── data/
└── lib/ # 仅本 task;以 lib.* 导入成员一级目录只认:prompts · schemas · environment · evaluation · data · lib · upstream · solution。别的名字可能 lock 失败。
Dataset 级 shared/(可选)
同构多 task 包可把公共 bridge / 领域资产放在根 shared/,不要复制进每个 tasks/*/lib/。
| 路径 | 用途 | 导入 |
|---|---|---|
shared/lib/ | 跨 task Python 模块 | from shared.lib… |
shared/assets/ | 只读 fixture / policy / db | 代码路径 |
tasks/*/lib/ | 仅本 task 扩展 | from lib… |
Core 注入的 path 前缀是 [task_dir, dataset_root],不会再把 shared/lib 叶子目录塞进 path。
硬规则(摘要):
- 有
shared/则 必须 进入packageDigest/ publish blob;改它会改整份 dataset 的 digest - 默认 不 挂到 Agent workspace;参考答案 只 放
tasks/*/evaluation/ - 成员 task 禁止 占用顶层名
shared(shared/目录或shared.py)— lock 失败 shared/lib与tasks/*/lib允许 同名 stem(命名空间已区分)- docker 镜像 不会 由 Core 隐式 COPY
shared/;容器内要用时在 Dockerfile 里显式COPY,并把 dataset 根 放进PYTHONPATH - 本地自检:
uv run python scripts/check_shared_lib_collisions.py <dataset-root>
有 shared/、改 import 契约或在 Hub 上共享浏览,都不会让评测结果更可信。
根 ageval.yaml
format: ageval.dataset/1
dataset_id: org/my-suite # 推荐 org/name;有字符集限制
version: "0.1.0"
tasks:
root: tasks
# 可选的数据集级准备(在打开任何 Attempt 之前执行):
# assets:
# - path: tasks/clip-01/data/clip.mp4
# url: https://cdn.example.com/clip-01.mp4
# sha256: <64 位十六进制>
# prepare: ./prepare.sh # 受门控:需 --allow-prepare 或受信任的 dataset
# defaults:
# max_concurrent_tasks: 2 # 仅整份 dataset 调度;不要写 harness/limitsdataset_id:1–128 字符,小写字母数字开头结尾,中间可有 . _ / -,禁止 .. 与 //。不参与打分。
能用脚本拉取的大文件应写进 assets,不要提交进 git。ageval prepare(run / lock 也会自动执行)会下载缺失的 asset、校验 sha256 并放到 path;摘要不一致会在打开任何 Attempt 前停下。prepare 脚本默认禁用,只有 --allow-prepare 或受信任的 dataset 才会运行;运行后仍会重新校验声明的 assets。
根上不能写 harness / provider / agent_profiles / evaluation。
成员里 parameters vs 其它
parameters:给run.py(ctx.params)limits/evaluation/environment/:给 Core- 环境与 ACP entry:根上
profiles.yaml
run.py 不要再读第二份「真配置」。运行时改允许的项用 --set。