在本地使用 Ollama 運行 Hermes — 零 API 成本
問題所在
雲端大語言模型(LLM)API 按 Token 收費。一次高強度的編碼會話可能花費 5–20 美元。對於個人項目、學習或涉及隱私的工作來說,這筆費用會不斷累積——而且你還將每一次對話都發送給了第三方。
本指南解決的問題
你將設置完全在自有硬件上運行的 Hermes Agent,並使用 Ollama 作為模型後端。無需 API 密鑰,無需訂閱,數據不會離開你的機器。配置完成後,Hermes 的工作方式與使用 OpenRouter 或 Anthropic 時完全相同——終端命令、文件編輯、網頁瀏覽、任務委託——但模型是在本地運行的。
讀完本指南後,你將擁有:
- 由 Ollama 提供服務的一個或多個開源權重模型
- 連接到 Ollama 自定義端點的 Hermes
- 一個能夠編輯文件、運行命令和瀏覽網頁的可用本地代理
- 可選:一個完全由自有硬件驅動的 Telegram/Discord 機器人
所需條件
| 組件 | 最低配置 | 推薦配置 |
|---|---|---|
| 內存 (RAM) | 8 GB(適用於 3B 模型) | 32+ GB(適用於 27B+ 模型) |
| 存儲 | 5 GB 可用空間 | 30+ GB(適用於多個模型) |
| CPU | 4 核 | 8+ 核(AMD EPYC, Ryzen, Intel Xeon) |
| GPU | 非必需 | 配備 8+ GB 顯存的 NVIDIA GPU 可顯著加速 |
Ollama 可以在僅配備 CPU 的服務器上運行。在現代 8 核 CPU 上運行 9B 模型的速度約為 ~10 tokens/秒。在 CPU 上運行 31B 模型速度較慢(~2–5 tokens/秒)——每次響應需要 30–120 秒,但可以正常工作。GPU 可以大幅改善這一情況。對於僅使用 CPU 的環境,請通過環境變量增加 API 超時時間(這不是 config.yaml 中的配置鍵):
# ~/.hermes/.env
HERMES_API_TIMEOUT=1800 # 30 minutes — generous for slow local models
步驟 1:安裝 Ollama
curl -fsSL https://ollama.com/install.sh | sh
驗證其是否正在運行:
ollama --version
curl http://localhost:11434/api/tags # Should return {"models":[]}
步驟 2:拉取模型
根據你的硬件選擇模型:
| 模型 | 磁盤佔用大小 | 所需內存 | 工具調用支持 | 最佳用途 |
|---|---|---|---|---|
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 | 否 | 僅用於輕量級快速回答 |
Hermes 是一個代理型助手——它通過工具調用來編輯文件、運行命令和瀏覽網頁。不支持工具調用的模型只能進行聊天;它們無法執行操作。為了獲得完整的 Hermes 體驗,請使用支持工具的模型(如 gemma4:31b)。
拉取你選擇的模型:
ollama pull gemma4:31b
你可以拉取多個模型,並在 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 響應。
步驟 3:配置 Hermes
運行 Hermes 設置嚮導:
hermes setup
當提示選擇提供商時,選擇 Custom Endpoint(自定義端點) 並輸入:
- Base URL(基礎 URL):
http://localhost:11434/v1 - API Key(API 密鑰): 留空或輸入
no-key(Ollama 不需要密鑰) - Model(模型):
gemma4:31b(或你拉取的任何模型)
或者,直接編輯 ~/.hermes/config.yaml:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
步驟 4:開始使用 Hermes
hermes
就是這樣。你現在正在運行一個完全本地的代理。試一試:
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 City
Hermes 將使用終端工具、文件操作和你的本地模型——無需調用雲端服務。
步驟 5:為任務選擇合適的模型
並非每個任務都需要最大的模型。以下是一份實用指南:
| 任務 | 推薦模型 | 原因 |
|---|---|---|
| 文件編輯、代碼、終端命令 | gemma4:31b | 唯一具有可靠工具調用支持的模型 |
| 快速問答(無需工具使用) | gemma2:9b | 對話任務的響應速度快 |
| 輕量級聊天 | llama3.2:3b | 速度最快,但功能非常有限 |
對於完整的代理工作(編輯文件、運行命令、瀏覽網頁),gemma4:31b 目前是具有工具調用支持的最佳本地選項。查看 Ollama 的模型庫 以獲取更新模型——工具調用支持正在迅速擴展。
在會話期間隨時切換模型:
/model gemma2:9b
步驟 6:優化速度
增加 Ollama 的上下文窗口
默認情況下,Ollama 使用 2048 個 Token 的上下文。Hermes 在進行帶有工具的代理工作時至少需要 64,000 個 Token:
# Create a Modelfile that extends context
cat > /tmp/Modelfile << 'EOF'
FROM gemma4:31b
PARAMETER num_ctx 64000
EOF
ollama create gemma4-64k -f /tmp/Modelfile
然後更新你的 Hermes 配置,將模型名稱設置為 gemma4-64k。
保持模型加載狀態
默認情況下,Ollama 會在閒置 5 分鐘後卸載模型。對於持久的網關機器人,請保持其加載狀態:
# Set keep-alive to 24 hours
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 # Shows which model is loaded and how many GPU layers
對於在 12 GB GPU 上運行的 31B 模型,你將實現部分卸載(約 40 層在 GPU 上,其餘在 CPU 上),這仍然能帶來顯著的速度提升。
第 7 步:作為網關機器人運行(可選)
一旦 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
第 8 步:設置回退機制(可選)
本地模型在處理複雜任務時可能會遇到困難。設置一個雲回退機制,僅當本地模型失敗時才激活:
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
# or
ollama serve
響應緩慢
- 檢查模型大小與內存: 如果你的模型需要的內存超過可用內存,它會交換到磁盤。使用更小的模型或增加內存。
- 檢查
ollama ps: 如果沒有 GPU 層被卸載,響應將受限於 CPU。這對於僅 CPU 的服務器來說是正常的。 - 減少上下文: 大型對話會減慢推理速度。定期使用
/compress,或在配置中設置較低的壓縮閾值。
模型不遵循工具調用
較小的模型(3B、7B)有時會忽略工具調用指令,生成純文本而不是結構化的函數調用。解決方案:
- 使用更大的模型 —
gemma4:31b或gemma2:27b處理工具調用的效果遠好於 3B/7B 模型。 - Hermes 具有自動修復功能 — 它能檢測格式錯誤的工具調用並嘗試自動修復。
- 設置回退機制 — 如果本地模型失敗 3 次,Hermes 將回退到雲提供商。
上下文窗口錯誤
默認的 Ollama 上下文(2048 個 token)對於代理工作來說太小。請參閱 第 6 步 以增加它。
成本對比
以下是基於典型編碼會話(約 100K token 輸入,約 20K token 輸出)本地運行相比雲 API 所節省的費用:
| 提供商 | 每次會話成本 | 每月(每日使用) |
|---|---|---|
| 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 的本地推理更快
最佳策略:日常任務使用本地模型,為困難任務設置雲回退機制。