字节笔记本
2026年5月16日
Hermes Agent 本地 Ollama 配置:私有化部署开源大模型
Hermes Agent 是一个开源的 AI 智能体框架,支持文件编辑、终端命令、网页浏览等工具调用能力。默认情况下它依赖云端 LLM API(如 OpenRouter、Anthropic),这意味着每次对话都会产生 token 费用,且数据需要发送到第三方服务器。通过配置本地 Ollama 实例,可以让 Hermes Agent 完全运行在你自己的硬件上——零 API 费用,数据不出本机。本文将一步步介绍如何安装 Ollama、拉取开源模型、配置 Hermes 连接本地端点,以及性能调优和可选的网关机器人部署。
问题背景
云端 LLM API 按 token 计费。一次高强度的编程会话可能花费 5–20 美元。对于个人项目、学习场景或隐私敏感的工作,这笔费用会持续累积——而且你把每一段对话都发送给了第三方。
本指南解决的问题
你将搭建一个完全运行在自己硬件上的 Hermes Agent,使用 Ollama 作为模型后端。无需 API Key,无需订阅,数据不会离开你的机器。配置完成后,Hermes 的工作方式与使用 OpenRouter 或 Anthropic 完全一致——终端命令、文件编辑、网页浏览、任务委派——只是模型在本地运行。
完成后你将拥有:
- Ollama 提供一个或多个开源权重模型服务
- Hermes 已连接 Ollama 作为自定义端点
- 一个可用的本地 Agent,能编辑文件、运行命令、浏览网页
- 可选:一个完全由自有硬件驱动的 Telegram/Discord 机器人
硬件需求
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| RAM | 8 GB(运行 3B 模型) | 32+ GB(运行 27B+ 模型) |
| 存储 | 5 GB 可用空间 | 30+ GB(多模型场景) |
| CPU | 4 核 | 8+ 核(AMD EPYC、Ryzen、Intel Xeon) |
| GPU | 非必需 | NVIDIA GPU,8+ GB 显存可显著加速 |
:::tip 纯 CPU 可用,但响应较慢
Ollama 可以在纯 CPU 服务器上运行。9B 模型在现代 8 核 CPU 上约 10 tokens/sec。31B 模型在 CPU 上更慢(约 2–5 tokens/sec)——每次响应需要 30–120 秒,但可以正常工作。GPU 可以大幅改善体验。对于纯 CPU 环境,通过环境变量加宽 API 超时时间(这不是 config.yaml 的配置项):
# ~/.hermes/.env
HERMES_API_TIMEOUT=1800 # 30 分钟 —— 为慢速本地模型预留充足时间:::
第一步:安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh验证是否运行正常:
ollama --version
curl http://localhost:11434/api/tags # 应返回 {"models":[]}第二步:拉取模型
根据你的硬件选择:
| 模型 | 磁盘占用 | 所需 RAM | 工具调用 | 最佳用途 |
|---|---|---|---|---|
gemma4:31b | ~20 GB | 24+ GB | 支持 | 最佳质量——强大的工具调用与推理能力 |
gemma2:27b | ~16 GB | 20+ GB | 不支持 | 对话任务,无需工具调用 |
gemma2:9b | ~5 GB | 8+ GB | 不支持 | 快速对话、问答——无法调用工具 |
llama3.2:3b | ~2 GB | 4+ GB | 不支持 | 轻量级快速问答 |
:::warning 工具调用很重要
Hermes 是一个**智能体(Agent)**助手——它通过工具调用编辑文件、运行命令、浏览网页。不支持工具调用的模型只能聊天,无法执行操作。要获得完整的 Hermes 体验,请使用支持工具调用的模型(如 gemma4:31b)。
:::
拉取你选择的模型:
ollama pull gemma4:31b:::info 多模型支持
你可以拉取多个模型,并在 Hermes 中使用 /model 切换。Ollama 会按需将活动模型加载到内存,并自动卸载空闲模型。
:::
验证模型是否正常工作:
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma4:31b",
"messages": [{"role": "user", "content": "Say hello"}],
"max_tokens": 50
}'你应该能看到包含模型回复的 JSON 响应。
第三步:配置 Hermes
运行 Hermes 设置向导:
hermes setup当提示选择 Provider 时,选择 Custom Endpoint 并输入:
- Base URL:
http://localhost:11434/v1 - API Key: 留空或输入
no-key(Ollama 不需要 API Key) - Model:
gemma4:31b(或你拉取的其他模型)
或者直接编辑 ~/.hermes/config.yaml:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"第四步:开始使用 Hermes
hermes就这样。你现在运行的是一个完全本地的 Agent。试试看:
You: List all Python files in this directory and count the lines of code in each
You: Read the README.md and summarize what this project does
You: Create a Python script that fetches the weather for Ho Chi Minh CityHermes 将使用终端工具、文件操作和你的本地模型——无需云端调用。
第五步:为不同任务选择合适的模型
不是每个任务都需要最大的模型。以下是实用建议:
| 任务 | 推荐模型 | 原因 |
|---|---|---|
| 文件编辑、代码、终端命令 | gemma4:31b | 唯一具备可靠工具调用能力的模型 |
| 快速问答(无需工具调用) | gemma2:9b | 对话任务响应快速 |
| 轻量级聊天 | llama3.2:3b | 最快,但能力非常有限 |
:::note
对于完整的智能体工作(编辑文件、运行命令、浏览网页),gemma4:31b 是目前支持工具调用的最佳本地选项。请关注 Ollama 模型库获取更新的模型——工具调用支持正在快速扩展。
:::
在会话中随时切换模型:
/model gemma2:9b
第六步:性能优化
增大 Ollama 的上下文窗口
默认情况下,Ollama 使用 2048 token 的上下文。对于智能体工作(工具调用、长对话),你需要更大的上下文:
# 创建一个扩展上下文的 Modelfile
cat > /tmp/Modelfile << 'EOF'
FROM gemma4:31b
PARAMETER num_ctx 16384
EOF
ollama create gemma4-16k -f /tmp/Modelfile然后更新 Hermes 配置,将模型名改为 gemma4-16k。
保持模型常驻内存
默认情况下,Ollama 在 5 分钟不活动后卸载模型。对于持久运行的网关机器人,保持模型常驻:
# 设置 keep-alive 为 24 小时
curl http://localhost:11434/api/generate \
-d '{"model": "gemma4:31b", "keep_alive": "24h"}'或者在 Ollama 环境中全局设置:
# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_KEEP_ALIVE=24h"使用 GPU 卸载(如果可用)
如果你有 NVIDIA GPU,Ollama 会自动将层卸载到 GPU。检查方法:
ollama ps # 显示当前加载的模型及 GPU 层数对于 12 GB 显存 GPU 上的 31B 模型,你会获得部分卸载(约 40 层在 GPU,其余在 CPU),这仍然能带来显著的加速。
第七步:部署为网关机器人(可选)
当 Hermes 在本地 CLI 中正常运行后,你可以将其暴露为 Telegram 或 Discord 机器人——仍然完全运行在你自己的硬件上。
Telegram
- 通过 @BotFather 创建机器人并获取 Token
- 添加到
~/.hermes/config.yaml:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
platforms:
telegram:
enabled: true
token: "YOUR_TELEGRAM_BOT_TOKEN"- 启动网关:
hermes gateway现在在 Telegram 上给你的机器人发消息——它将使用你的本地模型回复。
Discord
- 在 discord.com/developers 创建 Discord 应用
- 添加到配置:
platforms:
discord:
enabled: true
token: "YOUR_DISCORD_BOT_TOKEN"- 启动:
hermes gateway
第八步:配置回退机制(可选)
本地模型在处理复杂任务时可能力不从心。设置一个云端回退,仅在本地模型失败时激活:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4这样,90% 的使用是免费的(本地),只有困难任务才会调用付费 API。
常见问题排查
启动时 "Connection refused"
Ollama 没有运行。启动它:
sudo systemctl start ollama
# 或
ollama serve响应缓慢
- 检查模型大小与 RAM 的匹配: 如果模型所需 RAM 超过可用量,会换页到磁盘。使用更小的模型或增加 RAM。
- 检查
ollama ps: 如果没有 GPU 层被卸载,响应完全依赖 CPU。纯 CPU 服务器这是正常现象。 - 减小上下文: 长对话会拖慢推理速度。定期使用
/compress,或在配置中设置更低的压缩阈值。
模型不遵循工具调用
较小的模型(3B、7B)有时会忽略工具调用指令,生成纯文本而非结构化的函数调用。解决方案:
- 使用更大的模型 ——
gemma4:31b或gemma2:27b处理工具调用比 3B/7B 模型好得多。 - Hermes 有自动修复机制 —— 它检测格式错误的工具调用并尝试自动修复。
- 设置回退 —— 如果本地模型连续失败 3 次,Hermes 会回退到云端 Provider。
上下文窗口错误
Ollama 默认上下文(2048 token)对智能体工作来说太小。参见第六步增大上下文。
费用对比
以下是一次典型编程会话(约 100K token 输入、20K token 输出)本地运行与云端 API 的费用对比:
| Provider | 单次会话费用 | 月度费用(每天使用) |
|---|---|---|
| Anthropic Claude Sonnet | ~$0.80 | ~$24 |
| OpenRouter (GPT-4o) | ~$0.60 | ~$18 |
| Ollama(本地) | $0.00 | $0.00 |
你唯一的成本是电费——根据硬件不同,大约每次会话 $0.01–0.05。
本地擅长的场景
- 文件编辑与代码生成 —— 9B+ 模型处理良好
- 终端命令 —— Hermes 封装命令、运行并读取输出,与模型无关
- 网页浏览 —— 浏览器工具负责抓取,模型只负责解读结果
- 定时任务与调度 —— 与云端配置工作方式完全相同
- 多平台网关 —— Telegram、Discord、Slack 均可使用本地模型
云端模型更优的场景
- 复杂多步推理 —— 70B+ 或云端模型(如 Claude Opus)明显更强
- 长上下文窗口 —— 云端模型提供 100K–1M token;本地模型通常为 8K–32K
- 长文本生成速度 —— 对于长输出,云端推理比纯 CPU 本地更快
最佳策略:日常任务使用本地模型,困难任务设置云端回退。