Datasets documentation
Muat tugas evaluasi agen
Muat tugas evaluasi agen
Dataset Harbor adalah kumpulan tasks yang digunakan untuk mengevaluasi agen AI: setiap task memberikan agen sebuah instruksi, lingkungan sandboxed untuk bekerja, dan verifier yang menilai kinerjanya.
Berbeda dengan dataset tabular, dataset Harbor bukanlah file dengan satu baris per contoh: setiap tugas adalah sebuah direktori.
Builder harbor membaca repositori semacam itu dan menghasilkan satu baris per tugas, sehingga sebuah benchmark dapat dijelajahi,
difilter, dan dibagikan seperti dataset lainnya:
>>> 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
})
})Memuat dataset Harbor hanya membaca tugas: tidak pernah menjalankan agen, membangun image, atau mengeksekusi verifier, dan tidak memerlukan Harbor untuk diinstal. Gunakan pustaka Harbor untuk benar-benar menjalankan tugas.
Konfigurasi tugas Harbor adalah file TOML. Python 3.11 dan versi lebih baru membacanya dengan pustaka standar (
tomllib); pada Python 3.10, Anda perlu menginstal parser TOML sebagai dependensi tambahan. Lihat panduan instalasi untuk mempelajari cara menginstalnya.
Struktur repositori
Direktori tugas diidentifikasi oleh dua file, task.toml dan instruction.md, dan biasanya juga berisi definisi lingkungan, verifier, dan solusi oracle:
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/
βββ ...Sebuah direktori dikenali sebagai dataset Harbor begitu salah satu sub-direktornya, se dalam apa pun, merupakan direktori tugas (sebuah file task.toml dan file instruction.md berdampingan): tugas-tugas ditemukan secara otomatis, tanpa perlu mencantumkan file apa pun.
Muat tugas
Karena dataset Harbor terdiri dari direktori, bukan file data, dataset dimuat berdasarkan path β tanpa argumen data_files:
>>> 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")Menyampaikan data_files secara eksplisit juga didukung, selama pola mencakup file task.toml dan instruction.md β satu pasangan file yang cocok menghasilkan satu baris:
>>> dataset = load_dataset(
... "/path/to/my-harbor-dataset",
... data_files={"test": ["my-tasks-dir/*/task.toml", "my-tasks-dir/*/instruction.md"]},
... )Kolom
Setiap baris menggambarkan satu tugas:
| Kolom | Tipe | Deskripsi |
|---|---|---|
name | string | [task].name dari task.toml (biasanya org/name), atau nama direktori tugas. |
description | string | [task].description dari task.toml. |
instruction | string | Isi dari instruction.md: apa yang harus dilakukan oleh agen. |
keywords | list dari string | [task].keywords dari task.toml. |
schema_version | string | schema_version yang dideklarasikan oleh task.toml. |
config | dict | Seluruh task.toml, sebagai objek JSON: [task], [metadata], [verifier], [agent], [environment], [steps]β¦ |
metadata | dict | Bagian [metadata] bebas format dari task.toml. |
files | list dari string | Semua file tugas, dengan path relatif terhadap direktori tugas. |
location | string | Lokasi direktori tugas dalam dataset. |
>>> 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'Seluruh task.toml tersedia di config, sehingga tidak ada yang hilang ketika sebuah tugas menggunakan field yang tidak dipromosikan ke kolomnya sendiri:
>>> 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 sebuah benchmark
Karena metadata tugas dimuat sebagai kamus, sebuah benchmark dapat dijelajahi dengan metode filter() dan map() yang biasa:
>>> 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']Kolom files mencantumkan semua yang disertakan oleh tugas, yang berguna untuk melihat bagaimana sebuah tugas diverifikasi:
>>> pytest_verifiers = dataset.filter(lambda task: any(f.startswith("tests/") and f.endswith(".py") for f in task["files"]))
>>> pytest_verifiers.num_rows
63Baca file-file lain dari tugas
Hanya instruksi dan konfigurasi tugas yang dimuat sebagai kolom: file lingkungan, verifier, dan solusinya tercantum dalam kolom files, sebagai path relatif terhadap direktori tugas. Gabungkan task_id dan files untuk membuka salah satunya dengan 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 GUIDKonfigurasi
HarborConfig menerima beberapa argumen di samping argumen load_dataset yang biasa:
strip_canary(defaultTrue): hapus baris komentar βbenchmark data canaryβ di awal instruksi, dengan cara yang sama seperti yang dilakukan Harbor saat mengirimkannya ke agen. Atur menjadiFalseuntuk mempertahankan isi file asli.include_files(defaultTrue): daftar semua file dari setiap tugas di kolomfiles. Atur menjadiFalseuntuk melewati daftar direktori tugas, yang lebih cepat ketika dataset berada pada sistem file jarak jauh atau memiliki ribuan file per tugas.
Tugas juga dapat di-streaming, yang menghindari pengunduhan seluruh benchmark di awal:
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench", streaming=True)
>>> for task in dataset["test"]:
... print(task["name"])Lihat juga
- Dokumentasi referensi untuk Harbor dan HarborConfig.
- Dokumentasi Harbor untuk menjalankan tugas-tugas benchmark dengan agen dan verifier.