ByteNoteByteNote

字节笔记本

2026年6月21日

hermes教程-使用 Ollama 本地运行 Hermes —— 零 API 成本

API中转
¥120

问题所在

云 LLM API 按 token 收费。一次重度编码会话可能花费 $5–20。对于个人项目、学习或隐私敏感的工作来说,这笔费用会不断累积——而且你正在把每一次对话都发送给第三方。

本指南解决的问题

你将配置 Hermes Agent 完全在本地硬件上运行,使用 Ollama 作为模型后端。无需 API 密钥,无需订阅,数据不会离开你的机器。配置完成后,Hermes 的工作方式与使用 OpenRouter 或 Anthropic 时完全一致——终端命令、文件编辑、网页浏览、任务委派——但模型在本地运行。

完成本指南后,你将拥有:

  • Ollama 运行一个或多个开源权重模型
  • Hermes 连接到 Ollama 作为自定义端点
  • 一个可编辑文件、运行命令和浏览网页的本地工作代理
  • 可选:一个完全由你自己的硬件驱动的 Telegram/Discord 机器人

所需条件

组件最低要求推荐配置
RAM8 GB(用于 3B 模型)32+ GB(用于 27B+ 模型)
Storage5 GB 可用空间30+ GB(用于多个模型)
CPU4 核8+ 核(AMD EPYC、Ryzen、Intel Xeon)
GPU非必需NVIDIA GPU,8+ GB VRAM 可显著加速

提示 —— 仅使用 CPU 也能工作,但响应会更慢

Ollama 可以在仅使用 CPU 的服务器上运行。在现代 8 核 CPU 上,9B 模型的速度约为 10 token/秒。在 CPU 上运行 31B 模型则更慢(约 2–5 token/秒)——每次响应需要 30–120 秒,但它能工作。GPU 能显著改善这一点。对于仅使用 CPU 的配置,通过环境变量延长 API 超时时间(这不是 config.yaml 的键):

bash
# ~/.hermes/.env
HERMES_API_TIMEOUT=1800   # 30 分钟——为较慢的本地模型留出充足时间

步骤 1:安装 Ollama

bash
curl -fsSL https://ollama.com/install.sh | sh

验证它是否正在运行:

bash
ollama --version
curl http://localhost:11434/api/tags   # 应返回 {"models":[]}

步骤 2:拉取模型

根据你的硬件选择:

模型磁盘占用所需内存工具调用适用场景
gemma4:31b~20 GB24+ GB最佳质量——强大的工具使用和推理能力
gemma2:27b~16 GB20+ GB对话任务,无工具使用
gemma2:9b~5 GB8+ GB快速聊天、问答——无法调用工具
llama3.2:3b~2 GB4+ GB轻量级快速问答

警告 —— 工具调用至关重要

Hermes 是一个代理型助手——它通过工具调用来编辑文件、运行命令和浏览网页。不支持工具调用的模型只能聊天,无法执行操作。要获得完整的 Hermes 体验,请使用支持工具的模型(如 gemma4:31b)。

拉取你选择的模型:

bash
ollama pull gemma4:31b

信息 —— 多模型

你可以拉取多个模型,并在 Hermes 内部通过 /model 切换它们。Ollama 会按需将活动模型加载到内存中,并自动卸载空闲模型。

验证模型是否正常工作:

bash
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 响应。

步骤 3:配置 Hermes

运行 Hermes 设置向导:

bash
hermes setup

当提示选择提供商时,选择自定义端点并输入:

  • Base URL: http://localhost:11434/v1
  • API Key: 留空或输入 no-key(Ollama 不需要)
  • Model: gemma4:31b(或你拉取的任何模型)

或者,直接编辑 ~/.hermes/config.yaml

yaml
model:
  default: "gemma4:31b"
  provider: "custom"
  base_url: "http://localhost:11434/v1"

步骤 4:开始使用 Hermes

bash
hermes

就是这样。你现在正在运行一个完全本地的代理。试试看:

text
You: 列出此目录中的所有 Python 文件,并统计每个文件的代码行数

You: 阅读 README.md 并总结这个项目的作用

You: 创建一个获取胡志明市天气的 Python 脚本

Hermes 将使用终端工具、文件操作和本地模型——无需调用云端 API。

步骤 5:为任务选择合适的模型

并非每个任务都需要最大的模型。以下是一份实用指南:

任务推荐模型原因
文件编辑、代码、终端命令gemma4:31b唯一具有可靠工具调用支持的模型
快速问答(无需工具使用)gemma2:9b对话任务响应速度快
轻量级聊天llama3.2:3b速度最快,但能力非常有限

注意

对于完整的代理工作(编辑文件、运行命令、浏览网页),gemma4:31b 目前是具有工具调用支持的最佳本地选项。查看 Ollama 的模型库 获取更新的模型——工具调用支持正在迅速扩展。

在会话中即时切换模型:

/model gemma2:9b

步骤 6:优化速度

增加 Ollama 的上下文窗口

默认情况下,Ollama 使用 2048 token 的上下文。Hermes 需要至少 64,000 token 才能进行带工具的代理工作:

bash
## 创建扩展上下文的 Modelfile
cat > /tmp/Modelfile << 'EOF'
FROM gemma4:31b
PARAMETER num_ctx 64000
EOF

ollama create gemma4-64k -f /tmp/Modelfile

然后更新你的 Hermes 配置,使用 gemma4-64k 作为模型名称。

保持模型加载状态

默认情况下,Ollama 在 5 分钟无活动后卸载模型。对于持久化的网关机器人,请保持其加载:

bash
## 将保活时间设为 24 小时
curl http://localhost:11434/api/generate \
  -d '{"model": "gemma4:31b", "keep_alive": "24h"}'

或者在 Ollama 的环境中全局设置:

bash
## /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_KEEP_ALIVE=24h"

使用 GPU 卸载(如果可用)

如果你有 NVIDIA GPU,Ollama 会自动将层卸载到 GPU 上。通过以下命令检查:

bash
ollama ps   # 显示已加载的模型及 GPU 层数

对于 12 GB GPU 上的 31B 模型,你将获得部分卸载(约 40 层在 GPU 上,其余在 CPU 上),这仍然能带来显著的速度提升。

步骤 7:作为网关机器人运行(可选)

一旦 Hermes 在 CLI 中本地运行正常,你可以将其暴露为 Telegram 或 Discord 机器人——仍然完全在你的硬件上运行。

Telegram

  1. 通过 @BotFather 创建机器人并获取 token
  2. 添加到你的 ~/.hermes/config.yaml
yaml
model:
  default: "gemma4:31b"
  provider: "custom"
  base_url: "http://localhost:11434/v1"

platforms:
  telegram:
    enabled: true
    token: "YOUR_TELEGRAM_BOT_TOKEN"
  1. 启动网关:
bash
hermes gateway

现在在 Telegram 上给你的机器人发消息——它会使用你的本地模型进行回复。

Discord

  1. discord.com/developers 创建 Discord 应用
  2. 添加到配置:
yaml
platforms:
  discord:
    enabled: true
    token: "YOUR_DISCORD_BOT_TOKEN"
  1. 启动:hermes gateway

步骤 8:设置回退(可选)

本地模型可能在复杂任务上表现吃力。设置一个仅在本地模型失败时激活的云回退:

yaml
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 没有运行。启动它:

bash
sudo systemctl start ollama
## 或
ollama serve

响应缓慢

  • 检查模型大小与内存: 如果你的模型需要的内存超过可用内存,它会交换到磁盘。使用更小的模型或增加内存。
  • 检查 ollama ps 如果没有 GPU 层被卸载,响应受 CPU 限制。对于仅使用 CPU 的服务器来说,这是正常的。
  • 减少上下文: 大型对话会减慢推理速度。定期使用 /compress,或在配置中设置更低的压缩阈值。

模型不遵循工具调用

较小的模型(3B、7B)有时会忽略工具调用指令,生成纯文本而非结构化的函数调用。解决方案:

  • 使用更大的模型 —— gemma4:31bgemma2:27b 处理工具调用的能力远强于 3B/7B 模型。
  • Hermes 具有自动修复功能 —— 它会检测格式错误的工具调用,并尝试自动修复。
  • 设置回退 —— 如果本地模型失败 3 次,Hermes 会回退到云提供商。

上下文窗口错误

Ollama 默认的上下文(2048 token)对于代理工作来说太小。参见步骤 6了解如何增加。

成本对比

以下是本地运行相比云 API 节省的费用,基于一次典型的编码会话(约 100K token 输入,约 20K token 输出):

提供商单次会话成本每月成本(每天使用)
Anthropic Claude Sonnet~$0.80~$24
OpenRouter (GPT-4o)~$0.60~$18
Ollama(本地)$0.00$0.00

你的唯一成本是电费——每次会话大约 $0.01–0.05,具体取决于硬件。

本地运行效果良好的任务

  • 文件编辑和代码生成 —— 9B+ 模型能很好地处理这些任务
  • 终端命令 —— Hermes 包装命令、运行并读取输出,不受模型影响
  • 网页浏览 —— 浏览器工具负责获取内容;模型只需解释结果
  • Cron 作业和定时任务 —— 与云端设置完全相同
  • 多平台网关 —— Telegram、Discord、Slack 都能与本地模型配合使用

云模型更擅长的任务

  • 非常复杂的多步推理 —— 70B+ 或 Claude Opus 等云模型明显更优
  • 长上下文窗口 —— 云模型提供 100K–1M token;本地运行时通常默认低于 Hermes 的 64K 最低要求,除非进行配置
  • 大型响应的速度 —— 对于长文本生成,云端推理比仅使用 CPU 的本地运行更快

最佳方案:日常使用本地模型,为困难任务设置云回退。



分享: