AI摘要

本文介绍如何利用Cloudflare免费AI大模型,通过OpenAI兼容格式为Typecho插件实现文章翻译:获取Account ID和API Token,配置接口地址,推荐使用@cf/zai-org/glm-4.7-flash模型,并解决常见问题。

写博客的人,迟早会遇到一个很现实的问题:中文文章写得好好的,海外读者看不懂;想做英文版,人工翻译太磨人;接第三方翻译接口,又怕账单一不小心起飞。

这也是很多 Typecho 用户折腾文章翻译插件的原因。像 我的SmartTranslate 插件,思路其实很舒服:在后台把文章翻译好,译文存进字段里,前台读者需要英文就切英文,需要中文就看原文。页面不用每次打开都实时翻译,API Key 也不会暴露在前端,体验上稳很多。

问题卡在另一头:翻译接口到底用谁?

OpenAI 当然能用,可很多个人站、技术博客、轻量项目,没必要一上来就把预算砸进去。Cloudflare Workers AI 这时候就挺香,它提供免费额度,还支持类似 OpenAI 的调用方式。对已经适配 OpenAI 接口的插件来说,改动往往没想象中那么大。

这篇就不绕弯子,直接讲清楚三件事:

  • 从 Cloudflare 官方页面拿到 Account ID;
  • 创建 Workers AI 可用的 API Token;
  • 用 OpenAI 兼容格式测试 Cloudflare 免费 AI 大模型,并选一个更适合翻译场景的模型。

为什么从“翻译”这个场景切进去

翻译这件事特别适合拿来测试大模型接口。

原因很简单,结果好不好,肉眼就能看出来。你把一句中文技术描述丢进去,模型给出英文,通不通顺、术语准不准、有没有乱加意思,一眼就能判断。

比如 Typecho 插件介绍、主题说明、部署教程、开源项目文档,这些内容最怕机器翻得像说明书残片。句子没错,但味道不对,读者读两段就跑了。

所以这类文章翻译,我更建议用 OpenAI 兼容的大语言模型来处理,而不是只会逐句硬翻的接口。大模型能理解上下文,它知道“插件后台”“自定义字段”“前端切换”这些词放在技术文章里该怎么说。

这也是 Cloudflare Workers AI 有意思的地方:它不是只给你一个翻译 API,而是给你一批大模型。你可以拿它做翻译,也可以继续拿它做摘要、标题、SEO 描述、标签生成。对博客插件来说,一套接口能干不少事。

你要准备的东西

别准备太多,真的就这几样:

名称用来干嘛在哪里拿
Cloudflare 账号进入控制台,开 Workers AICloudflare 官网注册
Account ID拼接 API 地址Workers AI 的 REST API 页面
API Token调用接口时鉴权Workers AI 页面一键创建
模型 ID告诉 Cloudflare 调哪个模型Workers AI Models 文档
OpenAI 兼容 Base URL给插件或代码填写接口地址https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1

注意,Cloudflare 这里用的是 API Token,不是你账号密码,也不是全局 API Key。别把 Cloudflare 账号密码填到插件里,那个太危险了。

从 Cloudflare 官方页面拿 Account ID

打开 Cloudflare 控制台,登录之后,在左侧菜单里找到 Workers & Pages,再进入 Workers AI

Cloudflare 官方的 REST API 入门页面给的流程很直接:进入 Workers AI 页面,点击 Use REST API,这个页面会把你需要的 Account ID 和创建 API Token 的入口放在一起。

请输入图片描述

进入 Workers AI 后,找到 REST API

点进去之后,页面会出现 获取帐户 ID 。把里面的 Account ID 复制出来,先放到记事本里。

它长得大概像这样:

ACCOUNT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

这串东西不是密钥,但也别随便公开。

请输入图片描述

创建 Workers AI API Token

同一个 REST API 页面里,找到 创建 Workers AI API令牌

点进去之后,Cloudflare 会给你预填好一套权限。正常情况下,用这个模板创建就够了。

流程是这样:

  1. 点击 创建 Workers AI API令牌
  2. 确认生成后立刻复制保存。

API Token 只适合放在服务端、插件后台配置、环境变量里,别写到前端 JS,别塞进公开 GitHub 仓库。

请输入图片描述

创建成功后,页面会显示一串 Token。立刻复制,建议保存成下面这种格式:

CLOUDFLARE_ACCOUNT_ID=你的AccountID
CLOUDFLARE_API_TOKEN=你的APIToken

请输入图片描述

先用 REST API 测一下账号能不能跑

拿到 Account ID 和 API Token 后,别急着往 Typecho 插件里填。先用终端测一下,能跑通再说。

把下面命令里的 {ACCOUNT_ID}{API_TOKEN} 换成你自己的。

curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/meta/llama-3.1-8b-instruct-fp8 \
  -X POST \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "system",
        "content": "你是一个专业翻译助手,只输出英文译文,不解释。"
      },
      {
        "role": "user",
        "content": "请把这句话翻译成英文:这款 Typecho 插件可以在后台生成文章英文译文,并在前台切换显示。"
      }
    ]
  }'

如果成功,会看到类似这样的返回:

{
  "result": {
    "response": "This Typecho plugin can generate English translations of articles in the backend and switch between versions on the frontend."
  },
  "success": true,
  "errors": [],
  "messages": []
}

这里你重点看两个地方:

  • success 是不是 true
  • result.response 里有没有正常译文。

再用 OpenAI 兼容格式测试

很多插件支持的是 OpenAI 接口。它们不是直接请求 /ai/run/模型名,而是请求这种地址:

/v1/chat/completions

Cloudflare Workers AI 支持 OpenAI 兼容端点,文本生成走 /v1/chat/completions,所以你只需要把 OpenAI 的 Base URL 换成 Cloudflare 的地址。

Cloudflare 的 OpenAI 兼容 Base URL 是:

https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1

完整测试命令如下:

curl --request POST \
  --url https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1/chat/completions \
  --header "Authorization: Bearer {API_TOKEN}" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "@cf/meta/llama-3.1-8b-instruct-fp8",
    "messages": [
      {
        "role": "system",
        "content": "你是一个专业的中英翻译助手。请保留技术术语,不要添加解释,只输出英文译文。"
      },
      {
        "role": "user",
        "content": "Cloudflare Workers AI 可以通过 OpenAI 兼容格式调用,这样很多现成插件只需要改 Base URL 和模型名称。"
      }
    ],
    "temperature": 0.2,
    "max_tokens": 800
  }'

成功后,返回结构会更像 OpenAI:

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Cloudflare Workers AI can be called through an OpenAI-compatible format, so many existing plugins only need to change the Base URL and model name."
      },
      "finish_reason": "stop"
    }
  ]
}

插件一般会读取:

choices[0].message.content

只要这个字段有译文,OpenAI 兼容接口就算打通了。

填到 Typecho 翻译插件里该怎么写

不同插件后台字段名字可能不完全一样,但思路差不多。你只要认准这几项:

插件配置项应该填写
API 地址 / Base URLhttps://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1
API KeyCloudflare 创建的 API Token
模型名称 / Model@cf/zai-org/glm-4.7-flash
接口类型OpenAI / OpenAI Compatible / Chat Completions
温度 temperature0.6 左右
最大输出 max_tokens看文章长度,短文 800,长文 2000 起步

别把 /chat/completions 重复填进去。

有些插件让你填的是 Base URL,这时填:

https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1

有些插件让你填的是完整请求地址,才填:

https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1/chat/completions

这个地方很容易填错。填错后一般会出现 404、接口不存在、解析失败之类的问题。

下图是使用我的翻译插件的示例

请输入图片描述

推荐的翻译提示词

翻译文章别只丢一句“翻译成英文”。这样出来的东西不稳定,有时它会解释,有时它会补内容,有时它会把代码块也乱改。

可以用下面这个 system prompt:

你是一个专业的中英技术文章翻译助手。
请将用户提供的中文内容翻译成自然、准确、适合技术博客阅读的英文。
保留 Markdown 格式、代码块、链接、图片标记、表格结构和专有名词。
不要添加解释,不要输出原文,不要总结,只输出英文译文。
如果遇到不常见技术词,请保留准确表达。

哪个模型性价比最高

这是重点,别一上来就选最大模型。

Cloudflare Workers AI 的模型定价会按模型变化。以当前官方定价表来看,常见几个模型大概是这样:

模型适合场景输入价格输出价格我的建议
@cf/zai-org/glm-4.7-flashOpenAI 兼容接口、文章翻译、长文处理、多语言内容$0.06 / 百万 token$0.40 / 百万 token主推,便宜、上下文长,翻译和技术文章处理都舒服
@cf/meta/llama-3.1-8b-instruct-fp8OpenAI 兼容接口、文章翻译、摘要$0.152 / 百万 token$0.287 / 百万 token也能用,输出便宜些,但输入价比 GLM 高
@cf/meta/llama-3.1-8b-instruct通用文本生成、翻译$0.282 / 百万 token$0.827 / 百万 token老方案能跑,但价格不香,而且官方已列入弃用名单
@cf/meta/llama-3.1-8b-instruct-awq便宜文本生成$0.123 / 百万 token$0.266 / 百万 token旧项目临时可用,新项目不建议押它
@cf/meta/m2m100-1.2b专门翻译$0.342 / 百万 token$0.342 / 百万 token翻译模型本身不错,但它不是标准 chat completions 插件最顺手的选择

如果你的目标是:Typecho 插件里直接用 OpenAI 格式调用 Cloudflare AI 大模型做文章翻译,我建议默认选:

@cf/zai-org/glm-4.7-flash

它的优势比较实在:

  • 支持 OpenAI 兼容调用,插件适配省事;
  • 价格比普通 kimi2.6 低不少;
  • 上下文窗口更适合处理长一点的文章段落;
  • 翻译技术文章时,比小模型更稳,不容易把术语翻飞。

如果你只想做一个单独的“翻译 API”,不要求 OpenAI 兼容格式,那可以考虑:

@cf/meta/m2m100-1.2b

它是专门的多语言翻译模型,请求参数是这样的:

curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/meta/m2m100-1.2b \
  -X POST \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "This Typecho plugin can generate English translations in the backend.",
    "source_lang": "english",
    "target_lang": "chinese"
  }'

它更像传统翻译接口,简单直接。但很多 OpenAI 插件默认不会按 text/source_lang/target_lang 这种格式发请求,所以你要么改插件代码,要么在中间套一层 Worker 做转接。

免费额度到底够不够用

Cloudflare Workers AI 免费额度按神经元计算。官方当前写法是每天 10,000 神经元 免费额度,超出后需要 Workers 付费计划。

很多人看到 神经元 会懵,其实你可以先粗暴理解成token。

博客翻译的用量一般没那么吓人。比如你不是每天翻译几百篇文章,只是写完文章后点一下“生成英文译文”,大概率够用。

真正要注意的是批量翻译。

假设你站里有 500 篇旧文章,一次性全点生成,肯定容易撞额度。更稳的办法是:

  • 每次只处理 10 到 20 篇;
  • 长文章按段落翻译,失败了只重试那一段;
  • 已经生成过译文的文章不要重复请求;

请输入图片描述

常见报错怎么处理

401 Unauthorized

大概率是 API Token 错了。

检查这几个点:

  • Token 有没有复制完整;
  • Authorization 前面是不是 Bearer
  • Token 有没有被你多复制了空格;
  • 自定义 Token 有没有 Workers AI 权限。

正确写法是:

Authorization: Bearer 你的API_TOKEN

404 Not Found

多半是地址填错了。

OpenAI 兼容 Base URL 是:

https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1

完整 chat completions 地址是:

https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1/chat/completions

别把 {ACCOUNT_ID} 原样留下,也别漏掉 /accounts/

模型不存在

模型名必须完整,包括前面的 @cf/

正确:

@cf/meta/llama-3.1-8b-instruct-fp8

错误:

llama-3.1-8b-instruct-fp8

少了 @cf/meta/,Cloudflare 找不到。

插件返回空白

接口可能成功了,但插件没解析到字段。

你需要确认插件读取的是:

choices[0].message.content

如果插件原来只兼容某些返回格式,可能要看一下插件代码里解析响应的地方。

文章发布前的小检查

配置好后,别急着发。拿一篇短文测一轮。

建议按这个顺序看:

  • 中文标题有没有被翻得太硬;
  • 代码块有没有被改;
  • 链接有没有丢;
  • 图片 Markdown 有没有保留;
  • Typecho、Cloudflare、Workers AI、API Token 这些词有没有乱翻;
  • 前台切换中英文时,页面布局有没有炸。

翻译功能的价值不在“生成一下就完事”,而是让读者真的能读。尤其技术文章,术语和代码一乱,可信度会掉得很快。

参考资料

结尾

翻译插件真正好用的地方,不是让博客看起来“支持国际化”四个字,而是让文章多一条被读到的路。

Cloudflare Workers AI 这套方案的舒服点就在这:不用自己买服务器,不用折腾 GPU,也不用把插件大改一遍。拿到 Account ID,创建 API Token,换成 OpenAI 兼容 Base URL,再选一个合适的模型,文章翻译这条线基本就能跑起来。

END

本文标题:用 OpenAI 兼容格式调用免费的 Cloudflare AI 大模型

本文链接:https://www.imsuk.cn/archives/291/

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

Last modification:May 16, 2026
请用钱砸我