Cloudflare Workers AI
Cloudflare Workers AI 为 Cloudflare 网络上托管的模型提供无服务器推理。AISIX 为这些模型提供面向应用的 OpenAI 兼容 API,并由网关管理 Cloudflare Token、调用方访问权限、限流和用量核算。
准备工作
开始前,请准备以下内容:
- 一套 AISIX 环境:
- 对于 AISIX Cloud,需要一个已关联网关的环境和具有写入作用域的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请 Hybrid Cloud 访问权限,请联系 API7。
- 对于开源 AISIX 网关,请准备本地 AISIX 安装,或使用开源 AISIX 网关快速入门中的 Docker 配置。配置网关以加载声明式资源文件。
- Cloudflare 账户 ID 和 Workers AI API Token。在 Cloudflare 控制台中打开 Workers AI 页面并选择 Use REST API,按 REST API 入门所述创建 Token 并复制账户 ID。
- 已安装
curl和jq。
使用 AISIX Cloud 配置
导出 AISIX Cloud 连接信息:
# AISIX_CP 是 Admin API 基础 URL;应包含 /api,且末尾不带斜杠
# 本地 On-Premises 快速入门使用 http://localhost:8080/api
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
为 Workers AI 支持的 Chat Completions 路由创建服务提供方密钥、模型别名和调用方 API Key。
Cloudflare Workers AI 是社区目录服务提供方。AISIX 接受 cloudflare-workers-ai 作为服务提供方值,并选择使用 Bearer 身份认证的 openai 适配器。AISIX 不会提供精选基础 URL 或服务提供方特定的请求和响应重写,因此必须配置账户范围的 api_base。
控制台将该服务提供方标记为传输格式未经验证的社区条目。
创建服务提供方密钥
创建用于存储 Cloudflare 凭证和账户范围 API 根路径的服务提供方密钥:
# 请替换为实际值
export CLOUDFLARE_API_TOKEN="YOUR_PROVIDER_API_KEY"
export CLOUDFLARE_ACCOUNT_ID="YOUR_CLOUDFLARE_ACCOUNT_ID"
PROVIDER_KEY_ID=$(curl -sS -X POST "$AISIX_CP/provider_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "cloudflare-workers-ai-prod",
"provider": "cloudflare-workers-ai",
"api_key": "'"${CLOUDFLARE_API_TOKEN}"'",
"api_base": "https://api.cloudflare.com/client/v4/accounts/'"${CLOUDFLARE_ACCOUNT_ID}"'/ai/v1",
"allowed_environments": ["'"${ENV_ID}"'"]
}' | jq -r '.provider_key.id')
echo "$PROVIDER_KEY_ID"
❶ provider 为目录 ID cloudflare-workers-ai。AISIX Cloud Admin API 从目录服务提供方派生适配器;adapter 字段仅接受 BYO 服务提供方密钥,因此不要在此设置。
❷ api_key 存储 Workers AI API Token。Cloudflare 使用 Authorization: Bearer 请求头认证 REST API,这正是 openai 适配器已经发送的形式。该值遵循服务提供方密钥中的凭 证处理行为。
❸ api_base 是账户范围的根路径 https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai/v1。Cloudflare 在 OpenAI 兼容 API 端点中记录的完整端点为 https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1/chat/completions。AISIX 会向 api_base 追加 /chat/completions 等端点路径,因此该值必须止于 /ai/v1。如果误粘贴完整端点 URL,AISIX 会移除可识别的后缀和末尾斜杠,但应存储较短的根路径形式。
请始终在 Cloudflare Workers AI 服务提供方密钥上设置 api_base。
对于社区目录服务提供方,省略 api_base 时,AISIX 会回退到公共模型目录发布的基础 URL。Cloudflare Workers AI 的发布值为 https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1。由于每个 Cloudflare 账户都有自己的端点,该值是模板而不是已解析的 URL。AISIX 不会替换占位符,且会原样存储回退值而不重新验证,因此创建请求仍会成功。随后,存储的根路径会保留字面量 ${CLOUDFLARE_ACCOUNT_ID},而不是账户 ID,第一次请求将在上游失败。该服务提供方不存在可用的共享默认值。
该命令会把返回的服务提供方密钥 ID 保存到 PROVIDER_KEY_ID。
创建模型
Workers AI 模型 ID 始终以 @cf/ 开头,后跟发布方和模型名称:@cf/<publisher>/<model>。请把完整字符串写入 model_name,包括 @cf/ 前缀以及 -fp8-fast 等任何精度或变体后缀。删除前缀或复用其他主机为相同权重发布的裸 ID,会导致上游模型错误。
Cloudflare 模型目录当前包含以下 ID:
| Cloudflare 模型 ID | 说明 |
|---|---|
@cf/openai/gpt-oss-120b | 可选择推理强度的开放权重推理模型。 |
@cf/meta/llama-3.3-70b-instruct-fp8-fast | 量化为 fp8 以加快推理的 Llama 3.3 70B。 |
@cf/qwen/qwen3-30b-a3b-fp8 | 用于多语言聊天、推理和工具使用的 Qwen3 指令模型。 |
创建别名前,请在 Workers AI 模型目录中查看当前列表。确认所选模型是文本生成模型,而不是 Embedding、图像或语音模型。
创建调用方将在请求中发送的模型别名:
MODEL_ID=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/models" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "cloudflare-gptoss-prod",
"model_name": "@cf/openai/gpt-oss-120b",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}' | jq -r '.model.id')
echo "$MODEL_ID"
❶ display_name 是调用方在 model 中发送的别名。
❷ model_name 是完整的 Workers AI 模型 ID,例如 @cf/openai/gpt-oss-120b。
❸ provider_key_id 将别名关联到 Cloudflare Workers AI 服务提供方密钥。
有关为预算核算和用量报告关联成本元数据的信息,请参阅模型别名。
创建调用方 API Key
创建能够访问该模型别名的调用方 API Key。明文密钥由服务器生成,并只在创建响应中返回一次,因此请立即保存:
AISIX_API_KEY=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/api_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "cloudflare-caller",
"allowed_models": ["'"${MODEL_ID}"'"]
}' | jq -r '.plaintext')
echo "$AISIX_API_KEY"
allowed_models 值必须引用上一步保存的模型 ID。写入后,配置会自动投射到已关联的网关。
使用开源 AISIX 网关配置
导出上游凭证,并选择应用将发送给网关的调用方 API Key:
export CLOUDFLARE_API_TOKEN="YOUR_PROVIDER_API_KEY"
export CLOUDFLARE_ACCOUNT_ID="YOUR_CLOUDFLARE_ACCOUNT_ID"
export CALLER_API_KEY="YOUR_CALLER_API_KEY"
为该服务提供方创建完整的声明式资源文件:
_format_version: "1"
provider_keys:
- display_name: "cloudflare-workers-ai-prod"
provider: "cloudflare-workers-ai"
adapter: "openai"
api_key: ${CLOUDFLARE_API_TOKEN}
api_base: "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1"
models:
- display_name: "cloudflare-gptoss-prod"
provider: "cloudflare-workers-ai"
model_name: "@cf/openai/gpt-oss-120b"
provider_key: "cloudflare-workers-ai-prod"
api_keys:
- display_name: "cloudflare-caller"
key_env: CALLER_API_KEY
allowed_models:
- "cloudflare-gptoss-prod"
如果 AISIX 安装在本地,请在加载前验证文件:
aisix validate --resources resources.yaml
验证后,在网关进程环境中提供文件引用的环境变量,再启动网关。仅当这些变量已经可供进程使用时,才重新加载现有网关;否则,请使用更新后的环境重启网关。
如果使用 Docker,请调整开源 AISIX 网关快速入门中的验证和启动命令。挂载此 resources.yaml 文件,并在两条命令中使用 -e 传入它引用的每个环境变量。资源加载后,准备下文共用的验证请求:
export AISIX_API_KEY="$CALLER_API_KEY"