online branch: main

2026-08-01

RSS llms.txt GitHub

【Hermes】度量体系:先定义好,才能优化

$
Hermes Agent 度量与评估体系示意图

同一个 Skill 改了几段文字,跑两个例子都成功,不能证明它更好。它可能只是碰巧命中,也可能为了提分变得越来越长,甚至偏离原始任务。

Hermes 的度量体系把问题拆成三部分:测什么、怎么打分、什么情况直接拒绝。

这篇只回答一个问题:怎样判断一个 Skill 改写后是真的更好,而不是只在少数示例上看起来更顺?

Hermes 给出的答案是:先构建 synthetic、历史或人工数据集,用 rubric 与 LLM-as-judge 评估行为并保留 feedback,再用大小、增长、非空和结构约束在高成本评估前拦截无效候选。

数据集先定义“要表现成什么样”

SyntheticDatasetBuilder 读取 Skill,生成任务输入与 expected_behavior。后者不是标准答案文本,而是一份行为 rubric,描述应该采取哪些步骤、避免哪些错误。

Hermes 还考虑从真实会话挖掘和人工 Golden 数据。synthetic 适合冷启动,历史数据更接近真实分布,人工集质量高但成本也高。

语义评分比精确匹配更适合开放任务

Agent 可以用不同措辞完成同一行为,要求输出精确包含某句话会误判。Hermes 先让 Agent 使用 Skill 完成任务,再由 LLM-as-judge 对照 rubric 打分。

评分之外还要保留 feedback。分数只说明好坏程度,反馈指出 Skill 缺少了哪项指导,后续优化器才能有方向地改写。

快评与终评承担不同成本

每轮候选都跑完整 LLM 评估会很慢、很贵。Hermes 在优化中可以用关键词重合做快速代理,最后再切回 LLM-as-judge。

代理指标不精确,只适合筛选方向,不能直接冒充最终质量结论。两阶段评估的前提是最终门仍然使用更可靠标准。

硬约束要在昂贵评估之前

候选超过 15KB、比原文增长超过 20%、为空或不符合 Markdown 起始结构时,无论预测得分多高都应拒绝。

这些检查先执行,可以避免为明显无效版本支付评估成本。数据集还要分 train、val、holdout,避免优化器背住少数测试题。

一次 Skill 评估如何完成

SyntheticDatasetBuilder 先读取 Skill,为不同任务生成 task_input 和行为 rubric。数据量足够后,再按 60/20/20 拆成 train、validation 和 holdout;训练集用于产生改写,验证集帮助选择,holdout 保留到最后检查泛化。

候选 Skill 首先进入 ConstraintValidator。超过 15KB、相对原文增长超过 20%、内容为空或 Markdown 结构不合法,直接拒绝,不再消耗后续模型调用。

通过硬约束后,评估器让 Agent 使用该 Skill 完成任务,再由 LLM-as-judge 按 rubric 打分并生成 feedback。优化中可以用关键词重合作为快速代理,最终结论仍要回到语义评估。

最后比较 baseline 与候选在同一数据上的结果。分数回答是否更好,feedback 回答应该改哪里,holdout 回答是不是只记住了测试题。三者共同成立,优化结果才有资格进入下一步。

三个容易走偏的地方

  • 使用精确文本匹配评价开放式 Agent 行为。
  • 先完成昂贵评估,再检查候选是否违反大小和结构约束。
  • 测试集只有三条且不拆 holdout,优化结果容易过拟合。

产品经理可以怎样评审

评审这项能力,可以先检查三条:

  1. 评估标准应描述可观察行为,不应绑定唯一措辞。
  2. 分数用于排序,feedback 用于改进,两者缺一不可。
  3. 质量提升必须同时通过数据评估和硬约束,不能用高分抵消结构风险。

原材料教学版只完整实现 synthetic 与基础约束;本文不把历史数据挖掘和 benchmark 门控描述成当前教学实现。