
Hermes 函数调用实战:构建工具增强型智能体
为什么是 Hermes? 在工具增强型智能体的构建中,函数调用(Function Calling)能力是核心中的核心。当 OpenAI 的 function calling 成为行业事实标准后,开源社区一直在寻找能够可靠执行这一范式的开源模型。NousResearch 的 Hermes 系列正是在这个需求下脱颖而出的产物。 Hermes 不是又一个通用大模型,而是一个专注于"指令遵循和工具使用"的特化模型系列。它通过对大量函数调用对话数据进行精细微调,在开源模型中实现了接近 GPT-4 级别的函数调用可靠性。 Hermes 函数调用机制详解 2.1 与 OpenAI function calling 的对比 OpenAI 的 function calling 采用 JSON Schema 定义函数签名,模型直接输出结构化的 JSON 参数。Hermes 采用了一种不同的方案——基于特殊标记的函数调用格式: 模型在生成文本时,通过特定的标记来表示"我要调用一个函数",然后在标记之间输出 JSON 格式的调用信息。例如,当用户询问天气时,模型会输出类似如下的内容: {"name": "get_weather", "arguments": {"location": "上海", "unit": "celsius"}} 这种设计有几个优势: 可解析性强:特殊标记使得函数调用的边界清晰明确,解析器不需要依赖正则表达式或 JSON 修复 多调用支持:一次响应中可以包含多个函数调用请求 与自然语言混合:模型可以在函数调用前后插入自然语言解释,提升用户体验 2.2 工具定义格式 Hermes 使用 JSON Schema 来定义可用工具,格式与 OpenAI 高度兼容: tools = [ { "type": "function", "function": { "name": "search_web", "description": "搜索互联网获取最新信息", "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": "搜索关键词" }, "max_results": { "type": "integer", "description": "最大返回结果数", "default": 5 } }, "required": ["query"] } } }, { "type": "function", "function": { "name": "read_file", "description": "读取指定路径的文件内容", "parameters": { "type": "object", "properties": { "path": { "type": "string", "description": "文件路径" } }, "required": ["path"] } } } ] 2.3 系统提示构建 Hermes 的函数调用依赖于精心设计的系统提示来引导模型行为: ...








