OpenClaw 里「Qwen 像失效了」:现象、根因与百炼 DashScope 根治方案

摘要:飞书里机器人「已在线」却回复 504、或 openclaw status 一片绿灯仍无对话,往往不是 OpenClaw 挂了,而是模型鉴权链路在「过期 token + 刷新失败」或「产品与文档不一致」上踩坑。本文把一次真实排障抽象成可复用的原理与配置示例,并给出阿里云百炼(DashScope)API Key 的稳定接入方式。
关键词:OpenClaw、飞书、通义千问、Qwen Portal、OAuth、DashScope、百炼、504、个人 AI 助手

适合读者:熟悉终端与 JSON 的 IT 开发者、对「本地 AI 网关 + IM 机器人」感兴趣的爱好者。
阅读时间:约 12 分钟。


一、先把「症状」说清楚:什么叫 Qwen「失效」

在 OpenClaw + 飞书场景里,用户体感上的「失效」通常分三类:

体感 典型表现 容易误判为
A. 完全静默 飞书发消息无任何回复 飞书没连上、OpenClaw 没启动
B. 有错误回执 机器人回一大段 HTML,含 504 Gateway Time-outOAuth token refresh failed 模型「坏了」、飞书回调关了
C. 偶发/间歇 有时正常,有时 504 网络抖动(部分成立)

真实案例里,A 与 B 可能同时出现:Gateway 与飞书频道显示正常,但一旦走到调用大模型,链路在鉴权或上游网关处失败。

(现象):飞书与 openClaw 机器人的对话截图——用户提问后,机器人返回带 ⚠️ Agent failed before reply504alibaba-ga 字样的长文本。(读者可自行打码敏感信息。)
在这里插入图片描述


二、OpenClaw 在本地到底做了什么(30 秒架构)

可以把 OpenClaw 理解成:本机常驻的「AI 网关」

OpenClaw Gateway

消息渠道

大模型

Qwen Portal
OAuth

DashScope
API Key

飞书 WebSocket

路由 / 会话

安全策略
白名单等

  • 飞书:长连接把消息推到本机 Gateway。
  • Gateway:解析会话、应用 dmPolicy / allowFrom 等策略,再调用配置的 Provider 发补全请求。
  • 模型:对 OpenClaw 来说,多数是 OpenAI 兼容 HTTP APIopenai-completions 一类),区别只在 Base URL + 鉴权方式

AI 元素小记:这里本质是「多 Agent 编排 + 工具调用」的壳,大模型只是其中一个 HTTP 后端;渠道健康 ≠ 模型可用


三、根因深度:为什么「status 全绿」仍可能调不动 Qwen

3.1 两个「都叫 Qwen」、但不是同一条路

很多同学习惯把「通义千问」当成一个整体,但在工程接入上,至少常见两条路径:

维度 Qwen Portal(chat/portal 体系) 阿里云百炼 DashScope(Model Studio)
典型 Base URL https://portal.qwen.ai/v1 https://dashscope.aliyuncs.com/compatible-mode/v1
配置里 apiKey 常为占位 "qwen-oauth" 真实 sk-...
鉴权 OAuth:access + refresh,落盘在本地 profile 静态 API Key
计费感知 与 Portal/活动策略相关 控制台按量、资源包等,与阿里云账单对齐
与「百炼控制台文档」关系 不是百炼文档默认那条线 官方「OpenClaw 接入百炼」文档默认线

若你以为自己在用「百炼按量」,但 openclaw.json 里仍是 qwen-portal + portal.qwen.ai,则属于产品与文档错配——不是「Qwen 坏了」,而是接错门

3.2 OAuth 链路的「时间炸弹」:access 过期必然触发 refresh

OAuth 2.0 常见模式:

  1. access token:短命,用于真正调用 API。
  2. refresh token:长命,用于换新 access。
  3. access 过期后,客户端必须先 refresh,否则请求会被 401/403 拒绝。

OpenClaw 把 Portal OAuth 信息写在(默认布局下)类似路径:

~/.openclaw/agents/main/agent/auth-profiles.json

~/.openclaw/openclaw.json 里常见:

"apiKey": "qwen-oauth"

这不是「密钥写成了字符串 qwen-oauth」,而是约定占位符:告诉运行时「去 auth profile 里取 OAuth,而不是用静态 sk」。

一旦 access 过期,每次对话都会走:

组装请求 → 发现 access 过期 → 调用刷新端点 → 拿到新 access → 再调模型

若刷新阶段遇到 504(网关超时),用户就会在飞书里看到整段 HTML 报错,而不是正常自然语言回复——这就是前文 症状 B 的典型技术解释。

在这里插入图片描述
图:终端执行 openclaw models status,其中 qwen-portal:default 一行显示 expires in 0m 即已过期提示。

3.3 504 与 alibaba-ga:不全是「你网络差」

504 表示网关/代理在等待上游响应时超时。出现 alibaba-ga 一类标识时,往往说明请求已经进入了阿里云相关链路,但上游(OAuth 服务或内部依赖)未及时返回。

因此:

  • 可能是短时故障区域链路抖动
  • 也可能是 refresh token 也已失效、或 Portal 侧策略变更,导致长时间挂起直至超时。

要点:这类问题改飞书事件订阅开关通常无效;应回到 模型 Provider 与鉴权 排查。

3.4 飞书侧其它「像失效」的因素(并列排查)

即使模型完全正常,以下配置仍会导致「无回复」或「只有错误」:

  • dmPolicy: "allowlist":私聊仅允许名单内 open_id,其他人消息会被策略丢弃(体感像机器人死了)。
  • 通讯录类 scope 缺失:日志可能出现 99991672 等,提示缺少 contact:... 权限——影响用户身份解析与白名单匹配。
  • 模型额度 429:有消息、有日志,但回复为空或报错文本不同。

本文聚焦 Qwen 鉴权/接入形态;其它项建议在 openclaw logs --followopenclaw status --deep 中交叉验证。


四、可复现的排查命令(建议收藏)

# 1) Gateway 是否真的在跑
openclaw gateway status

# 2) 渠道与浅层健康(「OK」不代表模型 OK)
openclaw status

# 3) 深度探测(能看到 Feishu 探测是否 400 等)
openclaw status --deep

# 4) 模型与 OAuth 过期时间(关键)
openclaw models status

# 5) 实时日志:发飞书消息的同时观察
openclaw logs --follow

判读小技巧

  • models status 里若 expires in 0m 或 expires 时间早于今天,优先怀疑 OAuth 刷新链路
  • 日志里若反复出现 OAuth token refresh failed + 504,与本文 3.2–3.3 高度吻合。

五、解决路径:从「能跑」到「跑得稳」

方案 1:继续 Qwen Portal,只做 OAuth 重登(治标)

适合:短期恢复、能接受 OAuth 依赖 Portal 可用性。

openclaw models auth login --provider qwen-portal
# 按提示完成浏览器授权,务必等终端显示成功后再退出
openclaw gateway restart
openclaw models status   # 确认 expires 变为「还有几十分钟以上」

常见坑:浏览器显示「认证成功」,但终端侧未收到 token 落盘(例如只打开了 client=qwen-code 的页面、或提前关了 CLI)。成功标准应以 models status 过期时间刷新为准。
在这里插入图片描述

图:浏览器「认证成功」页但实际终端侧未收到 token 落盘

方案 2:迁移百炼 DashScope(推荐,治本)

适合:企业已开通百炼按量、手里有 sk-... API Key、希望摆脱 Portal OAuth 刷新

官方思路见阿里云帮助中心:在 OpenClaw 中接入百炼(与百炼控制台文档入口一致)。

下面给出一份最小可运行models 配置骨架(务必把 API Key 换成你自己的,且勿提交到 Git):

{
  "agents": {
    "defaults": {
      "models": {
        "bailian/qwen-plus": { "alias": "qwen" }
      },
      "model": {
        "primary": "bailian/qwen-plus"
      }
    }
  },
  "models": {
    "providers": {
      "bailian": {
        "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
        "apiKey": "sk-请在此处填写你的DashScopeKey",
        "api": "openai-completions",
        "models": [
          {
            "id": "qwen-plus",
            "name": "Qwen Plus",
            "reasoning": false,
            "input": ["text"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 128000,
            "maxTokens": 8192
          }
        ]
      }
    }
  }
}

迁移时注意

  1. 删除或停用qwen-portal 的依赖:agents.defaults.model.primary 不要再指向 qwen-portal/...
  2. plugins.entries 里若曾启用 qwen-portal-auth,在完全切到 DashScope 后可按需关闭,避免混淆。
  3. auth.profilesqwen-portal:default 可保留无害,但会话层若写死 authProfileOverride,需同步清理(路径通常在 ~/.openclaw/agents/main/sessions/ 下相关 JSON,以你本机为准)。
  4. 改完后执行:
openclaw gateway restart
openclaw models status

模型 ID 说明:百炼侧模型名会随产品迭代更新(如文档中的 qwen3.6-plus 等),请以控制台当前可用模型名为准,避免「配置写对了但模型 ID 已下线」。


六、安全与合规:不要把「能跑」建立在「泄露」上

  1. sk-... 属于高敏感凭据:不要发到群聊、不要贴公众号、不要进 Git。
  2. openclaw.json 权限:本机用户可读即可;备份时注意加密或脱敏。
  3. 泄露后处置:在百炼控制台作废旧 Key、签发新 Key,比「全网搜一遍谁复制了」更可靠。
  4. 公司 Key vs 个人 Key:计费归属与合规不同;生产环境建议独立子账号 + RAM 最小权限 + 独立 Key

七、结语:把「渠道 OK」和「模型 OK」拆成两件事

OpenClaw 这类产品的美妙之处在于:飞书 / Telegram / WhatsApp 等渠道与 Qwen / Claude / 其它兼容端点 解耦。也正因为如此,排障时要刻意训练一个思维习惯:

IM 绿灯只证明「消息到了网关」;模型是否可用,要看 Provider 探测与 models status

当你再遇到「飞书 504 + OAuth refresh」这类错误时,可以自信地判断:大概率是 token 生命周期接入形态(Portal vs DashScope) 的问题,而不是「AI 突然不会说话了」。


附录 A:命令速查

目的 命令
看网关 openclaw gateway status
看整体 openclaw status
深度健康 openclaw status --deep
看模型鉴权 openclaw models status
Portal 重登 openclaw models auth login --provider qwen-portal
看日志 openclaw logs --follow
重启网关 openclaw gateway restart

版本说明:本文基于 OpenClaw 稳定通道常见行为整理;不同版本 CLI 子命令可能略有差异,以你本机 openclaw --help 与官方文档为准。

外部参考

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐