
1. 为什么要在内网把 Hermes-Agent 接到本地 Ollama如果你正在做企业内部工具、涉密文档处理或者单纯不想让对话内容离开自己的机器那 Hermes-Agent 默认走云端模型这条路就会很别扭。它开箱对接的是 OpenRouter、OpenAI 这类在线服务意味着两件事一是每次调用都要出网二是请求内容会经过第三方服务器。对于内网开发机、隔离网段、离线演示环境来说这基本等于不可用。Hermes-Agent 本身是一个偏 Agent 编排的框架它负责工具调用、任务拆解、多轮规划真正干“说话”这件事的是背后的 LLM Provider。Ollama 则是一个把大模型跑在本地的运行时一条命令拉模型、一个本地 HTTP 端口对外提供兼容接口。把这两者接起来就得到「本地 Agent 本地模型」的完全离线架构Agent 的规划逻辑在本地模型的推理也在本地整条链路不碰外网。这套组合适合谁我梳理了三类第一类是做内网办公助手的开发者数据不能出机房第二类是经常在没有稳定外网的环境里做演示的人比如展会、客户现场第三类是想省掉 API 调用成本、又愿意用本地算力换隐私的团队。需要提前说清楚的是离线运行对硬件有要求8B 级别的模型大概需要 8GB 以上内存才跑得比较顺70B 级别则要 32GB 甚至更多显存和内存要提前盘算。这篇内容我会按“先装 Ollama、再配 Hermes、然后验证、最后排障”的顺序走每一步都给可复制的命令和配置片段。中间会顺带提一下 TaoToken 在需要临时对照云端模型行为时的用法但主线始终是离线。你跟着做最后能在一个断网的终端里看到 Hermes 正常回复。2. 前置准备Ollama 服务地址与模型名怎么定在动 Hermes 之前先把 Ollama 这一侧跑通不然后面报错会分不清是谁的问题。Ollama 的安装脚本在 Linux、macOS、WSL2 上通用Windows 原生建议走 WSL2避免路径和端口上的麻烦。安装并启动服务# Linux / macOS / WSL2 通用安装 curl -fsSL https://ollama.com/install.sh | sh # 启动服务前台运行方便看日志 ollama serve # 想后台跑就加 ollama serve 启动后确认版本再拉一个轻量模型。llama3:8b 大约 4GB是离线场景里比较稳的起点ollama --version ollama pull llama3:8b拉完之后用一条 curl 确认本地接口是通的。Ollama 默认监听11434端口接口路径是/api/chatcurl http://localhost:11434/api/chat -d { model: llama3:8b, messages: [{role: user, content: ping}], stream: false }如果返回一段 JSON里面有message.content字段说明 Ollama 这一侧没问题。这里有两个关键值要记下来后面配 Hermes 会反复用到服务地址http://localhost:11434模型名llama3:8b。模型名必须和你ollama list里显示的完全一致大小写、tag 都不能错这是后面 404 类报错的高发点。关于模型选择我给一个按内存的对照方便你对号入座本地内存推荐模型说明8GBllama3:8b、qwen:7b-chat能跑响应偏慢适合轻量对话16GBllama3:8b-instruct、mistral:7b指令跟随更好Agent 调用更稳32GBllama3:70b-instruct、mixtral:8x7b质量接近云端但首次加载慢需要提醒的是Agent 场景对“指令跟随”要求比普通聊天高因为模型要按格式输出工具调用意图。所以优先选带-instruct或-chat后缀的版本纯 base 模型容易输出跑偏。如果你手边暂时没有合适的本地模型又想先验证 Hermes 的配置结构是否正确可以临时用 TaoToken 的模型对话页对照一下请求格式确认字段名没写错再切回本地。它的模型对话入口在 https://taotoken.net/api 不过离线场景下这一步只是辅助最终还是要回到 Ollama。3. 可复制配置Hermes-Agent 侧连接参数怎么写这一节是核心配置写对了后面基本就顺了。Hermes-Agent 的配置有两种方式CLI 向导和手动改配置文件。新手建议先用向导跑一遍理解字段含义后再手动微调。先激活 Hermes 的虚拟环境手动安装的用户并安装 ollama 的 Python 依赖source ~/.hermes/venv/bin/activate pip install ollama方式一CLI 向导。执行后按提示选 provider 为 ollama模型填你拉取的名称hermes model # 1. LLM Provider - 输入 ollama # 2. Model - 输入 llama3:8b # 3. 确认保存 - 输入 y方式二手动编辑~/.hermes/config.yaml。这是更可控的做法推荐你直接照抄下面这段把模型名换成自己的llm: provider: ollama model: llama3:8b ollama: base_url: http://localhost:11434 temperature: 0.7 max_tokens: 4096如果你更习惯 JSON 风格的配置或者你的 Hermes 版本读取的是settings.json等价写法如下字段名保持一致{ llm: { provider: ollama, model: llama3:8b, ollama: { base_url: http://localhost:11434, temperature: 0.7, max_tokens: 4096 } } }这里三个参数要重点说。base_url指向本地 Ollama离线场景下必须是localhost或127.0.0.1不要写成局域网 IP除非 Ollama 跑在另一台机器上。temperature控制随机性Agent 做工具调用时建议压到 0.3 到 0.5减少格式漂移纯聊天可以放到 0.7。max_tokens决定单次生成上限4096 对多数 Agent 任务够用设太大反而拖慢响应。改完配置后重启 Hermes 让配置生效hermes stop hermes如果你在配置里同时保留了云端 provider 的字段记得把 provider 明确改成 ollama否则 Hermes 可能仍按旧配置去连外网。这一点在混合环境里特别容易踩配置文件的优先级要自己确认一遍。4. 验证请求一次离线对话怎么确认全程不出网配置写完不代表成功必须做一次可观测的验证。我的做法是分两步先看 Hermes 能不能回再看网络有没有出。第一步在 Hermes 交互界面里发一条测试指令hermes # 进入交互后输入 你好我是内网用户测试本地 Ollama 对接如果正常返回中文回复说明链路通了。此时另开一个终端看 Ollama 日志能看到模型被调用的记录journalctl -u ollama -f # 或者前台启动时直接看 ollama serve 的输出第二步验证“不出网”。最直接的办法是在断网环境下重跑一次。你可以临时把网卡关掉或者用防火墙规则只放行本地回环然后重复上面的对话。如果还能正常回复就证明请求没有依赖外网。更严谨一点可以用ss观察 Hermes 进程的连接目标ss -tnp | grep hermes正常情况下你只会看到指向127.0.0.1:11434的连接不应该出现任何外部 IP。如果看到陌生的公网地址说明配置里还残留着云端 provider需要回去检查config.yaml。这里插一句如果你在验证阶段想对比一下同一个 prompt 在云端模型上的表现可以用 TaoToken 的模型对话页快速跑一次地址是 https://taotoken.net/api 但对比完记得把配置切回 ollama别让云端字段留在生产配置里。离线验证的判定标准只有一个断网后仍能回复。5. 常见报错排查401、连接失败、choices 读取异常离线对接的报错其实就那么几类我把高频的列出来对照着查基本能定位。第一类Could not connect to Ollama或connection refused。这几乎都是 Ollama 服务没起来或者base_url写错。先确认ollama serve在跑再确认端口是 11434最后确认配置里写的是http://localhost:11434而不是别的。注意不要写成https本地服务没有证书写 https 会直接握手失败。第二类401 Unauthorized或invalid api key。这个报错在离线场景里出现通常意味着 Hermes 还在按云端 provider 的逻辑发请求带上了鉴权头。检查config.yaml里 provider 是不是真的改成了 ollama有没有旧的api_key字段残留。Ollama 本地接口不需要 key任何鉴权字段都应该清掉。第三类reading choices或choices field not found。这是响应解析失败根因多半是模型名对不上Ollama 返回了错误 JSONHermes 却按正常结构去读choices。解决办法是ollama list看真实模型名逐字符核对配置里的model字段。另外部分 Hermes 版本对 Ollama 的响应格式适配不完整如果确认模型名没错还报这个升级 Hermes 到较新版本。第四类local proxy failed或代理相关报错。这说明环境变量里配了 HTTP 代理Hermes 把本地请求也走了代理结果代理连不上本地回环。检查http_proxy、https_proxy环境变量把localhost和127.0.0.1加进no_proxyexport no_proxylocalhost,127.0.0.1第五类OAuth 相关报错。如果你之前用云端 provider 登录过Hermes 可能缓存了 OAuth token切到 ollama 后仍在尝试刷新。清掉缓存目录里的凭据文件或者重新执行一次hermes model走完整向导覆盖旧配置。第六类回复乱码或逻辑混乱。这不是连接问题是模型问题。换成-instruct版本把temperature降到 0.5 以下必要时重新ollama pull一次排除模型文件损坏。排查时有个通用思路先 curl 直连 Ollama 确认服务本身正常再看 Hermes 日志确认它发到哪、收到什么。把这两段对齐问题基本就浮出来了。6. 需要云端对照或长期跑 Agent 时的接入选择离线跑通之后有些场景你还是会需要云端模型比如本地算力不够跑大参数模型或者要做多轮复杂 Agent 任务、本地模型规划能力跟不上。这时候可以把 TaoToken 作为对照和补充接进来它的接口是 OpenAI 兼容格式配置结构和上面几乎一样只是把base_url和model换掉。如果你要长期跑编码类 Agent或者需要更稳定的工具调用能力可以看下 Coding Plan入口在 https://taotoken.net/api 。配置时同样要写全三件套Base URL、API Key、Model ID缺一个都会报鉴权或模型找不到。API Key 在控制台生成地址是 https://taotoken.net/api-keys 接入文档在 https://taotoken.net/doc 里面有各语言的请求示例照着改字段就行。需要强调的是云端和本地是两套独立配置别混在同一个 provider 块里。我的做法是给本地和云端各留一份配置文件用的时候切换避免离线环境里误连外网。对于内网部署最终交付的配置里只保留 ollama 这一段云端字段全部移除这样即使环境变量被污染也不会意外出网。最后给一个实用技巧把 Ollama 的模型缓存目录挂到空间大的盘上默认路径在~/.ollama/models模型多了很占地方。迁移后记得改OLLAMA_MODELS环境变量再重启服务。这样你换模型、试新版本时不会把系统盘撑爆。