我们都知道,有这样一个公司,提供免费CDN、免费域名托管、免费边缘函数计算、免费对象存储、免费内网穿透、免费部署Pages、免费KV、免费SSL证书……他就是Cloudflare!

就在前不久Cloudflare推出了免费的Workers AI,这就允许我们使用AI模型搭建一个翻译API,这相当简单,请看下面的教程。

搭建教程

Cloudflare dashboard找到AI - Workers AI,找到下面这个模型(@cf/meta/m2m100-1.2b),这就是我们要使用的模型。

Untitled

然后我们找到使用WOrkers模板创建,然后在里面找到Translation AI,点击创建,根据提示自行创建。

创建完之后点击Workers内的编辑代码,将index.js的代码替换成我的:

export default {
  async fetch(request, env) {
    const urlStr = request.url
    const urlObj = new URL(urlStr)
    let text =  urlObj.searchParams.get('text')
    let source_language = urlObj.searchParams.get('source_language')
    let target_language = urlObj.searchParams.get('target_language')
    const inputs = {
      text: text,
      source_lang: source_language,
      target_lang: target_language
    };
    if(text==null){
      return Response.json({ inputs, response:{
        translated_text: "ERROR: value 'text' is missing"
      } } );
    }
    if(source_language==null){
      return Response.json({ inputs, response: {
        translated_text: "ERROR: value 'source_language' is missing"
      }} );
    }
    if(target_language==null){
      return Response.json({ inputs, response: {
        translated_text: "ERROR: value 'target_language' is missing"
      }} );
    }
    else {
      const response = await env.AI.run('@cf/meta/m2m100-1.2b', inputs);
      return Response.json({ inputs, response });
    }
  },
};

这是最基础的版本,如果你需要一个访问密钥的话可以使用下面的代码:

export default {
  async fetch(request, env) {
    const urlStr = request.url
    const urlObj = new URL(urlStr)
    let text =  urlObj.searchParams.get('text')
    let source_language = urlObj.searchParams.get('source_language')
    let target_language = urlObj.searchParams.get('target_language')
    let key = urlObj.searchParams.get('key')
    const inputs = {
      text: text,
      source_lang: source_language,
      target_lang: target_language
    };
    if (key !=="设置你想要的密钥"){
      return Response.json({ inputs, response:"ERROR: wrong key"} );
    }
    else{
      if(text==null){
        return Response.json({ inputs, response:{
          translated_text: "ERROR: value 'text' is missing"
        } } );
      }
      if(source_language==null){
        return Response.json({ inputs, response: {
          translated_text: "ERROR: value 'source_language' is missing"
        }} );
      }
      if(target_language==null){
        return Response.json({ inputs, response: {
          translated_text: "ERROR: value 'target_language' is missing"
        }} );
      }
      else {
        const response = await env.AI.run('@cf/meta/m2m100-1.2b', inputs);
        return Response.json({ inputs, response });
      }
    }
  },
};

编辑好代码后,点击部署即可,参照下图配置自定义域:

Untitled

如何使用

对于第一个代码你需要传入一组数据,包含三个参数,键分别为text,source_languagetarget_language

// 传入参数
{
	"text": "你好啊",
	"source_language": "zh",
	"target_language": "en"
}

https://xx.xxxxx.xxx/?text=你好啊&source_language=zh&target_language=en

这个链接就可以查询到结果,不出意外返回的JSON应该是这样的:

{
    "inputs": {
        "text": "你好啊",
        "source_lang": "zh",
        "target_lang": "en"
    },
    "response": {
        "translated_text": "Hello to you."
    }
}

不同于传入的参数,传出的参数中*_language都变成了*_lang,开发者需要注意。

对于使用了带有密钥的方案,只需额外传入参数key即可,返回的JSON也会在inputs中多一个key的参数,其他不变动,URL也只需要加上&key=你自己设置的key即可。

限制

虽然Cloudflare允许并且甚至可能鼓励我们白嫖,但是白嫖绝对不会没有限制,Cloudflare Workers的限制如下:

Workers 和 Pages Functions

每个请求最多占用 10 毫秒 CPU 时间

每天最多 100,000 (UTC+0)

Workers AI

访问我们目录中的所有 AI 模型

每天最多 10,000 个神经元