OneClaw 如何设置代理:从 proxy 配置报错到端口 17890 的完整排查实践

前言

很多人在使用 OneClaw 或 OpenClaw 时,都会遇到一个看似简单、实际容易绕路的问题:

为什么模型连不上网络?
为什么配置了代理却无效?
为什么会出现 Unrecognized key: "proxy" 报错?
OneClaw 到底应该在哪里设置代理?

如果你正在使用 OneClaw,同时依赖本地代理工具(例如可可加速),又希望模型请求稳定访问 API,那么本文会基于一次真实配置排查过程,把整个问题讲清楚。

本文不讨论复杂网络原理,而是从实际使用角度出发,用一种尽可能容易理解的方式解释:

  • OneClaw 为什么不能直接写 proxy
  • 为什么系统代理和环境变量更有效
  • 端口应该如何填写
  • 为什么改了配置却没生效
  • 使用 17890 端口时应该如何正确设置

全文基于实际配置内容整理,不扩展额外技术背景,重点是帮助你快速定位问题并真正解决。


先看问题:为什么代理设置会失败?

一个典型场景如下:

用户在 OneClaw 配置文件中加入:

{
  "proxy": {
    "enabled": true,
    "proxyUrl": "http://127.0.0.1:17890"
  }
}

随后日志出现:

[reload] config reload skipped (invalid config):
Unrecognized key: "proxy"

这意味着:

当前版本的 OneClaw/OpenClaw 配置结构并不识别 proxy 字段。

换句话说:

不是你写错了,而是程序本身不接受这个配置项。

这是许多人第一次设置代理时最容易踩的坑。

很多人会继续:

  • 修改 JSON 格式
  • 调整字段顺序
  • 重启程序
  • 复制其他人的配置

但问题不会消失,因为根本原因不是语法错误,而是:

配置 schema 不支持这个键。

所以排查方向需要立即改变。


理解 OneClaw 的网络路径

先看一个实际配置片段:

"gateway": {
  "mode": "local"
}

这里的重点是:

"mode": "local"

这意味着:

OneClaw 运行在本地 Gateway 模式。

因此:

  • 模型请求不是通过某个单独代理模块出去
  • 实际联网行为依赖本机环境
  • 网络请求更容易受系统代理影响

这也是为什么:

proxy 配置没效果,但系统代理却能立即生效。


为什么推荐使用系统代理?

如果你使用的是本地代理工具,例如可可加速,那么最容易成功的方法通常是:

直接让系统接管代理。

而不是在 OneClaw 内部寻找“代理设置入口”。

原因很简单:

OneClaw 的运行方式决定了:

它通常更容易继承操作系统网络环境。

所以:

如果系统已经可以科学上网,那么 OneClaw 通常也能。

实际操作通常是:

  1. 打开代理工具
  2. 开启系统代理
  3. 或开启 TUN 模式
  4. 重启 OneClaw

注意:

重启非常重要。

因为很多应用只会在启动时读取网络环境。

如果只是关闭窗口而没有真正退出:

代理可能不会刷新。


为什么环境变量常常比配置文件更有效?

在这次排查中,一个关键发现是:

OneClaw 不识别 proxy 配置。

所以代理需要放到系统环境层。

最直接的方法:

设置环境变量。

环境变量可以理解为:

提前告诉程序:

“如果你要联网,请先走这里。”

对于本地代理工具来说,本机地址通常写成:

127.0.0.1

意思是:

当前这台电脑自己。

而端口则代表:

代理服务监听的位置。


端口从 7897 改成 17890 后,应该如何调整?

在实际排查中,代理端口后来被改成:

17890

这意味着:

之前所有:

7897

都需要同步修改。

否则:

程序仍然会尝试连接旧端口。

结果通常就是:

  • 网络超时
  • 模型无响应
  • 请求失败

使用端口 17890 的正确代理写法

如果你的代理监听地址是:

127.0.0.1:17890

那么 HTTP/HTTPS 代理应写成:

http://127.0.0.1:17890

而 SOCKS 代理通常写成:

socks5://127.0.0.1:17890

需要注意的是:

地址和协议不要混用。

例如:

错误写法:

http://127.0.0.1:17890

却被当成 SOCKS 使用。

或者:

socks5://127.0.0.1:17890

却被当成 HTTP 使用。

这会导致:

明明端口正确,但代理仍然失败。


macOS 用户如何设置代理?

如果你是 macOS 用户,推荐方式是:

使用系统环境变量。

可以执行:

launchctl setenv HTTP_PROXY http://127.0.0.1:17890
launchctl setenv HTTPS_PROXY http://127.0.0.1:17890
launchctl setenv ALL_PROXY socks5://127.0.0.1:17890

设置完成后:

不要直接最小化 OneClaw。

正确步骤是:

  1. 完全退出程序
  2. 再重新打开

这样程序才能重新读取代理配置。


Windows 用户如何设置?

如果你使用 Windows,可以通过 PowerShell:

setx HTTP_PROXY http://127.0.0.1:17890
setx HTTPS_PROXY http://127.0.0.1:17890
setx ALL_PROXY socks5://127.0.0.1:17890

执行完成后:

建议:

重启 OneClaw。

必要时重新登录系统。

因为某些环境变量需要刷新。


为什么重启之后还是不生效?

这是很多用户第二个常见问题。

通常原因只有几类。

1. OneClaw 没有真正退出

很多桌面程序:

关闭窗口 ≠ 退出程序。

你以为已经关闭:

实际上后台还在运行。

所以:

它依旧在使用旧配置。

正确方法:

完全退出。

而不是点关闭按钮。


2. 代理客户端没开启系统代理

如果你使用的是可可加速:

需要确认:

  • 系统代理已开启
  • 或 TUN 模式已开启

否则:

即使环境变量正确:

请求依然可能直连。

最终表现就是:

配置看起来都对,但网络还是失败。


3. 端口没有同步修改

这是非常常见的问题。

例如:

之前配置:

7897

后来代理软件改成:

17890

但环境变量仍然是:

7897

结果:

程序仍然访问旧地址。

自然无法联网。


如何判断代理是否真的生效?

一种简单方式是:

查看程序是否恢复联网。

如果之前模型:

  • 一直超时
  • 无法返回结果
  • API 请求失败

而设置代理后恢复正常:

通常说明已经成功。

另一种思路:

检查当前代理地址是否正确:

127.0.0.1:17890

确认:

本地代理客户端确实监听这个端口。

否则:

程序会连接一个不存在的服务。


为什么不建议继续尝试 proxy 配置?

因为已经出现:

Unrecognized key: "proxy"

这说明:

当前版本根本不支持。

继续修改:

例如:

"proxyUrl"

或者:

"network"

本质上是在猜测配置结构。

成功率很低。

而且容易造成:

配置反复失效。

更稳妥的做法是:

回到系统层解决。


常见问题 FAQ

OneClaw 支持在 JSON 配置里写代理吗?

当前排查结果显示:

当前版本不识别 proxy 字段。

因此直接写:

"proxy": {}

会导致:

Unrecognized key: "proxy"

为什么我的代理设置了还是超时?

优先检查:

  1. 是否真正退出并重启 OneClaw
  2. 是否开启系统代理
  3. 代理客户端是否运行正常
  4. 端口是否还是旧值
  5. 是否填写成:
127.0.0.1:17890

端口 17890 应该填在哪里?

取决于你如何设置。

如果是环境变量:

需要写:

http://127.0.0.1:17890

或者:

socks5://127.0.0.1:17890

为什么之前是 7897,现在变成 17890?

因为代理客户端监听端口发生变化。

这意味着:

所有旧端口都必须同步更新。

否则 OneClaw 会继续访问旧地址。


为什么关闭窗口后设置没变化?

因为:

应用可能还在后台运行。

正确方法:

完全退出再重启。


最后的建议

当 OneClaw 无法联网时,优先排查顺序建议如下:

  1. 确认代理工具正常运行
  2. 确认监听端口
  3. 确认是否开启系统代理
  4. 使用环境变量
  5. 彻底退出 OneClaw 后重启
  6. 不要继续尝试不被识别的 proxy 配置

尤其当你已经看到:

Unrecognized key: "proxy"

时,方向应该立即调整。

因为这已经明确说明:

当前配置结构不支持这种写法。

与其不断修改 JSON:

不如直接从系统代理和环境变量入手。

通常更快,也更稳定。