Hermes Agent: 工具与工具集
最后更新:2026-08-31
工具系统是 Hermes 的双手——光有大脑(LLM)不够,还需要手(工具)才能真正干活。70+ 内置工具让它能读写文件、搜索网页、执行代码、看图说话。
💡 提示:Hermes 的工具系统是可扩展的——内置 70+ 工具开箱即用,还可以自定义开发新工具。所有工具都在沙箱中执行,确保安全。
📋 前置知识:第7课 Skills 技能系统
1. 你将学到
| 编号 | 内容 |
|---|---|
| ❶ | 70+ 内置工具分类 |
| ❷ | 核心工具使用详解 |
| ❸ | 工具权限与安全配置 |
| ❹ | 自定义工具开发 |
| ❺ | 工具集管理 |
2. 故事
(1) 痛点:AI 只会说不会做
Bob 让 ChatGPT "帮我查一下当前天气",AI 只能说"我无法联网"。让 AI "运行这段代码看结果",也做不到。
(2) 解法:70+ 工具让 Agent 真正干活
Alice 的 Hermes Agent 直接执行:
BASH
me: 查一下北京今天的天气
Agent: [调用 web_search 工具]
[调用 web_scrape 工具]
北京今天:晴,26°C,空气质量优
me: 帮我运行这段 Python 代码
Agent: [调用 code_execution 工具]
代码执行成功,输出:Hello World
3. 内置工具分类
(1) 完整工具列表
| 类别 | 工具 | 功能说明 |
|---|---|---|
| 文件系统 | fs_read |
读取文件内容 |
fs_write |
写入文件 | |
fs_list |
列出目录内容 | |
fs_search |
搜索文件内容 | |
fs_move |
移动/重命名 | |
fs_delete |
删除文件 | |
| Web | web_search |
搜索引擎查询 |
web_scrape |
网页内容抓取 | |
web_download |
下载文件 | |
web_api |
HTTP API 调用 | |
| 代码执行 | code_python |
Python 代码执行 |
code_shell |
Shell 命令执行 | |
code_node |
Node.js 代码执行 | |
| 视觉 | vision_analyze |
图像理解 |
vision_ocr |
文字识别 | |
vision_screenshot |
截图 | |
| 语音 | voice_tts |
文字转语音 |
voice_stt |
语音转文字 | |
| 数据 | db_query |
数据库查询 |
json_parse |
JSON 处理 | |
csv_process |
CSV 处理 | |
| 通信 | email_send |
发送邮件 |
msg_send |
发送消息 | |
| 系统 | sys_info |
系统信息 |
process_run |
进程管理 |
(2) 工具使用频率统计
高频工具(每日使用):
fs_read, fs_write, code_python, web_search
中频工具(每周使用):
web_scrape, code_shell, db_query, vision_analyze
低频工具(按需使用):
voice_tts, email_send, process_run, csv_process
4. 核心工具详解
(1) 文件系统工具
BASH
# 读取文件
me: 读取 src/main.py 的内容
Agent: [调用 fs_read("src/main.py")]
```python
from fastapi import FastAPI
app = FastAPI()
...
```
# 写入文件
me: 创建一个 README.md
Agent: [调用 fs_write("README.md", content)]
✅ README.md 已创建
# 搜索文件
me: 找出所有使用了 deprecated API 的文件
Agent: [调用 fs_search("deprecated", path="src/", type="py")]
找到3个文件:
- src/api/users.py (line 42)
- src/api/auth.py (line 15)
- src/utils/helpers.py (line 88)
(2) Web 工具
BASH
# 搜索
me: 搜索 React 19 新特性
Agent: [调用 web_search("React 19 new features")]
React 19 主要新特性:
1. Server Components 稳定版
2. Actions 简化表单处理
3. use() Hook
...
# 网页抓取
me: 抓取这个页面的标题和内容摘要
Agent: [调用 web_scrape("https://react.dev/blog")]
标题: React 19 正式发布
摘要: React 19 带来了...
(3) 代码执行工具
BASH
me: 帮我计算斐波那契数列第20项
Agent: [调用 code_python]
```python
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(20))
```
执行结果:6765
(4) 视觉工具
BASH
me: [上传截图] 这个页面有什么问题?
Agent: [调用 vision_analyze]
分析截图:
1. 导航栏文字被截断
2. 按钮颜色对比度不足(WCAG AA 不达标)
3. 移动端布局错位
建议:修改 CSS...
5. 工具权限与安全
(1) 安全级别
| 级别 | 工具示例 | 需要确认 |
|---|---|---|
| 只读 | fs_read, web_search, sys_info | ❌ 自动执行 |
| 写入 | fs_write, email_send | ✅ 需确认 |
| 危险 | fs_delete, code_shell, process_run | ✅ 必须确认 |
(2) 安全配置
YAML
tools:
# 沙箱配置
sandbox: true
sandbox_type: "docker" # docker / subprocess / none
# 代码执行限制
code_execution:
max_time: 30 # 最大执行30秒
max_memory: "512MB" # 最大内存
allowed_languages:
- python
- javascript
- bash
network_access: false # 禁止网络访问
# 文件系统权限
filesystem:
allowed_paths:
- "~/projects"
- "/tmp/hermes"
denied_paths:
- "~/.ssh"
- "~/.gnupg"
- "/etc"
allow_delete: false # 禁止删除
max_file_size: "10MB"
# Web 访问限制
web:
rate_limit: 10 # 每分钟10次
blocked_domains: []
user_agent: "HermesAgent/1.0"
6. 自定义工具开发
(1) 工具定义文件
YAML
# ~/.hermes/tools/jira-search.yaml
name: "jira_search"
description: "搜索 Jira 工单"
category: "communication"
version: "1.0.0"
parameters:
- name: "query"
type: "string"
required: true
description: "搜索关键词"
- name: "project"
type: "string"
required: false
default: "PROJ"
- name: "status"
type: "string"
required: false
enum: ["open", "in_progress", "closed"]
execution:
type: "api"
method: "GET"
url: "${JIRA_URL}/rest/api/2/search"
headers:
Authorization: "Bearer ${JIRA_TOKEN}"
params:
jql: "project = {project} AND summary ~ '{query}' AND status = {status}"
output:
format: "json"
transform: |
results.map(issue => ({
key: issue.key,
summary: issue.fields.summary,
status: issue.fields.status.name,
assignee: issue.fields.assignee?.displayName
}))
(2) Python 工具
PYTHON
# ~/.hermes/tools/custom_metrics.py
from hermes import Tool, ToolResult
class CustomMetricsTool(Tool):
name = "custom_metrics"
description = "获取项目自定义指标"
category = "data"
parameters = {
"metric": {"type": "str", "required": True},
"time_range": {"type": "str", "default": "7d"}
}
def execute(self, metric: str, time_range: str = "7d") -> ToolResult:
# 自定义逻辑
data = self.fetch_metric(metric, time_range)
return ToolResult(
success=True,
data=data,
summary=f"{metric} 最近{time_range}: {data['trend']}"
)
7. 工具集管理
(1) 工具集概念
工具集是预配置的工具组合,适用于特定场景:
YAML
# 工具集:前端开发
toolsets:
frontend-dev:
tools:
- fs_read
- fs_write
- code_node
- code_shell
- web_search
- vision_analyze
config:
fs_write.allowed_extensions: [".ts", ".tsx", ".css", ".html"]
code_shell.allowed_commands: ["npm", "npx", "git"]
# 工具集:数据分析
data-analysis:
tools:
- fs_read
- code_python
- db_query
- csv_process
- json_parse
config:
code_python.packages: ["pandas", "numpy", "matplotlib"]
(2) 使用工具集
BASH
# 指定工具集启动
hermes chat --toolset frontend-dev
# 对话中切换
/toolset data-analysis
# 查看当前工具集
/toolset list
❓ 常见问题
Q 工具调用有延迟吗?
A 文件系统和代码执行通常 <1s,Web 工具取决于网络,2-10s。视觉工具 3-8s。
Q 代码执行安全吗?
A 默认在 Docker 沙箱中执行,限制网络访问和文件系统范围。可以通过配置调整安全级别。
Q 能限制工具的使用频率吗?
A 可以。
rate_limit 参数控制每分钟最大调用次数,防滥用。Q 自定义工具开发难吗?
A 简单 API 调用只需写 YAML 定义文件。复杂逻辑用 Python 类,继承
Tool 基类即可。Q 工具调用消耗 Token 吗?
A 消耗。工具调用的参数和返回结果都计入 Token。但工具结果通常比让 LLM 自己生成更省 Token。
Q 如何查看工具调用日志?
A
hermes tool log 查看最近调用记录,包括参数、返回值、耗时。📖 小节
- 70+ 内置工具覆盖文件、Web、代码、视觉、语音、数据等类别
- 核心工具:fs_read/write、web_search/scrape、code_python、vision_analyze
- 安全分级:只读自动执行、写入需确认、危险必须确认
- 自定义工具:YAML 定义 API 工具、Python 类开发复杂工具
- 工具集:预配置工具组合,适配不同场景
📝 作业
- 基础题(难度⭐):使用文件系统工具和代码执行工具完成一个任务,观察工具调用过程。
- 进阶题(难度⭐⭐):开发一个自定义 YAML 工具,接入你的常用 API(如 GitHub API),验证调用成功。
- 挑战题(难度⭐⭐⭐):创建一个完整的工具集(5+ 工具),针对你日常工作场景,写出配置文件并测试。