OpenClaw 本地聊天页打不开怎么办?Safari 无法连接 127.0.0.1:18789 详细排错教程
这篇文章属于 OpenClaw 本地排错实战篇
如果你已经装好了 OpenClaw,但本地控制台打不开、Safari 一直提示无法连接服务器,或者聊天页能开却发消息失败,这篇就可以直接照着做。
这篇不是泛泛而谈的“可能原因合集”,而是按一次真实排错路径整理出来的实操版教程。目标只有一个:让你把本地聊天页真正跑通。
先说结论:你看到这个报错,通常不是 Safari 坏了
很多人看到下面这个页面,第一反应是:
- 是不是 Safari 有问题
- 是不是本机网络坏了
- 是不是 OpenClaw 没装好
其实更常见的真实情况是:
- OpenClaw 的 Gateway 根本没起来
gateway.mode没配置,服务被拦住了- 你打开的是裸地址,没有带
#token - 页面虽然能打开,但聊天会话被错误模型覆盖卡住了
如果你现在遇到的也是这个界面,先别急着重装。按下面顺序查,通常会比“删掉重来”快得多。
先判断:你到底卡在哪一层
先把问题分成两类。
第一类:浏览器页面直接打不开
典型表现:
- Safari 提示无法连接服务器
127.0.0.1:18789完全打不开- Control UI 根本没显示出来
这类问题通常优先看:
- Gateway 有没有启动
gateway.mode是不是local- 端口
18789有没有真的在监听
第二类:页面能打开,但聊天发送失败
典型表现:
- 首页能进
- 聊天页也能开
- 但一发消息就报模型错误
- 或者一直没有正常回复
这类问题通常优先看:
- 默认模型是不是配对了
- 会话有没有残留错误的
providerOverride/modelOverride - API Key 有没有给到 Gateway 守护进程
所以你不要一上来就把“网页打不开”和“模型发不出去”混在一起看。
第 1 步:先跑三条命令,别靠猜
先在终端里执行:
1 | openclaw doctor |
你主要看 3 个结果:
doctor有没有提示gateway.mode is unsetgateway status里Runtime是不是正常- 默认模型到底是什么
如果这里已经出现类似:
1 | Gateway start blocked: set gateway.mode=local (current: unset) |
那就说明你的问题不是 Safari,而是 Gateway 被配置拦住了。
第 2 步:如果 gateway.mode 没设,先把本地模式补上
这是最常见、也最容易被忽略的一步。
直接执行:
1 | openclaw config set gateway.mode local |
然后再检查:
1 | openclaw gateway status |
理想状态下你应该看到类似:
1 | Runtime: running |
这里有一个很容易误判的点:
Runtime: running不代表一切正常- 但如果连
Listening: 127.0.0.1:18789都没有,那网页基本不可能打开
所以别只看 running 两个字。
第 3 步:不要手打裸地址,要用带 token 的 Dashboard URL
很多人把这一步忽略了,结果明明服务已经起来,还是觉得页面“不对劲”。
正确做法是执行:
1 | openclaw dashboard --no-open |
它会打印一个完整地址,格式大概像这样:
1 | http://127.0.0.1:18789/#token=你的token |
请直接打开这条完整地址,而不是自己手敲:
1 | http://127.0.0.1:18789 |
因为很多时候你需要的是:
- 正确端口
- 正确页面入口
- 正确 token
如果你直接用没有 #token 的裸地址,页面可能能打开,也可能后续连接状态不完整,结果你又会误以为是别的问题。
第 4 步:如果页面能开,但聊天发不出去,先检查模型链路
这一步是很多人第一次本地跑通后,第二个最常见的坑。
你需要重点确认两件事:
1. 默认模型是不是官方支持的 provider/model
例如你想用 DeepSeek,优先用 OpenClaw 官方支持的:
1 | openclaw models set deepseek/deepseek-chat |
而不是随手自己写一个长得差不多的自定义 provider 名字。
有些自定义 provider 表面上看也能显示在列表里,但真正发请求时可能会返回:
404 status code- 请求路径不兼容
- fallback 看起来切换了,实际还是发不出去
2. API Key 有没有给到守护进程
如果你的 Gateway 是 daemon 方式运行,最稳的做法是把 Key 写进:
1 | ~/.openclaw/.env |
例如:
1 | DEEPSEEK_API_KEY=你的DeepSeekKey |
然后重启 Gateway:
1 | openclaw gateway restart |
这样 OpenClaw 的本地守护进程能真正读到模型认证信息,而不是只在你当前终端临时可见。
第 5 步:如果聊天会话被旧配置卡住,清掉会话级模型覆盖
有一种情况特别容易把人绕晕:
- 你已经把默认模型改对了
- API Key 也补了
- 但聊天页还是继续走旧模型
这通常说明问题不在“默认模型”,而在“当前会话的覆盖配置”。
OpenClaw 的会话信息通常在这个文件里:
1 | ~/.openclaw/agents/main/sessions/sessions.json |
先停服务:
1 | openclaw gateway stop |
然后备份一下:
1 | cp ~/.openclaw/agents/main/sessions/sessions.json ~/.openclaw/agents/main/sessions/sessions.json.bak |
打开 sessions.json 后,找到类似:
1 | "agent:main:main": { |
如果这里还残留着错误的 provider 或 model,就把这些字段删掉。常见要清理的字段有:
providerOverridemodelOverridefallbackNoticeSelectedModelfallbackNoticeActiveModelfallbackNoticeReason
然后重新启动:
1 | openclaw gateway start |
这一步的本质是:把“当前会话被锁死在旧模型里”的状态释放掉,让它重新继承你新的默认模型。
第 6 步:一套最短修复流程,照着走就行
如果你只想要最短版本,按下面这一套做:
1 | openclaw doctor |
如果页面能打开但聊天还失败,再补:
1 | openclaw gateway stop |
这是目前本地单机环境里最稳的一条路线。
最后怎么验证自己真的修好了
修完后,不要只看“页面好像能打开了”,最好做 4 个确认。
1. 看 Gateway 状态
1 | openclaw gateway status |
你至少要确认:
Runtime: runningListening: 127.0.0.1:18789
2. 看默认模型
1 | openclaw models status --plain |
如果你走的是 DeepSeek,本地排错时最稳的是看到:
1 | deepseek/deepseek-chat |
3. 用完整 Dashboard URL 打开
1 | openclaw dashboard --no-open |
复制它打印出来的完整链接,不要继续用旧标签页。
4. 再试一次主聊天页
如果你要直接进主会话,建议先从带 token 的 Dashboard 入口进去,再切到聊天页,而不是自己硬拼 URL。
你最容易踩的 3 个误区
误区 1:网页打不开,就一定是浏览器问题
错。
绝大多数时候是本地 Gateway 没起来,或者配置被拦住了。
误区 2:默认模型改了,当前会话就会自动跟着变
也不一定。
如果会话里残留了 providerOverride / modelOverride,它会继续优先走旧配置。
误区 3:我自己写了一个自定义 provider,名字差不多就能用
不一定。
表面上“能显示”不代表真正请求路径兼容。第一次本地排错,优先用 OpenClaw 官方已经支持的 provider 名称和模型引用格式,变量会少很多。
这篇教程适合谁
如果你现在正好属于下面这几种情况,这篇会特别有用:
- 你是第一次在 Mac 上装 OpenClaw
- 你已经装好了 CLI,但 Safari 打不开本地控制台
- 你能进页面,但聊天消息发不出去
- 你已经改过模型配置,现在怀疑是旧会话残留导致的
如果你后面还想继续往下做,我建议下一篇直接接:
- 如何正确配置 DeepSeek / OpenAI / Anthropic 到 OpenClaw
- 如何清理旧配置,避免“越修越乱”
- 如何把本地 Control UI 跑通后,再接 Telegram / WhatsApp / Discord
官方文档入口
如果你想对照官方说明,可以继续看这些页面:
如果你愿意,我下一步还可以继续帮你把这篇教程再升级一版:
- 补 3 到 5 张步骤截图
- 顺手加一篇“Windows 版对应排错教程”
- 再帮你把这篇文章放进 OpenClaw 专题页导航里
