Hermes Agent Batch Processing:批量生成AI训练数据的利器(2026最新)

OpenClaw 企业定制 私人订制工作流 优化运维 openclaw记忆优化 问题咨询解决 请加微信交流

微信: aixbwz

需要给AI模型生成训练数据?想批量跑上千条prompt来收集工具调用轨迹?Batch Processing就是来解决这个问题的。它能并行处理海量prompt,生成结构化的训练数据,适合微调或评估用。

这篇讲清楚Batch Processing是什么、能做什么、以及实际使用场景。

Batch Processing是什么

简单说:一次性跑大量prompt,每个prompt有独立环境,输出结构化的轨迹数据。

核心用途是生成训练数据——产生ShareGPT格式的轨迹,包含完整对话历史、工具调用统计、推理覆盖度指标。

快速开始

# 基本用法
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

# 从断点恢复
python batch_runner.py \
    --dataset_file=data/prompts.jsonl \
    --batch_size=10 \
    --run_name=my_first_run \
    --resume

# 查看可用工具集分布
python batch_runner.py --list_distributions

数据集格式

输入是一个JSONL文件(每行一个JSON对象),每条必须有prompt字段:

{"prompt": "写一个Python函数找最长回文子串"}
{"prompt": "用Flask创建用户认证REST API"}
{"prompt": "调试这个错误:TypeError: cannot unpack non-iterable NoneType object"}

可选字段:

  • image/dockcer_image:容器镜像,用于沙箱隔离
  • cwd:终端会话的工作目录覆盖

核心参数

参数 默认值 说明
–dataset_file 必需 JSONL数据集路径
–batch_size 必需 每批prompt数量
–run_name 必需 运行名称(用于输出目录和断点)
–distribution default 工具集分布
–model claude-sonnet-4.6 使用的模型
–max_turns 10 每个prompt最大工具调用轮次
–num_workers 4 并行工作进程数
–resume false 从断点恢复
–max_samples all 只处理前N条数据

Provider路由

# 只允许特定provider
--providers_allowed "anthropic,openai"

# 忽略某些provider
--providers_ignored "together,deepinfra"

# 优先provider顺序
--providers_order "anthropic,openai,google"

# 按价格/吞吐量/延迟排序
--provider_sort "price"

推理控制

# 推理深度级别
--reasoning_effort medium

# 完全禁用推理/思考token
--reasoning_disabled

输出格式

所有输出到data/<run_name>/目录:

data/my_run/
├── trajectories.jsonl    # 合并后的最终输出
├── batch_0.jsonl         # 各批次结果
├── batch_1.jsonl
├── ...
├── checkpoint.json       # 断点文件
└── statistics.json       # 聚合工具使用统计

轨迹格式

每行是一个JSON对象:

{
  "prompt_index": 42,
  "conversations": [
    {"from": "human", "value": "写一个函数..."},
    {"from": "gpt", "value": "我来创建...",
     "tool_calls": [...]},
    {"from": "tool", "value": "..."},
    {"from": "gpt", "value": "完成!"}
  ],
  "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
  }
}

断点机制

Batch Processing有强大的断点容错机制:

  • 每批完成后保存checkpoint
  • 内容匹配恢复:resume时扫描已有batch文件,通过实际内容匹配已完成prompt
  • 失败重试:只有成功完成的prompt标记为done,失败的会重试
  • 批次合并:完成后所有batch文件合并为trajectories.jsonl

Resume怎么工作

  1. 扫描所有batch_*.jsonl,通过内容匹配找出已完成的prompt
  2. 从数据集中过滤掉已完成的
  3. 重新分批剩余的prompt
  4. 只处理剩余的prompt
  5. 合并所有batch文件(旧的+新的)为最终输出

质量过滤

自动质量过滤:

  • 无推理过滤器:没有任何助手回复包含推理的样本会被丢弃
  • 损坏条目过滤器:幻觉工具名的条目在最终合并时被过滤
  • 推理统计:跟踪整个运行中有/无推理的回复占比

统计输出

完成后输出详细统计:

  • 工具使用:每个工具的调用次数、成败率
  • 推理覆盖:有推理的助手回复百分比
  • 丢弃样本:因无推理被过滤的数量
  • 耗时:总处理时间

统计同时保存到statistics.json供程序分析。

工具集分布

每个prompt从分布中随机采样工具集,确保训练数据覆盖多样化工具组合。

当前实现:分布给每个工具集分配概率,独立flip每个工具集,保证至少启用一个工具集。

实际使用场景

训练数据生成

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

评估模型在标准prompt下的工具使用能力。

每prompt独立容器

{"prompt": "安装numpy并计算3x3矩阵特征值", "image": "python:3.11-slim"}
{"prompt": "编译并运行这个Rust程序", "image": "rust:1.75"}

每个prompt用自己的容器镜像,适合需要特定环境的基准测试。

高级选项

  • --ephemeral_system_prompt:执行时使用但不保存到轨迹的系统提示词
  • --log_prefix_chars:日志预览显示的字符数(默认100)
  • --prefill_messages_file:few-shot priming的预填充消息JSON文件路径

常见问题

能跑多少条prompt?

没有硬性限制,取决于你的API配额和机器资源。建议从100条开始测试。

断了怎么办?

用--resume从断点恢复,只重跑未完成的。

怎么控制成本?

用--max_samples限制数量,用--providers_allowed限制provider,用--provider_sort按价格排序。

输出能直接用于微调吗?

能,格式是ShareGPT格式,工具调用轨迹完整,可以直接用于微调。

怎么提高数据质量?

用--reasoning_effort控制推理深度,启用质量过滤(默认开启)自动剔除无推理样本。

总结

Batch Processing是生成AI训练数据的利器。

核心价值:

  • 批量并行处理大量prompt
  • 输出结构化训练数据
  • 支持断点恢复
  • 自动质量过滤
  • 工具调用统计完整
  • 适合微调和模型评估

如果你在训练自己的AI模型,这个工具能大幅提升数据生产效率。

相关文章

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

七天热门