Datasets documentation
エージェント評価タスクを読み込む
エージェント評価タスクを読み込む
Harborデータセットは、AIエージェントを評価するために使用されるタスクのコレクションです。各タスクでは、エージェントに指示、作業を行うサンドボックス環境、およびその成果を採点する検証ツールが提供されます。
表形式のデータセットとは異なり、Harborデータセットは1行が1つのサンプルに対応するファイルではなく、各タスクがディレクトリとして構成されています。
harborビルダーはこのようなリポジトリを読み取り、タスクごとに1行ずつ生成します。これにより、ベンチマークは他のデータセットと同様に探索、フィルタリング、共有を行うことができます。
>>> 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 データセットを読み込むと、タスクは読み取りのみが行われます。エージェントの実行、イメージのビルド、verifier の実行は行われず、Harbor のインストールも不要です。タスクを実際に実行するには、Harbor ライブラリを使用してください。
Harborのタスク設定はTOMLファイルです。Python 3.11以降では標準ライブラリ(
tomllib)で読み込むことができますが、Python 3.10ではTOMLパーサーを追加の依存関係としてインストールする必要があります。インストール方法については、インストールガイドを参照してください。
リポジトリの構造
タスクディレクトリは、task.tomlとinstruction.mdという2つのファイルで識別され、通常は環境定義、検証器、オラクルソリューションも含まれます:
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 のデータセットはデータファイルではなくディレクトリで構成されているため、path によって読み込まれます。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")data_files を明示的に渡すこともサポートされています。ただし、パターンに task.toml と instruction.md のファイルが含まれている必要があります。1つのマッチしたファイルペアが1行を生成します:
>>> dataset = load_dataset(
... "/path/to/my-harbor-dataset",
... data_files={"test": ["my-tasks-dir/*/task.toml", "my-tasks-dir/*/instruction.md"]},
... )カラム
各行は1つのタスクを説明しています:
| カラム | 型 | 説明 |
|---|---|---|
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カラムに、すべてのタスクのファイルをすべてリストします。リモートファイルシステム上にデータセットがある場合、または1つのタスクごとに数千のファイルがある場合は、タスクディレクトリのリスト表示をスキップするためにFalseに設定すると高速になります。
タスクはストリーミングすることもでき、これによりベンチマーク全体を事前にダウンロードする必要がなくなります:
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench", streaming=True)
>>> for task in dataset["test"]:
... print(task["name"])関連項目
- HarborとHarborConfigの参照ドキュメントです。
- エージェントと検証ツールを使用してベンチマークのタスクを実行するためのHarborのドキュメント。