Datasets documentation
에이전트 평가 작업 로드
에이전트 평가 작업 로드
Harbor 데이터셋은 AI 에이전트를 평가하는 데 사용되는 tasks의 모음입니다. 각 task는 에이전트에게 지시사항, 작업에 사용할 샌드박스 환경, 그리고 그 작업을 점수화하는 검증기를 제공합니다.
테이블 형식 데이터셋과 달리, Harbor 데이터셋은 예시 하나당 한 행을 가진 파일이 아닙니다. 각 태스크는 디렉터리입니다.
harbor 빌더는 이러한 저장소를 읽고 태스크 하나당 한 행을 생성하므로, 벤치마크를 다른 데이터셋처럼 탐색, 필터링 및 공유할 수 있습니다:
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> dataset
DatasetDict({
test: Dataset({
features: ['name', 'instruction', 'description', 'keywords', 'schema_version', 'config', 'metadata', 'files', 'location'],
num_rows: 66
})
})Harbor 데이터셋을 로드하는 것은 읽기만 수행합니다. 에이전트를 실행하거나 이미지를 빌드하거나 검증기를 실행하지 않으며, Harbor가 설치되어 있을 필요도 없습니다. 작업을 실제로 실행하려면 Harbor 라이브러리를 사용하세요.
Harbor 작업 구성은 TOML 파일입니다. Python 3.11 이상에서는 표준 라이브러리(
tomllib)로 이를 읽을 수 있으며, Python 3.10에서는 추가 의존성으로 TOML 파서를 설치해야 합니다. 설치 방법은 설치 가이드를 참고하세요.
리포지토리 구조
작업 디렉터리는 task.toml와 instruction.md 두 파일로 식별되며, 일반적으로 환경 정의, 검증기(verifier), 오라클 솔루션도 포함합니다:
my-harbor-dataset/
├── README.md
└── tasks/
├── task-a/
│ ├── task.toml # configuration: metadata, resources, timeouts...
│ ├── instruction.md # what the agent is asked to do
│ ├── README.md # optional human-readable description
│ ├── environment/ # Dockerfile / docker-compose.yaml + files of the sandbox
│ ├── tests/ # verifier
│ └── solution/ # oracle solution
└── task-b/
└── ...하위 디렉터리 중 하나(깊이에 관계없이)가 태스크 디렉터리(task.toml 파일과 instruction.md 파일이 나란히 있는 곳)인 경우, 해당 디렉터리는 Harbor 데이터셋으로 인식됩니다. 파일 목록을 명시할 필요 없이 태스크가 자동으로 검색됩니다.
작업 로드
Harbor 데이터셋은 데이터 파일이 아닌 디렉터리로 구성되어 있으므로 data_files 인자 없이 path로 로드됩니다:
>>> from datasets import load_dataset
>>> # a dataset repository on the Hub
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> # a local directory of tasks
>>> dataset = load_dataset("/path/to/my-harbor-dataset")
>>> # the tasks of a repository that are in a sub-directory
>>> dataset = load_dataset("harborframework/terminal-bench", data_dir="tasks")data_files를 명시적으로 전달하는 것도 지원되며, 패턴에 task.toml 및 instruction.md 파일이 포함되어 있으면 됩니다. 매칭된 파일 쌍 하나당 행 하나가 생성됩니다:
>>> dataset = load_dataset(
... "/path/to/my-harbor-dataset",
... data_files={"test": ["my-tasks-dir/*/task.toml", "my-tasks-dir/*/instruction.md"]},
... )열
각 행은 하나의 작업을 설명합니다:
| 열 | 유형 | 설명 |
|---|---|---|
name | string | task.toml의 [task].name(보통 org/name 형식) 또는 작업 디렉터리 이름. |
description | string | task.toml의 [task].description. |
instruction | string | instruction.md의 내용: 에이전트가 수행해야 할 작업 |
keywords | string의 list | task.toml의 [task].keywords. |
schema_version | string | task.toml에서 선언된 schema_version. |
config | dict | JSON 객체로 표현된 전체 task.toml: [task], [metadata], [verifier], [agent], [environment], [steps]… |
metadata | dict | task.toml의 자유 형식 [metadata] 섹션입니다. |
files | string의 list | 작업 디렉토리를 기준으로 한 상대 경로로 표시된 작업의 모든 파일입니다. |
location | string | 데이터셋에서 작업 디렉터리의 위치. |
>>> dataset = load_dataset("harborframework/terminal-bench", split="test")
>>> dataset[0]["name"]
'terminal-bench/atrx-vep-crispr'
>>> dataset[0]["instruction"][:90]
'You are provided with a region of genomic DNA representing the human ATRX locus plus sequence'
>>> dataset[0]["config"]["task"]["authors"]
[{'name': 'ScaleAI', 'email': 'tbench@scale.com'}]
>>> dataset[0]["metadata"]["category"]
'Science'
>>> dataset[0]["config"]["environment"]
{'build_timeout_sec': 1800.0, 'cpus': 2, 'memory_mb': 4096, 'storage_mb': 10240, 'gpus': 0}
>>> dataset[0]["files"][:4]
['LICENSE.md', 'README.md', 'environment/Dockerfile', 'environment/data/CDS-information.txt']
>>> dataset[0]["location"]
'tasks/atrx-vep-crispr'task.toml 전체가 config에 포함되어 있으므로, 특정 필드가 자체 컬럼으로 승격되지 않은 경우에도 정보가 손실되지 않습니다:
>>> dataset = dataset.map(lambda task: {"timeout_min": task["config"]["verifier"]["timeout_sec"] / 60})
>>> sorted(set(dataset["timeout_min"]))[:6]
[1.0, 2.0, 3.0, 4.0, 5.0, 7.0]벤치마크 필터링
태스크 메타데이터가 사전으로 로드되므로, 벤치마크를 일반적인 filter() 및 map() 메서드로 탐색할 수 있습니다:
>>> security_tasks = dataset.filter(lambda task: task["metadata"].get("category") == "Security")
>>> [task["name"] for task in security_tasks]
['terminal-bench/formal-crypto', 'terminal-bench/html-js-filter', 'terminal-bench/interleaved-vigenere', 'terminal-bench/shadow-relay', 'terminal-bench/uefi-bootkit']files 열에는 해당 태스크에 포함된 모든 항목이 나열되어 있어, 태스크가 어떻게 검증되는지 확인하는 데 유용합니다:
>>> pytest_verifiers = dataset.filter(lambda task: any(f.startswith("tests/") and f.endswith(".py") for f in task["files"]))
>>> pytest_verifiers.num_rows
63작업의 다른 파일 읽기
명령어와 작업 구성만 열로 로드됩니다. 해당 작업의 환경, 검증기 및 솔루션 파일은 작업 디렉터리 기준 상대 경로로 files 열에 나열됩니다. task_id와 files를 조합하여 fsspec로 이 중 하나를 열 수 있습니다:
>>> from huggingface_hub import hffs
>>> dataset_path = "hf://datasets/harborframework/terminal-bench"
>>> with hffs.open(f"{dataset_path}/tasks/cumulative-layout-shift/environment/Dockerfile", "r") as f:
... print(f.read()[:20])
'# harbor-canary GUID구성
HarborConfig은 일반적인 load_dataset 인자 외에 몇 가지 인자를 추가로 받습니다:
strip_canary(기본값True): Harbor가 에이전트에 지시사항을 전송할 때와 동일한 방식으로, 지시사항에서 앞부분의 “benchmark data canary” 주석 줄을 제거합니다. 원본 파일 내용을 유지하려면False로 설정하세요.include_files(기본값True):files열에 모든 작업의 파일을 나열합니다. 원격 파일 시스템에 있는 데이터셋이거나 작업당 수천 개의 파일이 있는 경우, 작업 디렉터리를 나열하는 것을 건너뛰기 위해False로 설정하면 더 빠릅니다.
Tasks는 스트리밍으로도 처리할 수 있으며, 이를 통해 벤치마크 전체를 미리 다운로드할 필요가 없습니다:
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench", streaming=True)
>>> for task in dataset["test"]:
... print(task["name"])참고
- Harbor와 HarborConfig의 참조 문서입니다.
- 에이전트와 검증기를 사용하여 벤치마크의 작업을 실행하는 Harbor 문서