Hermes 1 → 2 → 3 → 4 版本里程碑
第九章:Hermes 版本里程碑:从 1 到 4 的技术演进
每一代 Hermes 都不仅仅是参数规模的扩张,而是训练哲学的根本性转变。理解这条演进脉络,是掌握 Hermes 4 能力边界的前提。
9.1 版本演进总览
NousResearch 的 Hermes 系列自 2023 年发布以来,历经四个主要版本,每一代都在训练数据构成、对齐策略和目标任务上发生了质的飞跃。下表给出了各版本的关键维度对比:
| 维度 | Hermes 1 | Hermes 2 | Hermes 3 | Hermes 4 |
|---|---|---|---|---|
| 发布时间 | 2023 Q2 | 2023 Q4 | 2024 Q2 | 2025 Q1 |
| 基础模型 | LLaMA-13B | Mistral-7B / LLaMA-2-70B | LLaMA-3-8B/70B | LLaMA-3.1-405B |
| 核心定位 | 通用指令跟随 | 增强推理与角色扮演 | 多模态+函数调用 | 原生 Agent 轨迹训练 |
| 训练数据规模 | ~300K 对话 | ~1M 对话 | ~3M 对话+合成数据 | ~10M Agent 轨迹 |
| 主要对齐方法 | SFT | SFT + RLHF | SFT + DPO | SFT + Atropos RL |
| 工具调用能力 | 无 | 有限 | 标准 FC | 原生 40+ 工具 |
| AgentBench 得分 | N/A | 18.2 | 34.7 | 61.3 |
9.2 Hermes 1:指令跟随的奠基者(2023 Q2)
9.2.1 诞生背景
2023 年春,ChatGPT 的爆火使开源社区意识到"指令跟随能力"的战略价值。LLaMA 原始权重虽然在预训练上质量极高,但缺乏自然对话能力。Hermes 1 的使命就是用精心筛选的对话数据,让 LLaMA-13B 具备实用的助手能力。
9.2.2 核心技术突破
数据质量革命
Hermes 1 的最大贡献不在于模型规模,而在于数据哲学。NousResearch 团队从 GPT-4 生成的海量对话中进行了严格的质量筛选,保留率仅约 15%。筛选标准包括:
- 指令清晰度:指令是否明确可执行
- 响应忠实度:响应是否完整覆盖指令要求
- 推理可见性:响应中是否包含显式推理步骤
- 格式一致性:Markdown 使用是否恰当
# Hermes 1 数据筛选的核心逻辑(重建版)
def quality_filter(conversation: dict) -> bool:
instruction = conversation["instruction"]
response = conversation["response"]
# 指令长度检查:过短的指令往往模糊
if len(instruction.split()) < 5:
return False
# 响应与指令的关键词覆盖率
instruction_keywords = extract_keywords(instruction)
coverage = sum(1 for kw in instruction_keywords
if kw in response) / len(instruction_keywords)
if coverage < 0.6:
return False
# 排除纯闲聊对话
if is_chitchat(instruction, response):
return False
return True
训练配方
Hermes 1 使用标准 SFT(Supervised Fine-Tuning),在 4 块 A100-80G 上训练约 3 个 epoch:
# 训练启动命令(近似重建)
torchrun --nproc_per_node=4 train.py \
--model_name_or_path meta-llama/Llama-13b-hf \
--data_path ./hermes_v1_filtered.json \
--bf16 True \
--num_train_epochs 3 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8 \
--learning_rate 2e-5 \
--lr_scheduler_type cosine \
--warmup_ratio 0.03
9.2.3 Benchmark 表现
| 评测集 | LLaMA-13B(基础) | Hermes 1 | 提升幅度 |
|---|---|---|---|
| MT-Bench | 4.2 | 6.8 | +61.9% |
| AlpacaEval | 38.4% | 67.2% | +75.0% |
| MMLU | 46.9 | 52.3 | +11.5% |
| HumanEval | 15.8 | 24.1 | +52.5% |
9.2.4 局限与不足
Hermes 1 本质上仍是"模仿学习"——它学会了模仿 GPT-4 的风格,但缺乏真正的推理链训练。在需要多步推理的数学题和复杂逻辑任务上,表现明显不足。
9.3 Hermes 2:推理与角色扮演的双线突破(2023 Q4)
9.3.1 战略转型
2023 年下半年,开源社区经历了"7B 时代"的觉醒——Mistral-7B 的发布证明小模型也能达到惊人的能力密度。Hermes 2 顺势切换到 Mistral-7B 作为主要基础模型,同时推出了 LLaMA-2-70B 版本。
更重要的是,Hermes 2 引入了角色扮演(Roleplay)数据和思维链(Chain-of-Thought)数据,形成双轨训练策略。
9.3.2 核心创新:ChatML 格式统一
Hermes 2 的一个被低估的贡献是推广了 ChatML 格式,这一格式后来成为开源社区的事实标准:
<|im_start|>system
你是一个有帮助的 AI 助手,名为 Hermes。
<|im_end|>
<|im_start|>user
请解释量子纠缠的基本原理。
<|im_end|>
<|im_start|>assistant
量子纠缠是量子力学中最神秘的现象之一...
<|im_end|>
这种格式的优势在于:
- 清晰的角色边界,防止角色混淆
- 支持多轮对话的自然扩展
- 与主流推理框架(vLLM、llama.cpp)完美兼容
9.3.3 推理能力的飞跃
Hermes 2 引入了大量 CoT(Chain-of-Thought) 训练数据,包括:
- 数学推理:来自 MetaMath 和 GSM8K 的增强版解题步骤
- 代码推理:带有逐步注释的编程解决方案
- 逻辑推理:结构化的演绎/归纳推理示例
# Hermes 2 CoT 数据示例(数学推理)
example = {
"instruction": "一个工厂每天生产 500 个零件,其中 3% 是次品。\n"
"如果质检员每天检查 200 个零件,\n"
"平均需要多少天才能发现 5 个次品?",
"response": """让我一步步来计算:
**第一步:计算次品率**
- 每天生产 500 个零件
- 次品率 3%
- 每天次品数 = 500 × 0.03 = 15 个
**第二步:计算抽检中次品的概率**
- 质检员每天检查 200/500 = 40% 的零件
- 期望发现次品数 = 15 × 40% = 6 个/天
**第三步:计算发现 5 个次品所需天数**
- 每天期望发现 6 个次品
- 发现 5 个次品所需天数 = 5/6 ≈ 0.83 天
**答案:约 0.83 天(即不到一天)**""",
"source": "hermes2_math_cot"
}
9.3.4 RLHF 的初步引入
Hermes 2 在部分版本中引入了基础的 RLHF 流程:
阶段一:SFT(监督微调)
↓
阶段二:奖励模型训练(基于人类偏好对比数据)
↓
阶段三:PPO 优化(最大化奖励模型分数)
但这个阶段的 RLHF 仍然是"防御性"的——主要用于减少有害输出,而非提升复杂推理能力。
9.3.5 Benchmark 突破
| 评测集 | Hermes 1 | Hermes 2 (7B) | Hermes 2 (70B) |
|---|---|---|---|
| MT-Bench | 6.8 | 7.4 | 8.1 |
| GSM8K | 32.1% | 63.4% | 81.2% |
| HumanEval | 24.1% | 42.3% | 67.8% |
| MMLU | 52.3% | 64.1% | 76.4% |
9.4 Hermes 3:多模态与函数调用时代(2024 Q2)
9.4.1 时代背景
2024 年上半年,两个趋势重塑了开源 LLM 格局:
- LLaMA-3 发布:Meta 带来了迄今最强的开源基础模型
- 函数调用标准化:OpenAI 的 Function Calling API 成为行业标准,开源社区迫切需要追赶
Hermes 3 以 LLaMA-3-8B/70B 为基础,重点攻克了这两个方向。
9.4.2 原生函数调用支持
Hermes 3 实现了完整的**结构化函数调用(Structured Function Calling)**系统:
# Hermes 3 函数调用示例
import json
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位"
}
},
"required": ["city"]
}
}
}
]
# 模型输出格式
tool_call_response = {
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": json.dumps({"city": "北京", "unit": "celsius"})
}
}
]
}
9.4.3 合成数据的战略转型
Hermes 3 的训练数据中,合成数据首次超过 50%。NousResearch 构建了自动化的数据生成管道:
真实任务种子
↓
GPT-4 生成多样化变体
↓
自动质量打分
↓
过滤 + 去重
↓
人工抽检(5% 样本)
↓
加入训练集
这一策略的关键洞察是:规模化的合成数据,在质量可控的前提下,能比有限的人工标注数据覆盖更广的任务分布。
9.4.4 DPO 替代 PPO
Hermes 3 完全放弃了 PPO,转向 DPO(Direct Preference Optimization):
为什么放弃 PPO?
- PPO 需要额外的奖励模型,训练成本高
- PPO 的超参数调优复杂,容易出现"奖励 Hacking"
- DPO 直接在偏好数据上优化,更稳定
# DPO 训练的核心逻辑
def dpo_loss(model, ref_model, chosen, rejected, beta=0.1):
"""
chosen: 被人类标注为更好的响应
rejected: 被人类标注为较差的响应
beta: KL 散度权重
"""
# 计算当前模型的对数概率
log_prob_chosen = model.log_prob(chosen)
log_prob_rejected = model.log_prob(rejected)
# 计算参考模型的对数概率
ref_log_prob_chosen = ref_model.log_prob(chosen)
ref_log_prob_rejected = ref_model.log_prob(rejected)
# DPO 损失
chosen_reward = beta * (log_prob_chosen - ref_log_prob_chosen)
rejected_reward = beta * (log_prob_rejected - ref_log_prob_rejected)
loss = -torch.log(torch.sigmoid(chosen_reward - rejected_reward))
return loss.mean()
9.4.5 关键 Benchmark
| 评测集 | Hermes 2 (70B) | Hermes 3 (8B) | Hermes 3 (70B) |
|---|---|---|---|
| MT-Bench | 8.1 | 8.0 | 8.9 |
| BFCL(函数调用) | N/A | 72.4% | 84.1% |
| AgentBench | 18.2 | 28.3 | 34.7 |
| MMLU | 76.4% | 73.1% | 82.6% |
9.5 Hermes 4:首个原生 Agent 轨迹模型(2025 Q1)
9.5.1 范式革命
Hermes 4 是整个系列的质变节点。之前三代模型的训练数据本质上都是"对话片段"——单次问答或短对话序列。Hermes 4 首次以完整 Agent 轨迹作为主要训练数据。
什么是 Agent 轨迹?
轨迹 = 任务描述 + [观察₁→动作₁→观察₂→动作₂→...→观察ₙ→最终响应]
一条完整轨迹包含:
- 初始任务(可能很模糊或复杂)
- 多次工具调用及其结果
- 中间推理步骤
- 错误与自我纠正
- 最终答案
9.5.2 Atropos RL 框架
Hermes 4 的训练引入了 Atropos——一个专为 Agent 场景设计的强化学习框架。
┌─────────────────────────────────────────────────────┐
│ Atropos 训练循环 │
│ │
│ ┌──────────┐ 轨迹 ┌──────────────┐ │
│ │ Agent │──────────→│ 环境执行器 │ │
│ │ (模型) │ │ (工具/沙箱) │ │
│ └──────────┘ └──────┬───────┘ │
│ ↑ │ 观察结果 │
│ │ 策略更新 ↓ │
│ ┌─────┴──────┐ 评分 ┌──────────────┐ │
│ │ RL 优化器 │←─────────│ 评判者 │ │
│ │ (PPO/GRPO)│ │ (Judge LLM) │ │
│ └────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────┘
9.5.3 训练数据构成
Hermes 4 的 ~10M 训练样本包含:
| 数据类型 | 比例 | 来源 |
|---|---|---|
| Agent 轨迹(成功) | 45% | Atropos 自动采集 |
| Agent 轨迹(失败+修正) | 20% | 对比学习数据 |
| 工具调用对话 | 15% | 合成生成 |
| 通用指令跟随 | 12% | 前代精选 |
| 代码生成 | 8% | GitHub+合成 |
9.5.4 核心能力突破
多步规划能力
# Hermes 4 处理复杂任务的思维方式
task = "分析公司过去6个月的销售数据,找出下降趋势,并提出改进建议"
# Hermes 4 的内部规划(<think> 标签内)
planning = """
<think>
这个任务需要多个步骤:
1. 首先读取销售数据文件
2. 检查数据格式和时间范围
3. 计算每月销售额
4. 识别下降趋势(可能需要计算环比/同比)
5. 对下降原因做假设分析
6. 基于数据生成改进建议
工具调用顺序:read_file → python_exec → python_exec → final_response
</think>
"""
错误自我修复
Hermes 4 在训练时见到了大量"错误-修复"轨迹,因此具备显著的自我纠错能力:
[工具调用] python_exec: "import pandas as pd; df = pd.read_csv('data.csv')"
[工具结果] Error: FileNotFoundError: data.csv not found
[Hermes 4 自我修复]
<think>文件不在当前目录,需要先列出文件</think>
[工具调用] shell_exec: "ls -la"
[工具结果] sales_data_2024.csv report.xlsx ...
[工具调用] python_exec: "df = pd.read_csv('sales_data_2024.csv')"
[工具结果] 成功读取 1842 行数据
9.5.5 Benchmark 全面提升
| 评测集 | Hermes 3 (70B) | Hermes 4 (405B) | GPT-4o |
|---|---|---|---|
| AgentBench | 34.7 | 61.3 | 68.4 |
| GAIA (Level 1) | 42.1% | 71.8% | 73.2% |
| Terminal-Bench | 31.2% | 58.9% | 62.1% |
| HumanEval | 82.6% | 91.4% | 90.2% |
| BFCL | 84.1% | 92.7% | 91.3% |
9.6 版本迁移注意事项
9.6.1 从 Hermes 2/3 迁移到 Hermes 4
Prompt 格式变化
# Hermes 3 的系统提示风格
hermes3_system = "You are Hermes, a helpful AI assistant."
# Hermes 4 推荐的系统提示(更明确的 Agent 定位)
hermes4_system = """You are Hermes, an autonomous AI agent with access to tools.
You think step-by-step before acting, use tools when needed,
and verify your results before responding."""
工具调用格式升级
Hermes 4 采用更严格的 JSON Schema 验证:
# Hermes 3(较宽松)
tool_call_h3 = "<tool>get_weather(city='北京')</tool>"
# Hermes 4(标准 JSON)
tool_call_h4 = {
"name": "get_weather",
"parameters": {"city": "北京", "unit": "celsius"}
}
9.6.2 性能权衡
| 场景 | 推荐版本 | 原因 |
|---|---|---|
| 资源受限(<16GB VRAM) | Hermes 3 (8B) | 性能/资源比最优 |
| 单次问答任务 | Hermes 3 (70B) | 成本更低 |
| 复杂 Agent 任务 | Hermes 4 (405B) | Agent 能力质变 |
| 本地部署+Agent | Hermes 4 量化版 | 唯一本地 Agent 级选择 |
9.6.3 兼容性检查清单
在从 Hermes 3 迁移到 Hermes 4 时,请检查以下项目:
□ 系统提示是否包含 Agent 相关描述?
□ 工具定义是否符合 JSON Schema 规范?
□ 上下文窗口是否从 8K 扩展到了 32K+?
□ 是否启用了思维链(<think> 标签)?
□ 错误处理逻辑是否适应多步重试?
□ 超时设置是否为长轨迹预留了足够时间?
9.7 版本演进的深层逻辑
回顾四代 Hermes 的演进,可以看到一条清晰的哲学脉络:
Hermes 1: 学会"说话"(指令跟随)
↓
Hermes 2: 学会"思考"(多步推理)
↓
Hermes 3: 学会"使用工具"(函数调用)
↓
Hermes 4: 学会"完成任务"(Agent 轨迹)
每一代的突破不是简单的参数叠加,而是训练数据哲学的根本转变。Hermes 4 的里程碑意义在于:它是第一个用任务完成轨迹而非对话片段来定义智能的开源模型。
本章小结
- Hermes 1 奠定了数据质量优先的训练哲学,ChatML 格式成为行业标准
- Hermes 2 引入 CoT 和角色扮演,在 7B 规模上实现了推理能力的跃升
- Hermes 3 完成了函数调用的标准化,DPO 取代 PPO 成为主流对齐方法
- Hermes 4 是首个以 Agent 轨迹为主要训练数据的开源模型,AgentBench 达到 61.3,接近 GPT-4o 水平
- 版本迁移时,需要特别注意 Prompt 格式、工具调用规范和上下文窗口的变化
思考题
- Hermes 4 的训练数据中有 20% 是"失败轨迹"——为什么错误案例对 Agent 训练如此重要?
- 从 SFT → RLHF → DPO → Atropos RL 的演进反映了什么核心问题?每种方法解决了什么,又带来了什么新问题?
- 如果你需要在 Hermes 3 (70B) 和 Hermes 4 (量化到 70B) 之间选择,你会如何评估两者的能力边界?
- "用轨迹训练"与"用对话训练"在根本上的区别是什么?这对模型的泛化能力有何影响?