Featured image of post 给Hermes和大肥鱼接入代理并使用国外模型

给Hermes和大肥鱼接入代理并使用国外模型

本机两个 AI(Hermes、大肥鱼 DSH)怎么走代理访问 Gemini/OpenAI 等国外模型;临时手动 vs 常驻全局两种接法、具体命令、以及为什么不要轻易常驻

   
文章摘要
想用 Gemini/OpenAI 这类国外模型,国内直连不通,得走代理。但 Hermes 和大肥鱼都是常驻服务,代理只能整服务加、不能按模型单独加。这篇讲清两种接法的代价和具体命令。

本机(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
Geminihttps://generativelanguage.googleapis.com/v1beta/openai/
OpenAIhttps://api.openai.com/v1
Groqhttps://api.groq.com/openai/v1
OpenRouterhttps://openrouter.ai/api/v1

实测记录(Gemini 免费层)

  • gemini-3-flash-preview 稳定可用
  • gemini-2.5-flash 新用户已停用;gemini-3.8-flash、gemini-3.1-flash-lite 常见 503
  • gemini-*-pro 系列返回 429(免费层没有 pro 额度)

小结

  • 偶尔用国外模型 → 临时 export 代理(方式一),别碰常驻服务
  • 长期重度用 → 才考虑 drop-in 常驻(方式二),并接受「代理挂 = 全挂」
  • 记牢两个细节:socks 用 socks5h://,http 客户端用 http:// 指向同一端口;常驻时务必配 NO_PROXY 排除内网
晚来天欲雪,能饮一杯无