Please enable Javascript to view the contents

腾讯云机器翻译 TMT API 接入指南

 ·  ☕ 4 分钟

今天把腾讯云的机器翻译 TMT API 接入到我的 字幕翻译 - 字幕工具箱 中。

字幕翻译 - 字幕工具箱

接入过程还是比较顺利的,但也有一些小坑,记录如下。

tmt

机器翻译_智能翻译_自动翻译-腾讯云

腾讯云机器翻译 TMT 是基于百亿级数据积累和领先算法,提供文本翻译、文档翻译、图片翻译等多项翻译能力。支持术语定制功能,对翻译结果进行干预,有效提升翻译准确率。可广泛应用于产品本地化、社交媒体、在线教育、智能硬件、在线会议和出国旅行等场景。

tmt 不光支持文本翻译,还支持文档翻译、图片翻译等多项翻译能力。我这里只用到了文本翻译。

计费

机器翻译 计费概述_腾讯云

腾讯云机器翻译提供预付费和后付费两种主要计费模式,开通服务后,按“免费额度 > 预付费 > 后付费”的顺序进行扣费。

tmt 免费额度

文本翻译的免费额度为每月 500 万字符,超过免费额度后按量计费,每 100 万字符 58 元。

接入指南

机器翻译 文本翻译_腾讯云

开通服务

接入服务的前提是需要先开通服务,开通后可以在控制台查看到 SecretId 和 SecretKey。密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取。

安装SDK

官方建议优先使用SDK接入简化开发。我网站服务端是Nodejs,所以:Tencent Cloud SDK 3.0 for Node.js: GitHub, Gitee

官方SDK是非常大而全的,包含了腾讯云的所有产品的API,安装时可以指定产品名称和版本号来安装对应的SDK。比如,我只用到tmt,所以只安装tmt的SDK:

1
npm install tencentcloud-sdk-nodejs-tmt --save

示例代码

API Explorer - 云 API - 控制台

有两种文本翻译的API:TextTranslate 和 TextTranslateBatch。TextTranslate 是单条翻译,TextTranslateBatch 是批量翻译。

腾讯官方提供了API Explorer,可以在线测试API并生成示例代码。以下是一个简单的文本批量翻译(TextTranslateBatch)示例代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher

const tencentcloud = require("tencentcloud-sdk-nodejs-tmt");

const TmtClient = tencentcloud.tmt.v20180321.Client;

// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性
// 以下代码示例仅供参考,建议采用更安全的方式来使用密钥
// 请参见:https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
const clientConfig = {
  credential: {
    secretId: process.env.TENCENTCLOUD_SECRET_ID,
    secretKey: process.env.TENCENTCLOUD_SECRET_KEY,
  },
// 使用临时密钥示例
/*
  credential: {
    secretId: "SecretId",
    secretKey: "SecretKey",
    token: "Token",
  }
*/
  region: "",
  profile: {
    httpProfile: {
      endpoint: "tmt.tencentcloudapi.com",
    },
  },
};

// 实例化要请求产品的client对象,clientProfile是可选的
const client = new TmtClient(clientConfig);
const params = {};
client.TextTranslateBatch(params).then(
  (data) => {
    console.log(data);
  },
  (err) => {
    console.error("error", err);
  }
);

注意事项

接口请求域名: tmt.tencentcloudapi.com 。默认接口请求频率限制:5次/秒。超过5次就会报错:

1
our current request times equals to `9` in a second, which exceeds the frequency limit `5` for a second. Please reduce the frequency of calls.

请求频率限制

为了避免请求频率超过限制,可以在代码中添加限流控制。以下是一个简单的限流实现,确保每秒最多发送5个请求:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 添加限流队列控制变量
let requestQueue: Array<() => void> = [];
let isProcessingQueue = false;
let lastRequestTime = 0;

// 限流处理函数 - 确保每秒不超过5个请求
async function processQueue() {
  if (isProcessingQueue || requestQueue.length === 0) return;
  
  isProcessingQueue = true;
  
  while (requestQueue.length > 0) {
    const now = Date.now();
    // 确保请求间隔至少200ms (每秒最多5个请求)
    const timeToWait = Math.max(0, lastRequestTime + 200 - now);
    
    if (timeToWait > 0) {
      await new Promise(resolve => setTimeout(resolve, timeToWait));
    }
    
    const request = requestQueue.shift();
    if (request) {
      lastRequestTime = Date.now();
      request(); // 执行请求
    }
  }
  
  isProcessingQueue = false;
}

// 添加翻译请求到队列
function queueTranslationRequest(params: any): Promise<any> {
  return new Promise((resolve, reject) => {
    const request = () => {
      tmtClient.TextTranslateBatch(params).then(
        (result) => {
          resolve(result);
        },
        (error) => {
          reject(error);
        }
      );
    };
    
    requestQueue.push(request);
    processQueue(); // 开始处理队列
  });
}

这样可以确保每秒最多发送5个请求,避免超过频率限制。

请求参数

请求参数中的SourceTarget 字段需要使用小写的语言代码。因为我的字幕翻译工具箱要适配很多接口,所以也定义了语言代码的映射:

1
2
3
4
5
6
7
// 构建请求参数
  const params = {
    Source: SourceLanguages[inputLanguage].toLowerCase() || 'zh',
    Target: TargetLanguages[OutputLanguage].toLowerCase() || 'en',
    ProjectId: 0,
    SourceTextList: sourceTextList
  };
分享

码农真经
作者
码农真经
Web Developer