Chuyển tới nội dung chính

Xử lý hàng loạt

Xử lý hàng loạt cho phép bạn chạy song song tác nhân Hermes trên hàng trăm hoặc hàng nghìn lời nhắc, tạo ra dữ liệu quỹ đạo có cấu trúc. Điều này chủ yếu được sử dụng để tạo dữ liệu đào tạo — tạo ra các quỹ đạo có định dạng ShareGPT với số liệu thống kê sử dụng công cụ có thể được sử dụng để tinh chỉnh hoặc đánh giá.

Tổng quan

Trình chạy hàng loạt ( batch_runner.py ) xử lý tập dữ liệu JSONL gồm các lời nhắc, chạy từng lời nhắc thông qua một phiên tác nhân đầy đủ với quyền truy cập công cụ. Mỗi lời nhắc có môi trường biệt lập riêng. Đầu ra là dữ liệu quỹ đạo có cấu trúc với đầy đủ lịch sử hội thoại, số liệu thống kê cuộc gọi công cụ và số liệu phạm vi lý luận.

Bắt đầu nhanh

# Basic batch run
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--model=anthropic/claude-sonnet-4.6 \
--num_workers=4

# Resume an interrupted run
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--resume

# List available toolset distributions
python batch_runner.py --list_distributions

Định dạng tập dữ liệu

Tập dữ liệu đầu vào là một tệp JSONL (một đối tượng JSON trên mỗi dòng). Mỗi mục nhập phải có trường prompt:

{"prompt": "Write a Python function that finds the longest palindromic substring"}
{"prompt": "Create a REST API endpoint for user authentication using Flask"}
{"prompt": "Debug this error: TypeError: cannot unpack non-iterable NoneType object"}

Các mục có thể tùy chọn bao gồm:

  • image hoặc docker_image : Hình ảnh vùng chứa để sử dụng cho hộp cát của lời nhắc này (hoạt động với các chương trình phụ trợ Docker, Modal và Singularity)
  • cwd : Ghi đè thư mục làm việc cho phiên cuối của tác vụ

Tùy chọn cấu hình

| Tham số | Mặc định | Mô tả | |----------||----------|-------------| | --dataset_file | (bắt buộc) | Đường dẫn đến tập dữ liệu JSONL | | --batch_size | (bắt buộc) | Lời nhắc mỗi đợt | | --run_name | (bắt buộc) | Tên cho lần chạy này (được sử dụng cho thư mục đầu ra và điểm kiểm tra) | | --distribution | "default" | Phân phối bộ công cụ lấy mẫu từ | | --model | claude-sonnet-4.6 | Mẫu sử dụng | | --base_url | https://openrouter.ai/api/v1 | URL cơ sở API | | --api_key | (env var) | Khóa API cho mô hình | | --max_turns | 10 | Số lần lặp gọi công cụ tối đa trên mỗi lời nhắc | | --num_workers | 4 | Quy trình công nhân song song | | --resume | false | Tiếp tục từ điểm kiểm tra | | --verbose | false | Cho phép ghi nhật ký dài dòng | | --max_samples | tất cả | Chỉ xử lý N mẫu đầu tiên từ tập dữ liệu | | --max_tokens | mô hình mặc định | Mã thông báo tối đa cho mỗi phản hồi mô hình |

Định tuyến nhà cung cấp (OpenRouter)

| Tham số | Mô tả | |----------||-------------| | --providers_allowed | Nhà cung cấp được phân tách bằng dấu phẩy để cho phép (ví dụ: "anthropic,openai" ) | | --providers_ignored | Các nhà cung cấp được phân tách bằng dấu phẩy cần bỏ qua (ví dụ: "together,deepinfra" ) | | --providers_order | Thứ tự nhà cung cấp ưu tiên được phân tách bằng dấu phẩy | | --provider_sort | Sắp xếp theo "price" , "throughput" hoặc "latency" |

Kiểm soát lý trí

| Tham số | Mô tả | |----------||-------------| | --reasoning_effort | Mức độ nỗ lực: xhigh , high , medium , low , minimal , none | | --reasoning_disabled | Vô hiệu hóa hoàn toàn mã thông báo lý luận/suy nghĩ |

Tùy chọn nâng cao

| Tham số | Mô tả | |----------||-------------| | --ephemeral_system_prompt | Lời nhắc hệ thống được sử dụng trong quá trình thực hiện nhưng KHÔNG được lưu vào quỹ đạo | | --log_prefix_chars | Các ký tự hiển thị trong bản xem trước nhật ký (mặc định: 100) | | --prefill_messages_file | Đường dẫn đến tệp JSON có thông báo điền trước để mồi vài lần bắn |

Phân phối bộ công cụMỗi lời nhắc sẽ nhận được một bộ công cụ được lấy mẫu ngẫu nhiên từ bản phân phối. Điều này đảm bảo dữ liệu đào tạo bao gồm các kết hợp công cụ đa dạng. Sử dụng --list_distributions để xem tất cả các bản phân phối có sẵn.

Trong quá trình triển khai hiện tại, các bản phân phối chỉ định xác suất cho từng bộ công cụ riêng lẻ. Bộ lấy mẫu lật từng bộ công cụ một cách độc lập, sau đó đảm bảo rằng ít nhất một bộ công cụ được bật. Điều này khác với bảng được soạn thảo bằng tay gồm các kết hợp dựng sẵn.

Định dạng đầu ra

Tất cả đầu ra đều chuyển đến data/<run_name>/ :

data/my_run/
├── trajectories.jsonl

# Combined final output (all batches merged)
├── batch_0.jsonl

# Individual batch results
├── batch_1.jsonl
├── ...
├── checkpoint.json

# Resume checkpoint
└── statistics.json

# Aggregate tool usage stats

Định dạng quỹ đạo

Mỗi dòng trong trajectories.jsonl là một đối tượng JSON:

{
"prompt_index": 42,
"conversations": [
{"from": "human", "value": "Write a function..."},
{"from": "gpt", "value": "I'll create that function...",
"tool_calls": [...]},
{"from": "tool", "value": "..."},
{"from": "gpt", "value": "Here's the completed function..."}
],
"metadata": {
"batch_num": 2,
"timestamp": "2026-01-15T10:30:00",
"model": "anthropic/claude-sonnet-4.6"
},
"completed": true,
"partial": false,
"api_calls": 3,
"toolsets_used": ["terminal", "file"],
"tool_stats": {
"terminal": {"count": 2, "success": 2, "failure": 0},
"read_file": {"count": 1, "success": 1, "failure": 0}
},
"tool_error_counts": {
"terminal": 0,
"read_file": 0
}
}

Trường conversations sử dụng định dạng giống ShareGPT với các trường fromvalue. Số liệu thống kê về công cụ được chuẩn hóa để bao gồm tất cả các công cụ có thể có với giá trị mặc định bằng 0, đảm bảo lược đồ nhất quán giữa các mục để tương thích với tập dữ liệu HuggingFace.

Kiểm tra điểm

Trình chạy hàng loạt có điểm kiểm tra mạnh mẽ về khả năng chịu lỗi:

  • Tệp điểm kiểm tra: Được lưu sau khi hoàn thành mỗi đợt, theo dõi các chỉ mục nhắc nhở được thực hiện
  • Sơ yếu lý lịch dựa trên nội dung: Trên --resume , người chạy quét các tệp bó hiện có và khớp các lời nhắc đã hoàn thành theo nội dung văn bản thực tế của chúng (không chỉ các chỉ mục), cho phép khôi phục ngay cả khi thứ tự tập dữ liệu thay đổi
  • Lời nhắc không thành công: Chỉ những lời nhắc hoàn thành thành công mới được đánh dấu là hoàn tất — những lời nhắc không thành công sẽ được thử lại trong sơ yếu lý lịch
  • Hợp nhất hàng loạt: Khi hoàn thành, tất cả các tệp hàng loạt (bao gồm cả từ các lần chạy trước) sẽ được hợp nhất thành một trajectories.jsonl duy nhất

Cách hoạt động của Sơ yếu lý lịch

  1. Quét tất cả các tệp batch_*.jsonl để tìm lời nhắc đã hoàn thành (bằng cách khớp nội dung)
  2. Lọc tập dữ liệu để loại trừ các lời nhắc đã hoàn thành
  3. Sắp xếp lại các lời nhắc còn lại
  4. Chỉ xử lý các lời nhắc còn lại
  5. Hợp nhất tất cả các tệp bó (cũ + mới) vào đầu ra cuối cùng

Lọc chất lượng

Trình chạy hàng loạt áp dụng tính năng lọc chất lượng tự động:

  • Bộ lọc không có lý do: Các mẫu trong đó không có lượt trợ lý nào chứa lý do (không có <REASONING_SCRATCHPAD> hoặc mã thông báo suy nghĩ tự nhiên) sẽ bị loại bỏ
  • Bộ lọc mục nhập bị hỏng: Các mục nhập có tên công cụ ảo giác (không có trong danh sách công cụ hợp lệ) sẽ bị lọc ra trong quá trình hợp nhất cuối cùng
  • Thống kê lý luận: Theo dõi phần trăm lượt có/không có lý luận trong toàn bộ lượt chạy

Thống kê

Sau khi hoàn thành, người chạy in số liệu thống kê toàn diện:

  • Cách sử dụng công cụ: Số cuộc gọi, tỷ lệ thành công/thất bại trên mỗi công cụ
  • Phạm vi lý luận: Tỷ lệ phần trăm trợ lý quay lại với lý luận
  • Mẫu bị loại bỏ: Số mẫu được lọc vì thiếu lý do
  • Thời lượng: Tổng thời gian xử lý

Thống kê cũng được lưu vào statistics.json để phân tích theo chương trình.

Trường hợp sử dụng

Tạo dữ liệu đào tạo

Tạo quỹ đạo sử dụng công cụ đa dạng để tinh chỉnh:

python batch_runner.py \
--dataset_file=data/coding_prompts.jsonl \
--batch_size=20 \
--run_name=coding_v1 \
--model=anthropic/claude-sonnet-4.6 \
--num_workers=8 \
--distribution=default \
--max_turns=15

Đánh giá mô hình

Đánh giá mức độ hiệu quả của một mô hình sử dụng các công cụ qua các lời nhắc được tiêu chuẩn hóa:

python batch_runner.py \
--dataset_file=data/eval_suite.jsonl \
--batch_size=10 \
--run_name=eval_gpt4 \
--model=openai/gpt-4o \
--num_workers=4 \
--max_turns=10

Hình ảnh vùng chứa theo lời nhắc

Đối với các điểm chuẩn yêu cầu môi trường cụ thể, mỗi lời nhắc có thể chỉ định hình ảnh vùng chứa của riêng nó:

{"prompt": "Install numpy and compute eigenvalues of a 3x3 matrix", "image": "python:3.11-slim"}
{"prompt": "Compile this Rust program and run it", "image": "rust:1.75"}
{"prompt": "Set up a Node.js Express server", "image": "node:20-alpine", "cwd": "/app"}

Trình chạy hàng loạt xác minh hình ảnh Docker có thể truy cập được trước khi chạy từng lời nhắc.