Hermes 2 Pro 技术回顾:开源 Function Calling 的起点

回顾 Hermes 2 Pro 在 Mistral 7B 上的 Function Calling 实现,解析训练数据构建方法、90% 评估得分的技术含量,以及它如何奠定了开源模型工具调用的基础。

目录

  1. 背景:2024 年初的 Function Calling 格局
  2. 为什么选 Mistral 7B 作为基座
  3. Function Calling 训练数据是怎么做的
  4. 90% 的评估得分代表什么
  5. JSON Mode:另一个重要特性
  6. 在 Agent 生态中的位置
  7. 技术局限性
  8. 它为后来铺了什么路
  9. 现在还值得用吗

在大模型的发展历程中,有些模型因为参数量大而被记住,有些因为跑分高而被记住。Hermes 2 Pro 被记住的理由不太一样——它是开源社区第一批把 Function Calling(函数调用/工具调用)做到真正可用的模型之一。

今天回过头来看 Hermes 2 Pro 的这段历史,能更好地理解整个开源 agent 生态是怎么一步步建起来的。

背景:2024 年初的 Function Calling 格局

2024 年初,如果你想在应用中用 Function Calling,选择基本就一个——OpenAI 的 GPT-3.5/GPT-4 API。ChatGPT 在 2023 年中就已经支持了函数调用功能,开发者可以在 API 请求中定义一组函数(包括函数名、参数类型、描述),模型会根据用户的意图判断是否需要调用函数,并生成符合格式的调用请求。

这个功能对于构建 AI agent 来说至关重要。没有 Function Calling,模型就只能输出文本,无法和外部工具、数据库、API 产生实际交互。有了 Function Calling,模型才真正成为一个”能做事”的 agent。

但问题是——OpenAI 的方案是闭源的。你必须用他们的 API,遵守他们的使用条款,忍受他们的定价。对于想在本地部署 agent 的开发者来说,这条路走不通。

当时开源社区也有一些尝试,比如 Gorilla、ToolLLaMA 等项目,但大多停留在研究阶段,实际用起来坑比较多:格式不统一、生成的 JSON 经常出错、对复杂函数签名的理解很差。

就是在这个背景下,Nous Research 推出了 Hermes 2 Pro。

为什么选 Mistral 7B 作为基座

Hermes 2 Pro 的基座是 Mistral 7B,这个选择在当时看来挺精准的。

Mistral 7B 在 2023 年底发布时是一匹黑马。这个来自法国初创公司 Mistral AI 的 7B 模型,在多项基准测试上打赢了 Llama 2 13B——用更少的参数实现了更好的性能。它的滑动窗口注意力(Sliding Window Attention)设计也让推理效率更高。

对于 Hermes 2 Pro 这样以 Function Calling 为主打功能的模型来说,7B 的参数量是个甜蜜点:

  • 部署门槛低:量化后可以在消费级 GPU 甚至 CPU 上运行,让更多开发者能用上
  • 推理速度快:Function Calling 的场景通常对延迟敏感(用户在等模型决定要不要调工具),小模型的速度优势很明显
  • 基座质量够用:Mistral 7B 的基础能力足以支撑函数调用所需的 JSON 生成、意图识别、参数提取等任务

Function Calling 训练数据是怎么做的

这可能是 Hermes 2 Pro 最有技术含量的部分——训练数据的构建。

Function Calling 不像普通的问答对话,你不能光给模型看一堆”问题-答案”对就指望它学会。它需要理解一套完整的交互协议:

  1. 接收用户请求
  2. 判断是否需要调用工具
  3. 如果需要,从可用工具列表中选择正确的工具
  4. 生成符合函数签名的 JSON 调用请求
  5. 接收工具返回的结果
  6. 基于结果生成最终回答

每一步都可能出错,所以训练数据需要覆盖各种边界情况。

Nous Research 的做法是建一套数据合成流水线:

第一步:定义工具库。收集了各种真实世界的 API 定义,包括天气查询、数据库操作、搜索引擎、日历管理等数十个类别。每个工具都有完整的函数签名(名称、参数列表、返回类型、描述)。

第二步:生成对话场景。用 GPT-4 等强模型生成大量自然语言请求,这些请求对应不同的工具调用场景。不光生成需要调工具的场景,还有大量不需要调工具的普通对话,让模型学会区分。

第三步:生成正确的调用序列。对于每个需要调工具的场景,生成正确的工具选择、参数填充和调用 JSON。这一步需要严格验证 JSON 格式的正确性——格式错一个逗号,整个调用就会失败。

第四步:生成多步调用链。很多真实场景需要连续调用多个工具。比如”帮我查明天北京的天气,然后根据天气推荐穿搭”,这就需要先调天气 API,再根据结果调推荐 API。这类多步骤的训练数据构建起来更复杂,但对实际应用至关重要。

第五步:加入错误处理。工具调用不一定总成功——API 可能返回错误、参数可能不合法、用户的请求可能不完整。训练数据中需要包含这些异常场景,让模型学会如何优雅地处理失败情况。

整个数据构建过程中,格式采用的是 ChatML 模板,工具定义和调用结果都嵌入在对话流中。这确保了模型在推理时能保持一致的格式输出。

90% 的评估得分代表什么

Hermes 2 Pro 在 Function Calling 的评估中拿到了约 90% 的得分。这个数字需要放在上下文里理解。

评估方法大致是这样的:给模型一批测试用例,每个用例包含一个用户请求和可用的工具列表。模型需要:

  1. 正确判断是否需要调用工具(不该调的时候调了,或者该调的时候没调,都算错)
  2. 选择正确的工具(工具列表里可能有 5-10 个工具,模型要选对)
  3. 生成正确的参数(参数名、参数类型、参数值都要对)
  4. 输出合法的 JSON(格式必须完全正确,能被解析器解析)

90% 的得分意味着在这些维度的综合评估中,模型有九成的概率能给出正确的输出。

这个成绩在当时的开源模型中是相当亮眼的。作为对比,同期其他开源模型在类似评估中的得分大多在 50-70% 之间。90% 意味着 Hermes 2 Pro 已经从”玩具级别”跨越到了”生产可用”的门槛。

但也要诚实地说,这个评估的测试集规模和覆盖面有限。在一些极端复杂的场景下(比如嵌套的 JSON 参数、需要类型转换的参数、含有特殊字符的字符串参数),实际表现可能没有 90% 那么理想。

JSON Mode:另一个重要特性

除了 Function Calling,Hermes 2 Pro 还引入了一个叫 JSON Mode 的功能——强制模型输出合法的 JSON 格式。

这个功能看起来简单,但在实际开发中极其有用。大模型输出 JSON 的时候经常”加戏”——在 JSON 前面加一段说明文字、在 JSON 里混入注释、或者干脆输出一个格式不完整的 JSON。这些对于需要程序化解析输出的应用来说都是灾难。

Hermes 2 Pro 的 JSON Mode 通过在训练数据中加入大量”纯 JSON 输出”的样本来解决这个问题。配合适当的系统提示,模型可以稳定地输出干净的 JSON,不加多余的文字。

这个特性让 Hermes 2 Pro 不仅适合做 agent,也适合做结构化数据提取——比如从一段非结构化文本中提取出特定字段并以 JSON 格式输出。

在 Agent 生态中的位置

Hermes 2 Pro 发布后,很快成为了多个 agent 框架的推荐本地模型。

在 LangChain 社区里,有不少开发者分享了用 Hermes 2 Pro 搭建本地 agent 的教程和经验。它的 Function Calling 格式和 OpenAI 的比较接近,迁移成本低。

在 AutoGen 这样的多 agent 框架里,Hermes 2 Pro 也能充当本地的 LLM 后端。虽然在复杂的多 agent 协作场景中,7B 模型的推理能力有时候不够用,但作为成本敏感场景的替代方案,它是完全可行的。

cocoloop 社区也有用户分享过用 Hermes 2 Pro 搭建个人知识库 agent 的实践。搭配 RAG(检索增强生成)框架,用 Function Calling 来调用搜索和数据库查询接口,效果出乎意料地好——在私有数据上的表现甚至比直接用 GPT-3.5 更好(因为 RAG 的质量主要取决于检索部分,而不是模型大小)。

技术局限性

回顾的时候也得说说不足:

复杂函数签名的处理:当函数参数涉及嵌套对象、数组、枚举类型等复杂结构时,Hermes 2 Pro 的准确率会下降。7B 的参数量在处理这种复杂结构化输出时确实力不从心。

多步调用的规划能力:在需要连续调用 3 个以上工具的场景中,模型的规划(planning)能力不够强,容易在中间步骤出错或遗漏。

错误恢复:当工具调用返回错误时,模型有时候不能很好地理解错误信息并做出合理的重试或替代方案。

上下文长度限制:基于 Mistral 7B 的上下文窗口比较有限,当工具描述很长或者对话历史很长时,模型的表现会受影响。这个问题在后来的 Hermes 4 版本 中得到了很大改善。

它为后来铺了什么路

Hermes 2 Pro 最大的贡献不是某个具体的跑分数字,而是它证明了一件事:开源 7B 模型也能做好 Function Calling。

这个结论的意义在于:

降低了 agent 开发的成本门槛。之前只能用 OpenAI API 来做 agent,现在可以在本地跑了。不用担心 API 费用、不用担心数据发送到第三方服务器。

推动了开源社区的 Function Calling 标准化。Hermes 2 Pro 采用的 ChatML + Function Calling 格式后来被很多其他模型借鉴,逐渐形成了社区的事实标准。

Hermes 3 和 Hermes 4 的工具调用能力奠定了基础。后续版本在 Function Calling 上的持续改进,很大程度上是在 Hermes 2 Pro 建立的数据管线和评估框架上迭代的。

从 Nous Research 的角度来说,Hermes 2 Pro 也是他们从”做微调模型”到”做 AI agent 基础设施”转型的一个关键节点。在此之前,Hermes 主要以对话质量著称;从 Hermes 2 Pro 开始,工具调用成为了 Hermes 的核心竞争力之一。

现在还值得用吗

坦率地说,如果你现在(2026 年)要做一个 agent 项目,直接用 Hermes 2 Pro 大概不是最优选择了。后续的 Hermes 4 在 Function Calling 上全面超越了它,而且还加上了混合推理能力。

但 Hermes 2 Pro 在一些特定场景下仍然有价值:

  • 极度资源受限的环境:只有一张 8GB 显存的显卡?量化后的 Hermes 2 Pro 可以流畅运行
  • 简单的单步工具调用:如果你的 agent 只需要做简单的 API 调用(比如查天气、查汇率),Hermes 2 Pro 完全够用
  • 教学和学习目的:想理解 Function Calling 的工作原理,Hermes 2 Pro 的 7B 规模让你可以快速实验和调试

对 Hermes 系列完整的发展脉络感兴趣的话,可以看 Hermes 模型进化全记录,那里有从 2023 年到现在每个版本的详细解读。

回头看,Hermes 2 Pro 就像开源 Function Calling 领域的一块奠基石。它不是最强的,但它出现在了最需要它的时候,给后面所有的工作指了一条可行的路。

参与讨论

对这篇文章有疑问或想法?cocoloop 社区有不少开发者在讨论 Hermes 相关话题,欢迎加入交流。

前往 cocoloop 社区 →