일괄 처리
일괄 처리는 수백 또는 수천 개의 프롬프트를 통해 헤르메스 에이전트를 실행할 수 있습니다. 이것은 주로 ** training data generation**에 사용됩니다. ShareGPT-format trajectories를 제작하여 정밀한 튜닝 또는 평가에 사용할 수 있습니다.
설명
일괄 런너 (batch_runner.py)는 도구 액세스와 전체 에이전트 세션을 통해 실행되는 프롬프트의 JSONL 데이터 세트를 처리합니다. 각 프롬프트는 자체 격리 된 환경을 가져옵니다. 출력은 전체 대화 기록, 도구 통화 통계 및 소싱 적용 메트릭을 가진 구조화 된 trajectory 데이터입니다.
빠른 시작
# 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
Dataset 체재
입력된 데이터셋은 JSONL 파일(라인당 하나의 JSON 객체)입니다. 각 항목은 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"}
Entries는 선택적으로 포함합니다:
image또는docker_image: 이 프롬프트의 샌드박스( Docker, Modal, Singularity backends)를 사용하는 컨테이너 이미지cwd: 작업의 터미널 세션에 대한 작업 디렉토리 재정의
구성 옵션
| 제품 설명 | 기본 정보 | 설명 |
|---|---|---|
--dataset_file | (필수) | JSONL dataset에 경로 |
--batch_size | (필수) | 배치 당 Prompts |
--run_name | (필수) | 이 실행의 이름 (출력 dir 및 checkpointing에 사용) |
--distribution | "default" | Toolset 배포에서 샘플 |
--model | claude-sonnet-4.6 | 모델 사용 |
--base_url | https://openrouter.ai/api/v1 | API 기본 URL |
--api_key | (주)엔브 | 모델을 위한 API 열쇠 |
--max_turns | 10 | 초록 당 최대 공구 호출 iterations |
--num_workers | 4 | 병렬 작업자 공정 |
--resume | false | 체크포인트에서 이력서 |
--verbose | false | Enable verbose 로깅 |
--max_samples | 모든 것 | dataset에서 첫번째 N 표본만 가공하세요 |
--max_tokens | 모델 과태 | 모델 응답 당 최대 토큰 |
제공자 Routing (OpenRouter)
| 제품 설명 | 설명 |
|---|---|
--providers_allowed | (예, "anthropic,openai") |
--providers_ignored | 무시하기 위해 Comma-separated 제공 업체 (예, "together,deepinfra") |
--providers_order | Comma-separated 선호하는 제공자 순서 |
--provider_sort | "price", "throughput" 또는 "latency" |
Reasoning 통제
| 제품 설명 | 설명 |
|---|---|
--reasoning_effort | 노력 수준: none, minimal, low, medium, high, xhigh |
--reasoning_disabled | 완전히 disable reasoning/thinking 토큰 |
고급 옵션
| 제품 설명 | 설명 |
|---|---|
--ephemeral_system_prompt | 시스템 실행 중에 사용했지만 trajectories에 저장되지 않음 |
--log_prefix_chars | 로그 미리보기 (기본값: 100) |
--prefill_messages_file | JSON 파일에 대한 경로 몇 샷 priming |
Toolset 배포
각 프롬프트는 distribution의 도구 세트를 무작위로 샘플링합니다. 교육 데이터는 다양한 도구 조합을 포함합니다. 사용 --list_distributions 모든 사용 가능한 배포를 볼 수 있습니다.
현재 구현중인 유통은 ** 각 개별 툴셋**에 대한 확률을 할당합니다. 샘플러는 각 도구 모음을 독립적으로 플립하여 적어도 하나의 도구가 활성화됩니다. 이것은 미리 만들어진 조합의 손으로 잡은 테이블에서 다릅니다.
산출 체재
모든 산출은 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
Trajectory 체재
trajectories.jsonl의 각 라인은 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
}
}
``conversations` 필드는 `from` 및 `value` 필드와 ShareGPT 같은 형식을 사용합니다. Tool stats는 HuggingFace datasets 호환성을 위한 항목에 걸쳐 일관성있는 schema를 보장하는 0개의 기본으로 가능한 모든 도구를 포함하도록 정상화됩니다.
## 자주 묻는 질문 \{#checkpointing}
배치 주자에는 결함 포용력을 위한 튼튼한 검문소가 있습니다:
- **체크 포인트 파일:** 각 일괄 처리 완료 후 저장, 신속한 인덱스가 수행되는 추적
- **콘텐츠 기반 이력서:** `--resume`에서, 런너는 기존 배치 파일을 스캔하고 실제 텍스트 콘텐츠에 의해 완성 된 프롬프트를 스캔하여 데이터셋 주문이 변경되는 경우에도 복구 할 수 있습니다
- ** 실패 프롬프트:** 성공적으로 완료 된 프롬프트가 완료되면 표시됩니다. 실패한 프롬프트는 이력서에 다시 기여합니다
- ** 배치:** 완료되면 모든 일괄 파일 (이전 실행 포함)은 단일 `trajectories.jsonl`로 합병됩니다
### 이력서 작업 \{#how-resume-works}
1. 모든 `batch_*.jsonl` 파일을 스캔하여 완성된 프롬프트(작성자 일치)
2. 이미 완료된 프롬프트를 제외한 dataset 필터
3. 나머지 프롬프트 재 배치
4. 나머지 프롬프트만 처리
5. 모든 일괄 파일 (old + new) 마지막 출력으로
## 품질 필터링 \{#quality-filtering}
배치 주자는 자동적인 질 filtering를 적용합니다:
- **No-reasoning 필터:** Zero Assistant가 이유를 포함 한 샘플 (`<REASONING_SCRATCHPAD>` 또는 네이티브 사고 토큰 없음)은 카드화됩니다
- **입력 필터:** hallucinated tool name ( valid tool list에 아닙니다)가 최종 합병 중에 필터링됩니다
- **등록 통계:** 전체 실행에 대한 이유없이 회전의 비율을 추적
## 관련 기사 \{#statistics}
완료 후, 런너는 종합적인 통계를 인쇄합니다:
- **도구 사용:** 통화 수, 성공 / 도구 당 비용
- **대응 범위:** 조수의 백분율은 이유와
- **표시가 표시됨:** 감응작용을 위해 거르는 표본의 조사
- **Duration:** 총 처리 시간
통계는 또한 프로그래밍 분석을위한 `statistics.json`에 저장됩니다.
## 사용 사례 \{#use-cases}
### 교육 데이터 생성 \{#training-data-generation}
미세 조정을위한 다양한 도구 사용 trajectories를 생성:
```bash
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
모델 평가
표준화 된 프롬프트의 전체 모델 사용 도구에 대해 설명합니다
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
Per-Prompt 컨테이너 이미지
특정한 환경을 요구하는 벤치 마크를 위해, 각 신속한 그것의 자신의 콘테이너 이미지를 지정할 수 있습니다:
{"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"}
일괄 런너는 Docker 이미지를 각 프롬프트를 실행하기 전에 접근 할 수 있습니다.