Technical Guide

07. 模型 Provider 与流式响应:OpenClaw 怎么接不同模型

看懂 OpenClaw 的模型层:provider registry、auth profiles、stream implementation 和 failover。

这篇解决什么问题

OpenClaw 支持多个模型 provider。它不是把 OpenAI SDK 写死在业务代码里。

模型相关问题通常发生在这几层:

配置里选了哪个 provider
auth profile 是否可用
模型名是否存在
provider transport 是否支持当前调用方式
stream 事件是否被 runtime 正确转换
fallback 是否生效

先看哪些目录

src/llm/
src/llm/providers/
src/agents/agent-model-discovery.ts
src/agents/auth-profiles/
src/config/types.models.ts
src/config/zod-schema.providers-core.ts

provider 相关代码不要在 Gateway 里找。Gateway 只负责入口和投递。

auth profile 是什么

OpenClaw 把模型认证抽象成 auth profiles。

官方 runtime workflow 文档提到:

agents/<agentId>/agent/auth-profiles.json

里面保存模型 auth profiles,例如 API keys 和 OAuth。

这意味着同一个 OpenClaw 实例可以有多个 agent、多个 profile、多个 provider。排查模型问题时,要确认当前 session 到底用了哪个 agent 和哪个 auth profile。

model discovery 做什么

OpenClaw 需要知道当前 provider 有哪些模型、哪些可用、哪些需要认证。

相关文件名里能看到:

agent-model-discovery.ts
agent-model-discovery.auth.test.ts
agent-model-discovery.internal.test.ts

这类逻辑负责模型发现和认证状态判断。

流式响应为什么复杂

Agent 不是等模型完整返回一段文本才处理。

实际运行中可能有:

  • 文本 token 流;
  • tool call 流;
  • provider 特有事件;
  • 中断;
  • retry;
  • fallback;
  • compaction 后重试。

所以 src/llm/providers/src/agents/embedded-agent-runner/ 会有很多 stream adapter 和事件转换代码。

常见问题怎么定位

401 / invalid key

先看 auth profile,不要先改 prompt。

model not found

确认模型名是否属于当前 provider,并检查 model alias / default model 配置。

429 / rate limit

这是 provider 层限制,和 Gateway 通常无关。

有些 provider 不支持某种 tool call

这要看 provider adapter 是否支持当前 schema、tool call 格式和 stream 事件。

一个实用判断

如果命令行 openclaw agent --message "Hello" 都失败,问题在 Runtime/provider/auth。

如果命令行成功,但 Telegram/Feishu 不成功,问题更可能在 Gateway/channel/permission。

下一篇看什么

下一篇看 Tools 原理。

模型能想,工具才能做事。