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 原理。
模型能想,工具才能做事。