Datasets documentation
تحميل مهام تقييم الوكيل
تحميل مهام تقييم الوكيل
مجموعة بيانات Harbor هي مجموعة من المهام تُستخدم لتقييم وكلاء الذكاء الاصطناعي: حيث تمنح كل مهمة الوكيل تعليمات، وبيئة معزولة للعمل فيها، ومُتحققًا يُقيّم عمله.
على عكس مجموعات البيانات الجدولية، لا يتكوّن مجموعة بيانات 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، وغالبًا ما يحتوي أيضًا على تعريف البيئة، والمُتحقِّق، وحلّ مرجعي:
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/
└── ...يُعرَّف المجلد كمجموعة بيانات Harbor بمجرد أن يكون أحد مجلداته الفرعية، مهما كان عمقه، مجلد مهمة (ملف task.toml وملف instruction.md جنبًا إلى جنب): حيث يتم العثور على المهام تلقائيًا، دون الحاجة إلى سرد أي ملف.
تحميل المهام
بما أن مجموعات بيانات Harbor تتكون من مجلدات بدلاً من ملفات البيانات، يتم تحميلها عبر المسار — دون استخدام معامل 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 — كل زوج من الملفات المطابقة يعطي صفًا واحدًا:
>>> dataset = load_dataset(
... "/path/to/my-harbor-dataset",
... data_files={"test": ["my-tasks-dir/*/task.toml", "my-tasks-dir/*/instruction.md"]},
... )الأعمدة
تصف كل صف مهمة واحدة:
| عمود | النوع | الوصف |
|---|---|---|
name | string | [task].name الخاص بـ task.toml (عادةً org/name)، أو اسم مجلد المهمة. |
description | string | [task].description في task.toml. |
instruction | string | محتويات instruction.md: ما يجب على الوكيل القيام به. |
keywords | list من string | [task].keywords في task.toml. |
schema_version | string | schema_version المُعلَن في task.toml. |
config | dict | ملف task.toml بالكامل، ككائن JSON: [task]، [metadata]، [verifier]، [agent]، [environment]، [steps]… |
metadata | dict | القسم الحر [metadata] في task.toml. |
files | list من string | جميع ملفات المهمة، مع مسارات نسبية بالنسبة إلى مجلد المهمة. |
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): إزالة أسطر التعليقات الافتتاحية “canary” لبيانات الاختبار من التعليمات، بنفس الطريقة التي يتبعها Harbor عند إرسالها إلى الوكيل. اضبطه علىFalseللاحتفاظ بمحتوى الملف الأصلي.include_files(الافتراضيTrue): قائمة بجميع ملفات كل مهمة في عمودfiles. اضبطه على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 لـ تشغيل مهام معيار الأداء باستخدام الوكلاء والمُتحقِّقين.