5.1 为什么工具集成是Agent的"手脚"
前四篇我们完成了Hermes Agent的安装配置、多Agent协作、记忆系统搭建。但还有一个关键问题:
Agent再聪明,如果不能调用外部工具,也只是"纸上谈兵"。
真正的生产力AI必须能够:
- 调用API获取实时数据
- 执行本地脚本
- 读写数据库
- 操作文件系统
Hermes Agent的工具系统,就是给AI装上"手脚",让它从"会说话"变成"能干活"。
5.2 工具系统的核心架构
Hermes Agent的工具系统基于"工具描述-参数验证-执行反馈"三步闭环:
用户指令 → Agent理解意图 → 匹配可用工具 → 验证参数 → 执行工具 → 返回结果 → 继续对话
工具的定义方式
每个工具是一个Python函数,通过装饰器声明其能力:
from hermes import tool
@tool(
name="get_weather",
description="获取指定城市的实时天气信息",
parameters={
"city": {
"type": "string",
"description": "城市名称,如'北京'、'上海'",
"required": True
},
"unit": {
"type": "string",
"description": "温度单位,'celsius'或'fahrenheit'",
"required": False,
"default": "celsius"
}
}
)
def get_weather(city: str, unit: str = "celsius") -> dict:
"""
调用天气API获取实时天气数据
"""
import requests
response = requests.get(
f"https://api.weather.com/v1/current?city={city}&unit={unit}"
)
if response.status_code == 200:
data = response.json()
return {
"city": city,
"temperature": data["temp"],
"condition": data["condition"],
"humidity": data["humidity"]
}
else:
return {"error": f"获取天气失败: {response.text}"}
关键要素
name:工具名称,Agent通过此名称调用
description:工具描述,Agent通过此理解工具用途
parameters:参数定义,包括类型、描述、是否必填
return:返回值,Agent通过此理解执行结果
5.3 内置工具与自定义工具
5.3.1 内置工具
Hermes Agent预置了常用工具:
| 工具名称 |
功能 |
典型场景 |
web_search |
网页搜索 |
查找信息、新闻 |
read_file |
读取文件 |
查看文档内容 |
write_file |
写入文件 |
保存生成内容 |
execute_code |
执行代码 |
数据分析、计算 |
send_email |
发送邮件 |
通知、提醒 |
使用内置工具:
tools:
builtin:
- web_search
- read_file
- write_file
- execute_code
5.3.2 自定义工具
创建自定义工具的完整流程:
步骤1:创建工具文件
from hermes import tool
import requests
import json
@tool(
name="send_wechat_message",
description="通过企业微信机器人发送消息通知",
parameters={
"webhook_url": {
"type": "string",
"description": "企业微信机器人的Webhook地址",
"required": True
},
"message": {
"type": "string",
"description": "要发送的消息内容",
"required": True
}
}
)
def send_wechat_message(webhook_url: str, message: str) -> dict:
"""发送企业微信消息"""
payload = {
"msgtype": "text",
"text": {"content": message}
}
response = requests.post(
webhook_url,
data=json.dumps(payload),
headers={"Content-Type": "application/json"}
)
return {
"success": response.status_code == 200,
"response": response.text
}
步骤2:注册工具
tools:
custom:
- path: ./.hermes/tools/my_tools.py
enabled: true
步骤3:验证工具可用
hermes tools list
hermes tools test --name send_wechat_message
--params '{"webhook_url": "https://...", "message": "测试消息"}'
5.4 工具调用的高级配置
5.4.1 权限控制
限制工具的执行范围,保护敏感操作:
tools:
permissions:
read_file:
allowed_paths:
- ./workspace/
- ./documents/
execute_code:
blocked_commands:
- "rm -rf"
- "sudo"
- "chmod"
send_email:
require_confirmation: true
5.4.2 超时与重试
tools:
execution:
default_timeout: 30
retry:
enabled: true
max_attempts: 3
backoff: exponential
5.4.3 结果缓存
对于耗时且结果稳定的工具调用,启用缓存:
tools:
cache:
enabled: true
ttl: 3600
cache_for:
- web_search
- query_database
5.5 实战案例:构建公众号发布助手
下面通过一个完整案例,展示如何用Hermes Agent构建公众号发布助手。
需求
- 从本地Markdown文件读取文章
- 调用Pexels API获取配图
- 发布到WordPress站点
- 发送企业微信通知
💡 完整代码示例已在上文中展示,这里只列出核心思路。你可以根据实际需求调整工具参数和执行流程。
使用Agent发布文章
用户:帮我发布一篇关于AI Agent的文章,标题是"多智能体协作的未来",内容在 ./articles/ai-agent.md
Agent:我来帮你完成发布流程:
- 读取文章内容...
- 搜索配图...
- 发布到WordPress...
- 发送通知...
需要我在发布前让你确认吗?
5.6 常见问题
Q:工具执行失败会怎样?
Agent会收到错误信息,可以尝试重试或换用其他方案。你可以配置重试策略和备用工具。
Q:如何保护敏感信息(如API密钥)?
使用环境变量存储密钥,不要硬编码在工具文件中:
import os
API_KEY = os.getenv("MY_API_KEY")
Q:如何调试工具?
使用内置的测试命令:
hermes tools test --name my_tool --params '{"param1": "value1"}'
hermes logs --tool my_tool
5.7 本讲小结
| 核心概念 |
说明 |
| 工具定义 |
通过装饰器声明工具名称、描述、参数 |
| 工具注册 |
在配置文件中启用自定义工具 |
| 权限控制 |
限制工具访问范围,保护敏感操作 |
| 超时重试 |
处理网络不稳定等异常情况 |
| 结果缓存 |
提升响应速度,减少重复调用 |
核心价值:工具集成让Hermes Agent从"能对话"升级为"能执行",真正成为生产力助手。
5.8 下一讲预告
第6篇将深入讲解
Hermes Agent的部署与监控:如何将Agent部署到服务器、实现7x24运行、监控运行状态、处理异常告警。
评论区