本机(N100)上跑着两个 AI:Hermes(赫梅斯,微信端) 和 大肥鱼(DSH,桌面 Web)。它们平时用的模型走 VPS 的 7863 网关或国内免费接口,直连就行。但要换成 Google Gemini、OpenAI 这类国外模型,国内直连不通,必须走代理。这篇把两种接法、各自代价、以及具体命令讲清楚。
先判断:要用的模型能不能直连
# 直连(国内多半超时)
curl -s -m8 -o /dev/null -w '%{http_code}\n' https://generativelanguage.googleapis.com/v1beta/models
# 走代理(有状态码就说明通)
curl -s -m15 -x socks5h://127.0.0.1:2057 -o /dev/null -w '%{http_code}\n' https://generativelanguage.googleapis.com/v1beta/models
关键限制:只能给「整个服务」加代理
Hermes 和 DSH 都没有「只让某个模型走代理」的选项。代理只能通过环境变量 HTTPS_PROXY / ALL_PROXY 给整个进程,一旦加上,该服务所有对外请求都会走代理。
所以本质上只有两条路:临时手动,或者常驻全局。
方式一:临时手动(推荐,偶尔用国外模型时)
不改任何服务配置,用的时候临时开:
export ALL_PROXY=socks5h://127.0.0.1:2057
export HTTPS_PROXY=http://127.0.0.1:2057
export HTTP_PROXY=http://127.0.0.1:2057
- 单次命令:直接前缀,例如
HTTPS_PROXY=socks5h://127.0.0.1:2057 curl https://api.openai.com/v1/models -H "Authorization: Bearer $KEY" - 注意:curl 的 socks 用
socks5h://,而大多数 http 客户端(python/requests、node)用http://指向同一个端口(2057)即可,代理软件会自己识别。 - 想临时让 Hermes 用:在带代理的 shell 里跑 Hermes CLI 会话,用完即弃;不要动常驻的网关服务。
- 大肥鱼同理:临时起一个带代理的
dsh进程试用,别当常驻。
方式二:常驻全局(服务要长期用国外模型才这么干)
Hermes 网关(systemd 用户服务)
用 drop-in 注入环境变量,不动主配置:
mkdir -p ~/.config/systemd/user/hermes-gateway.service.d
cat > ~/.config/systemd/user/hermes-gateway.service.d/proxy.conf <<'EOF'
[Service]
Environment=HTTPS_PROXY=http://127.0.0.1:2057
Environment=HTTP_PROXY=http://127.0.0.1:2057
Environment=ALL_PROXY=socks5h://127.0.0.1:2057
Environment=NO_PROXY=127.0.0.1,192.168.0.0/16,localhost
EOF
systemctl --user daemon-reload
systemctl --user restart hermes-gateway
NO_PROXY 一定带上,把本机/内网排除,别把访问本机服务的请求也绕出去。
大肥鱼(DSH)
它的环境变量在 ~/.config/dsh/free-models.env(正是 dsh-web.service 的 EnvironmentFile),追加:
HTTPS_PROXY=http://127.0.0.1:2057
HTTP_PROXY=http://127.0.0.1:2057
ALL_PROXY=socks5h://127.0.0.1:2057
NO_PROXY=127.0.0.1,192.168.0.0/16,localhost
然后重启:
systemctl --user restart dsh-web
为什么我不建议常驻
代理(nekoray 之类)是跑在桌面会话里的,一注销/重启就停。服务一旦依赖它:代理挂 → 两个 AI 一起没网。
而你平时用的模型大多走国内 7863 网关 / 国内免费接口,直连就够。为了个别国外模型把整套服务绑上代理,风险大于收益——除非你确实长期重度使用国外模型。
接入国外模型的具体步骤
Hermes(custom_providers)
~/.hermes/config.yaml 的 custom_providers 列表里加一段:
- name: GEMINI
base_url: https://generativelanguage.googleapis.com/v1beta/openai/
key_env: GEMINI_API_KEY
model: gemini-3-flash-preview
api_mode: chat_completions
models:
gemini-3-flash-preview: {}
key 写进 ~/.hermes/.env 的 GEMINI_API_KEY=...,重启网关后即可用 /model 切换。
大肥鱼(cordis.patch.yml)
~/.dsh/profiles/web/cordis.patch.yml 的 providers 下加:
gemini:
apiKeyEnv: GEMINI_API_KEY
api: openai-completions
baseURL: https://generativelanguage.googleapis.com/v1beta/openai/
models:
- id: gemini-3-flash-preview
name: "Gemini-3-Flash"
contextWindow: 1000000
maxTokens: 8192
key 加到 ~/.config/dsh/free-models.env 的 GEMINI_API_KEY=...,再 systemctl --user restart dsh-web。
常见国外模型的 OpenAI 兼容端点
| 服务 | base_url |
|---|---|
| Gemini | https://generativelanguage.googleapis.com/v1beta/openai/ |
| OpenAI | https://api.openai.com/v1 |
| Groq | https://api.groq.com/openai/v1 |
| OpenRouter | https://openrouter.ai/api/v1 |
实测记录(Gemini 免费层)
gemini-3-flash-preview稳定可用gemini-2.5-flash新用户已停用;gemini-3.8-flash、gemini-3.1-flash-lite常见503gemini-*-pro系列返回429(免费层没有 pro 额度)
小结
- 偶尔用国外模型 → 临时
export代理(方式一),别碰常驻服务 - 长期重度用 → 才考虑 drop-in 常驻(方式二),并接受「代理挂 = 全挂」
- 记牢两个细节:socks 用
socks5h://,http 客户端用http://指向同一端口;常驻时务必配NO_PROXY排除内网
