字节笔记本
2026年8月29日
models.dev 接入 Cloudflare AI Gateway
models.dev 是一份开源的 AI 模型目录:模型规格、价格、能力、各家提供商都能在这儿查。最近它把 Cloudflare AI Gateway 接成了一家正式 provider,编码代理(比如 OpenCode)可以直接按 cloudflare-ai-gateway/... 选模型,请求统一走 Cloudflare,顺带拿上日志、缓存、限流和统一计费。
下面按「目录里有什么 → 网关怎么配 → 在 OpenCode 里怎么用」写一遍。
models.dev 和 AI Gateway 各自干什么
models.dev 维护的是「模型元数据」:某模型上下文多长、多少钱、支不支持工具调用、在哪些提供商上能跑。数据以 TOML 存在 GitHub,站点与 JSON API 都从这儿生成。
Cloudflare AI Gateway 是一层代理:你的应用只打一个 Cloudflare 入口,后面可以接到 OpenAI、Anthropic、Workers AI 等。好处是观测、缓存、限流、回退,以及 Unified Billing(用 Cloudflare 预付余额,不必每家单独塞一把 key)。
两边合在一起的意思是:目录里有一套 cloudflare-ai-gateway 的模型清单,客户端按这份清单选模型,实际推理再走 AI Gateway。
目录里的 cloudflare-ai-gateway 怎么来的
anomalyco/models.dev 仓库里有 providers/cloudflare-ai-gateway/。生成脚本会拉 Cloudflare 的实时模型目录(ai/catalog/models),再对照本地 curation.toml 写出 TOML。
要点:
- 只管第三方透传模型(Anthropic、OpenAI、Google、xAI 等经 Gateway 转发的那些)。Cloudflare 自家 Workers AI(
@cf/...)单独放在cloudflare-workers-ai,故意不混进这一家。 - 价格、上下文长度等尽量从 Cloudflare catalog 自动推导;名字和描述继承 models.dev 的 canonical
base_model,避免被 Cloudflare 自己的营销文案覆盖。 - 个别能力(比如某些原生格式提供商的
reasoning_options、是否真支持 structured output)还要靠curation.toml手工补,因为 schema 里写「支持」不等于线上真能用。
本地重新生成大致是:
CLOUDFLARE_API_TOKEN=xxx CLOUDFLARE_ACCOUNT_ID=xxx bun run cloudflare-ai-gateway:generate加 --check 可以在 CI 里确认已提交的 TOML 没落后于线上 catalog。
provider.toml 里声明了连接所需环境变量和文档入口,大致包括:
name = "Cloudflare AI Gateway"
env = ["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_GATEWAY_ID"]
doc = "https://developers.cloudflare.com/ai-gateway/"先在 Cloudflare 建好 Gateway
- 登录 Cloudflare Dashboard,记下 Account ID。
- 建一把 API Token,权限至少包含
AI Gateway - Read、AI Gateway - Edit;若还要 Workers AI,再加Workers AI - Read。 - 打开 AI → AI Gateway,创建一个 Gateway,记下 Gateway ID(名字,最长 64 字符)。Workers AI 计费可选 Standard(账期末结算)或 Unified(从 AI Gateway 预付余额扣)。
上游鉴权常见三种:
- Unified Billing:用 Cloudflare 预付余额,支持的第三方模型也可以不塞各家原始 key。
- BYOK:把各家 API Key 存进 Cloudflare,运行时由 Gateway 带上。
- 请求头直传:照旧在请求里带
Authorization: Bearer <provider-key>。
用 OpenAI 兼容接口打一枪(账号级 Unified API 示例):
curl -X POST "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "openai/gpt-4.1-mini",
"messages": [{"role": "user", "content": "What is Cloudflare?"}]
}'也可以走经典的 Gateway URL:
https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/{provider}OpenAI、Anthropic、Google AI Studio、Workers AI、Bedrock、Azure OpenAI 等都有对应路径。compat 层常见形态是:
https://gateway.ai.cloudflare.com/v1/{ACCOUNT_ID}/{GATEWAY_ID}/compat/在 OpenCode 里接上
OpenCode 用 AI SDK + models.dev 拉提供商列表。Cloudflare AI Gateway 已在官方 Providers 文档里。
交互式配置:
/connect
搜 Cloudflare AI Gateway,依次填 Account ID、Gateway ID、API Token。然后:
/models
也能用环境变量(适合 CI / 服务器):
export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id
export CLOUDFLARE_GATEWAY_ID=your-gateway-id
export CLOUDFLARE_API_TOKEN=your-api-tokenopencode.json 里可以显式挂模型:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"cloudflare-ai-gateway": {
"models": {
"openai/gpt-4o": {},
"anthropic/claude-sonnet-4": {}
}
}
}
}跑任务时模型 ID 形如:
opencode run --model "cloudflare-ai-gateway/openai/gpt-4o" "explain what opencode does"
opencode run --model "cloudflare-ai-gateway/anthropic/claude-sonnet-4-5" "write a hello world in rust"Workers AI 那条线请走 cloudflare-workers-ai provider,不要和 Gateway 透传混用。
和「直接打各家 API」差在哪
| 做法 | 你要管什么 | 额外能力 |
|---|---|---|
| 直连 OpenAI / Anthropic 等 | 每家一把 key、各自的日志与限流 | 无统一观测 |
| 只经 AI Gateway | Cloudflare 账号 + Gateway(+ 可选 BYOK) | 缓存、限流、回退、统一账单 |
| models.dev 标成 provider | 客户端自动知道有哪些模型、怎么标价 | 编码代理 /models 里能直接选 |
适合:多模型切换频繁、想把日志和限流收口到一处、或者想用 Unified Billing 少管几把 key 的团队。不适合:只要打一家、已经有成熟直连链路、又不想多一跳延迟的场景。
注意几件事
- Workers AI ≠ AI Gateway 透传。 models.dev 把它们拆成两个 provider,选错会鉴权失败或模型列表对不上。
- catalog 会变。 新模型上线后,目录要靠生成脚本(或上游合并)更新;本地 fork 记得定期
generate --check。 - reasoning / structured output 对部分原生格式提供商仍靠人工 curation,别把 schema 广告当成保证。
- 自定义上游(不在 Cloudflare 原生列表里的 API)走 Custom Providers,Unified compat 与 provider-specific 路径写法不同,见 Custom Providers 文档。