Datasets documentation
Tải các tác vụ đánh giá agent
Tải các tác vụ đánh giá agent
Bộ dữ liệu Harbor là một tập hợp các task được sử dụng để đánh giá các AI agent: mỗi task cung cấp cho agent một hướng dẫn, một môi trường sandbox để làm việc và một verifier để chấm điểm công việc của nó.
Khác với các bộ dữ liệu dạng bảng, một bộ dữ liệu Harbor không phải là tệp có một dòng cho mỗi ví dụ: mỗi tác vụ là một thư mục.
Trình xây dựng harbor đọc một kho lưu trữ như vậy và tạo ra một dòng cho mỗi tác vụ, nhờ đó một bộ chuẩn (benchmark) có thể được khám phá,
lọc và chia sẻ giống như bất kỳ bộ dữ liệu nào khác:
>>> 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
})
})Việc tải một tập dữ liệu Harbor chỉ đọc các tác vụ: nó không bao giờ chạy một agent, xây dựng một image hay thực thi một verifier, và không yêu cầu phải cài đặt Harbor. Hãy sử dụng thư viện Harbor để thực sự chạy các tác vụ.
Cấu hình tác vụ Harbor là các tệp TOML. Python 3.11 trở lên đọc chúng bằng thư viện chuẩn (
tomllib); trên Python 3.10, bạn cần cài đặt trình phân tích TOML như một phụ thuộc bổ sung. Xem hướng dẫn cài đặt để biết cách cài đặt.
Cấu trúc kho
Một thư mục tác vụ được xác định bởi hai tệp task.toml và instruction.md, và thường cũng chứa định nghĩa môi trường, bộ xác minh và một giải pháp 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/
└── ...Một thư mục được nhận dạng là một tập dữ liệu Harbor ngay khi một trong các thư mục con của nó, dù ở độ sâu nào, là một thư mục tác vụ (một tệp task.toml và một tệp instruction.md nằm cạnh nhau): các tác vụ được tìm thấy tự động, mà không cần phải liệt kê bất kỳ tệp nào.
Tải các tác vụ
Vì bộ dữ liệu Harbor được tạo thành từ các thư mục thay vì các tệp dữ liệu, chúng được nạp theo đường dẫn — không có đối số 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")Việc truyền data_files một cách tường minh cũng được hỗ trợ, miễn là mẫu bao gồm các tệp task.toml và instruction.md — một cặp tệp khớp sẽ tạo ra một hàng:
>>> dataset = load_dataset(
... "/path/to/my-harbor-dataset",
... data_files={"test": ["my-tasks-dir/*/task.toml", "my-tasks-dir/*/instruction.md"]},
... )Các cột
Mỗi hàng mô tả một tác vụ:
| Cột | Loại | Mô tả |
|---|---|---|
name | string | [task].name của task.toml (thường là org/name), hoặc tên thư mục tác vụ. |
description | string | [task].description của task.toml. |
instruction | string | Nội dung của instruction.md: những gì tác nhân phải thực hiện. |
keywords | list của string | [task].keywords của task.toml. |
schema_version | string | schema_version được khai báo trong task.toml. |
config | dict | Toàn bộ task.toml, dưới dạng một đối tượng JSON: [task], [metadata], [verifier], [agent], [environment], [steps]… |
metadata | dict | Phần [metadata] tự do của task.toml. |
files | list của string | Tất cả các tệp của tác vụ, với đường dẫn tương đối so với thư mục tác vụ. |
location | string | Vị trí của thư mục tác vụ trong bộ dữ liệu. |
>>> 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'Toàn bộ task.toml có sẵn trong config, vì vậy không có gì bị mất khi một tác vụ sử dụng các trường không được đưa lên thành cột riêng:
>>> 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]Lọc một benchmark
Vì metadata của tác vụ được nạp dưới dạng từ điển, một benchmark có thể được khám phá bằng các phương thức filter() và map() thông thường:
>>> 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']Cột files liệt kê mọi thứ mà tác vụ cung cấp, rất hữu ích để xem cách một tác vụ được xác minh:
>>> pytest_verifiers = dataset.filter(lambda task: any(f.startswith("tests/") and f.endswith(".py") for f in task["files"]))
>>> pytest_verifiers.num_rows
63Đọc các tệp khác của một tác vụ
Chỉ phần hướng dẫn và cấu hình của một tác vụ được nạp dưới dạng các cột: các tệp môi trường, bộ xác minh và giải pháp của nó được liệt kê trong cột files, dưới dạng đường dẫn tương đối so với thư mục tác vụ. Kết hợp task_id và files để mở bất kỳ tệp nào bằng 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 GUIDCấu hình
HarborConfig nhận một vài đối số ngoài các đối số thông thường của load_dataset:
strip_canary(mặc địnhTrue): xóa các dòng chú thích “benchmark data canary” ở đầu các hướng dẫn, theo cách Harbor thực hiện khi gửi chúng đến một agent. Đặt thànhFalseđể giữ nguyên nội dung tệp gốc.include_files(mặc địnhTrue): liệt kê tất cả các tệp của mọi tác vụ trong cộtfiles. Đặt thànhFalseđể bỏ qua việc liệt kê các thư mục tác vụ, giúp nhanh hơn khi bộ dữ liệu nằm trên hệ thống tệp từ xa hoặc có hàng nghìn tệp cho mỗi tác vụ.
Các tác vụ cũng có thể được phát trực tiếp, giúp tránh việc tải toàn bộ bộ chuẩn trước:
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench", streaming=True)
>>> for task in dataset["test"]:
... print(task["name"])Xem thêm
- Tài liệu tham khảo của Harbor và HarborConfig.
- Tài liệu Harbor để chạy các tác vụ của một benchmark bằng các agent và verifier.