能力
Hermes Agent 接入 Ollama
用本地 Ollama 跑大模型,让 Hermes 不依赖云端 API。完全离线、数据不出机器、按月电费付钱。本文讲怎么让 Docker 里的 Hermes 连到主机上的 Ollama(host.docker.internal、Linux 的 --add-host)、推荐的模型选型、长上下文配置,以及常见的“连不上”问题。
什么时候应该用 Ollama
- 数据敏感,不能让对话内容离开本地(医疗、法律、金融、政府)
- 已经有显卡(RTX 3090 / 4090 / Apple M3 Pro+)想物尽其用
- 高频对话场景,云端 token 费扛不住
- 想在断网环境(局域网、车间)跑 AI 助手
- 想测试开源模型:DeepSeek R1、Qwen 2.5、Llama 3.3 等
什么时候别用 Ollama
- 没显卡且只有 16GB 内存 —— CPU 跑 70B 模型会非常慢(<1 token/s),质量差也比 GPT-4 差很多
- 需要顶级模型质量(GPT-5 / Claude Sonnet 4.6) —— 开源模型整体差一档
- 多用户高 QPS —— 一张 GPU 同时只能一个推理,要并发就需要多卡或 vLLM
第一步:装 Ollama 并跑一个模型
# macOS / Linux 一键装
curl -fsSL https://ollama.com/install.sh | sh
# 启动 Ollama 服务(macOS 装好会自动启动)
ollama serve
# 下载 + 跑一个推荐模型
ollama pull qwen2.5:14b # 中文场景推荐
ollama pull llama3.3:70b # 英文 + 通用,需要 48GB+ 显存
ollama pull deepseek-r1:32b # 推理任务强,70B 版要 48GB
# 测试一下
ollama run qwen2.5:14b "你好,介绍下你自己"Ollama 默认监听 localhost:11434。这是 Hermes 要连的地址。
第二步:让 Docker 里的 Hermes 连到主机 Ollama
Hermes 通常跑在 Docker 容器里,Ollama 跑在主机上。容器要访问主机的 :11434 有几种方式:
macOS / Windows(最简单)
Docker Desktop 自动提供一个特殊 DNS:host.docker.internal,从容器里访问相当于主机的 localhost:
docker run -d \
-p 8642:8642 \
ghcr.io/nousresearch/hermes-agent:latesthermes.json 里的 baseUrl 用 http://host.docker.internal:11434。
Linux(需要手动加)
Linux 的 Docker 默认没有 host.docker.internal。两种办法:
# 办法 1:启动时加 --add-host
docker run -d \
--add-host host.docker.internal:host-gateway \
-p 8642:8642 \
ghcr.io/nousresearch/hermes-agent:latest
# 办法 2:让 Ollama 监听所有接口,用 docker0 网桥 IP
# /etc/systemd/system/ollama.service 里加:
# Environment="OLLAMA_HOST=0.0.0.0"
# systemctl restart ollama
# 然后 hermes baseUrl 用主机 IP 或 docker0 的 IP(通常 172.17.0.1)第三步:hermes.json 配置
{
"models": {
"primary": "ollama/qwen2.5:14b",
"providers": {
"ollama": {
"baseUrl": "http://host.docker.internal:11434"
}
}
}
}primary 是 ollama/<模型 tag> 格式,模型 tag 跟 ollama list 看到的完全一致。
模型选型:中文场景
| 模型 | 显存需求 | 中文质量 | 推荐场景 |
|---|---|---|---|
| qwen2.5:7b | ~5GB | 中 | 消费级显卡入门 |
| qwen2.5:14b | ~10GB | 好 | RTX 3090 / 4070 Ti 推荐 |
| qwen2.5:32b | ~20GB | 很好 | RTX 4090 / 双卡 |
| qwen2.5:72b | ~45GB | 接近 GPT-4 | A100 / H100 / 双 4090 |
| deepseek-r1:32b | ~20GB | 很好(推理) | 数学 / 代码任务 |
长上下文配置
Ollama 默认上下文长度只有 2048 tokens,对长对话或者大文件分析根本不够。在 hermes 配置里强制开长 context:
"providers": {
"ollama": {
"baseUrl": "http://host.docker.internal:11434",
"options": {
"num_ctx": 32768
}
}
}注意:上下文越长,显存占用越多。32k context 对 14B 模型大约多吃 4-6GB 显存。设之前先看 nvidia-smi 还有多少余量。
性能调优
- 用量化版本(
qwen2.5:14b-q4_0)显存减半但质量损失轻微 - 关掉 mlock 让模型按需 swap:
OLLAMA_KEEP_ALIVE=0 - 多 GPU:
OLLAMA_NUM_PARALLEL=4让单实例能并发,但每个并发都要分一份显存 - 批量推理用 vLLM 替代 Ollama —— Ollama 是单查询优化的,vLLM 是高并发优化的
验证连接
# 在 Hermes 容器里执行
docker exec hermes curl -s http://host.docker.internal:11434/api/tags
# 应该返回你装的所有模型 JSON
# 报 connection refused 就是网络不通;空响应就是 Ollama 没启动常见报错
connection refused
- Ollama 没启动 ——
ollama serve或者 macOS 上点开 Ollama.app - Linux Docker 没加
--add-host host.docker.internal:host-gateway - Linux 上 Ollama 只监听 127.0.0.1 ——
OLLAMA_HOST=0.0.0.0 ollama serve - 防火墙挡了 11434 ——
ufw allow from 172.17.0.0/16 to any port 11434
model not found
hermes.json 里写的 model tag 在 ollama list 里不存在。复制粘贴时要完整带 tag:qwen2.5:14b 不是 qwen2.5。
响应慢得不正常(<1 token/s)
- 没用 GPU,是 CPU 在算 ——
nvidia-smi或者 Activity Monitor 看 GPU 利用率 - 模型太大,开始 swap 到磁盘了 —— 换小一档的模型
- num_ctx 设太大 —— 32k 比 2k 慢很多
OOM 显存不够
- 关掉 GPU 上其他占用程序(浏览器、其他 LLM)
- 用量化版本(
:q4_0、:q5_K_M) - 降 num_ctx
- 实在不行就换更小的模型
混合策略:Ollama + 云端 fallback
生产场景常见组合:日常用本地 Ollama 省钱,处理复杂任务时切到 GPT-5 / Claude Sonnet:
{
"models": {
"primary": "ollama/qwen2.5:14b",
"agents": {
"code": "openai/gpt-5",
"memory": "ollama/qwen2.5:7b"
}
}
}memory agent 用更小的本地模型(高频但任务简单),主对话用本地,code agent 切云端(任务复杂)。
托管版:OpenClaw Launch
托管版本身不跑 Ollama(OpenClaw 服务器没显卡),但你可以在 Dashboard 把 Ollama 配成 BYOK provider,baseUrl 指向你自己的内网或 ngrok 隧道暴露的 Ollama 实例。这样“界面在云端 + 模型在本地”。 OpenClaw Launch 首月 $3,之后 $6/月。