让 Ollama 走 SSH,配上真正的智能体循环
每篇「Ollama over SSH」教程都止步于端口转发。那是最容易的部分。 有意思的是让隧道对接一个真的能在远程执行工具调用的智能体。
标准配方(回顾)
你家里有台跑着 Ollama 的强力机器,想在笔记本上用它。经典端口转发:
ssh -L 11434:localhost:11434 you@homebox
现在笔记本上的 localhost:11434 通向服务器上的 Ollama,
任何 OpenAI 兼容客户端都能用。大多数教程到这里就结束了。
配方缺了什么
如果你是拿它写代码,光聊天不够 —— 你需要工具调用。模型应该能:
- 执行 shell 命令并读取 stdout。
- 读写文件。
- 在目录里 grep。
- 抓取网页并总结。
而关键在于,这些工具调用应该发生在远程那台机器上 —— 代码所在的地方 —— 而不是你的笔记本。单纯的端口转发只搬运了推理流量。
能跑通完整循环的搭法
两个选项,取决于你想让界面在哪边。
方案 A:Tron 跑在远程,浏览器打开
最简单。把 Tron 装在跑 Ollama 的那台机器上。Tron 的智能体循环调用
localhost:11434 的 Ollama,工具调用也在同一台机器上执行。
你从笔记本打开 http://homebox:3888(或者 Tailscale 地址、
Cloudflare 隧道)。
# 在服务器上
git clone https://github.com/Shadowhusky/Tron.git
cd Tron
npm install
npm run build:web
npm run start:web
Settings > AI 里:提供商选 Ollama,base URL
http://localhost:11434,模型 qwen2.5-coder:7b
(或你拉取的任何模型)。智能体就跑起来了。shell、文件、网页搜索 ——
全在服务器上。
方案 B:Tron 跑在本地,通过 SSH 适配器连远程
把 Tron 装在笔记本上,给服务器加一个 SSH 配置。开启会话时 Tron
打开一个 SSH shell —— 关键是,它的文件操作和 execute_command
工具会自动降级为通过同一个 SSH 会话执行的 shell 命令。
所以智能体的工具调用仍然落在远程机器上。
模型这边,把 Ollama 端口转发过来,Tron 指向 localhost:11434:
ssh -L 11434:localhost:11434 you@homebox
推理快(到达服务器后走本地回环),工具在 SSH 的主机上执行。 两条隧道,同一个会话。
慢链路下选哪个模型做工具调用
实际跑下来的几点经验:
qwen2.5-coder:7b—— 敢用于工具调用循环的最小模型。选工具基本靠谱,偶尔跑偏。qwen2.5-coder:14b / 32b—— 多步调试明显更强。有显存就值得。llama3.1:8b——「跑这条命令然后解释输出」没问题,但决定下一步跑什么偏弱。- 避开没有结构化工具训练的模型。它们会产出「看起来像计划的文本」而不是真正的工具调用,智能体会卡住。
延迟的现实
如果 Ollama 在家用宽带的上行后面,每次工具调用的首 token 延迟大约 1–3 秒。 Tron 的自动压缩(上下文到 90% 时总结旧的工具输出)能让往返保持轻量。 把 Ollama 放到和开发服务器同区域、或者干脆同一台机器,差别很大。
为什么不直接用云端?
常规理由都成立:提示词和代码不离开你的硬件、没有速率限制、没有按 token 计费、离线可用。还有个不那么明显的:当智能体的工具调用和模型在同一台机器上时, 它的每一个动作都省掉了走你家上行的往返。瓶颈变成 GPU 吞吐,而不是你的运营商。
跑一遍这个循环
装上,指向 Ollama,看它执行。