所有文章 > 学习各类API > 如何获取腾讯AI开放平台访问密钥分步指南
如何获取腾讯AI开放平台访问密钥分步指南

如何获取腾讯AI开放平台访问密钥分步指南

在当今数字化转型的洪流中,高效、智能的数据处理与分析服务已成为驱动各行各业创新发展的关键力量。腾讯AI开放平台,作为业界领先的AI技术服务平台,凭借其丰富的算法模型、广泛的应用场景以及卓越的性能表现,正日益成为广大企业与开发者信赖的首选。为了帮助大家更好地掌握并充分利用这一强大资源,本文特推出“如何获取腾讯AI开放平台访问密钥分步指南”。通过一系列条理清晰、操作简便的步骤,我们将引导您逐步完成访问密钥的获取过程,让您轻松解锁腾讯AI开放平台的全部潜能,为您的项目或应用注入强大的AI能力。无论您是在寻求智能客服、图像识别、自然语言处理还是其他AI技术方面的支持,获取这一访问密钥都将是您迈向智能化转型的重要一步。

1. 登录/注册腾讯AI开放平台

2. 申请安全凭证

1. 在云 API 密钥页面,单击【新建密钥】即可以创建一对 SecretId/SecretKey。

2. 在弹窗里复制密钥

安全凭证包括 SecretId 和 SecretKey:

  • SecretId 用于标识 API 调用者身份
  • SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。
  • 用户必须严格保管安全凭证,避免泄露。

3. 生成签名串

有了安全凭证 SecretId 和 SecretKey 后,就可以生成签名串了。以下是使用签名方法 v1 生成签名串的详细过程:

假设用户的 SecretId 和 SecretKey 分别是:

  • SecretId: AKID********************************
  • SecretKey: ********************************

注意:这里只是示例,请根据用户实际申请的 SecretId 和 SecretKey 进行后续操作!

以云服务器查看实例列表(DescribeInstances)请求为例,当用户调用这一接口时,其请求参数可能如下:

参数名称中文参数值
Action方法名DescribeInstances
SecretId密钥 IDAKID********************************
Timestamp当前时间戳1465185768
Nonce随机正整数11886
Region实例所在区域ap-guangzhou
InstanceIds.0待查询的实例 IDins-09dx96dg
Offset偏移量0
Limit最大允许输出20
Version接口版本号2017-03-12

这里只展示了部分公共参数和接口输入参数,用户可以根据实际需要添加其他参数,例如 Language 和 Token 公共参数。

3.1. 对参数排序

首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:1)只按参数名进行排序,参数值保持对应即可,不参与比大小;2)按 ASCII 码比大小,如 InstanceIds.2 要排在 InstanceIds.12 后面,不是按字母表,也不是按数值。用户可以借助编程语言中的相关排序函数来实现这一功能,如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:

{
'Action' : 'DescribeInstances',
'InstanceIds.0' : 'ins-09dx96dg',
'Limit' : 20,
'Nonce' : 11886,
'Offset' : 0,
'Region' : 'ap-guangzhou',
'SecretId' : 'AKID********************************',
'Timestamp' : 1465185768,
'Version': '2017-03-12',
}

使用其它程序设计语言开发时,可对上面示例中的参数进行排序,得到的结果一致即可。

3.2. 拼接请求字符串

此步骤生成请求字符串。
将把上一步排序好的请求参数格式化成“参数名称=参数值”的形式,如对 Action 参数,其参数名称为 “Action” ,参数值为 “DescribeInstances” ,因此格式化后就为 Action=DescribeInstances 。
注意:“参数值”为原始值而非 url 编码后的值。

然后将格式化后的各个参数用”&”拼接在一起,最终生成的请求字符串为:

Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Timestamp=1465185768&Version=2017-03-12

3.3. 拼接签名原文字符串

此步骤生成签名原文字符串。
签名原文字符串由以下几个参数构成:

  1. 请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。
  2. 请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。
  3. 请求路径: 当前版本云API的请求路径固定为 / 。
  4. 请求字符串: 即上一步生成的请求字符串。

签名原文串的拼接规则为:请求方法 + 请求主机 +请求路径 + ? + 请求字符串

示例的拼接结果为:

GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Timestamp=1465185768&Version=2017-03-12

3.4. 生成签名串

此步骤生成签名串。
首先使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。

具体代码如下,以 PHP 语言为例:

$secretKey = '********************************';
$srcStr = 'GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Timestamp=1465185768&Version=2017-03-12';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));
echo $signStr;

最终得到的签名串为:

9FzTQAN1UZ489+BqCg1fNBQaCqw=

使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。

alt

4. 签名串编码

生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。

如上一步生成的签名串为 9FzTQAN1UZ489+BqCg1fNBQaCqw= ,最终得到的签名串请求参数(Signature)为:9FzTQAN1UZ489%2BBqCg1fNBQaCqw%3D,它将用于生成最终的请求 URL。

注意:如果用户的请求方法是 GET,或者请求方法为 POST 同时 Content-Type 为 application/x-www-form-urlencoded,则发送请求时所有请求参数的值均需要做 URL 编码,参数键和=符号不需要编码。非 ASCII 字符在 URL 编码前需要先以 UTF-8 进行编码。

注意:有些编程语言的网络库会自动为所有参数进行 urlencode,在这种情况下,就不需要对签名串进行 URL 编码了,否则两次 URL 编码会导致签名失败。

注意:其他参数值也需要进行编码,编码采用 RFC 3986。使用 %XY 对特殊字符例如汉字进行百分比编码,其中“X”和“Y”为十六进制字符(0-9 和大写字母 A-F),使用小写将引发错误。

点击右上角账号,下拉列表选择【密钥管理】-点击【新建密钥】,可获取访问密钥(Access Key ID、Secret Access Key)。后续可使用此密钥调用接口,请您妥善保管。

5. 签名演示

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Random;
import java.util.TreeMap;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

public class TencentCloudAPIDemo {
private final static String CHARSET = "UTF-8";

public static String sign(String s, String key, String method) throws Exception {
Mac mac = Mac.getInstance(method);
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(CHARSET), mac.getAlgorithm());
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(s.getBytes(CHARSET));
return DatatypeConverter.printBase64Binary(hash);
}

public static String getStringToSign(TreeMap<String, Object> params) {
StringBuilder s2s = new StringBuilder("GETcvm.tencentcloudapi.com/?");
// 签名时要求对参数进行字典排序,此处用TreeMap保证顺序
for (String k : params.keySet()) {
s2s.append(k).append("=").append(params.get(k).toString()).append("&");
}
return s2s.toString().substring(0, s2s.length() - 1);
}

public static String getUrl(TreeMap<String, Object> params) throws UnsupportedEncodingException {
StringBuilder url = new StringBuilder("https://cvm.tencentcloudapi.com/?");
// 实际请求的url中对参数顺序没有要求
for (String k : params.keySet()) {
// 需要对请求串进行urlencode,由于key都是英文字母,故此处仅对其value进行urlencode
url.append(k).append("=").append(URLEncoder.encode(params.get(k).toString(), CHARSET)).append("&");
}
return url.toString().substring(0, url.length() - 1);
}

public static void main(String[] args) throws Exception {
TreeMap<String, Object> params = new TreeMap<String, Object>(); // TreeMap可以自动排序
// 实际调用时应当使用随机数,例如:params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE));
params.put("Nonce", 11886); // 公共参数
// 实际调用时应当使用系统当前时间,例如: params.put("Timestamp", System.currentTimeMillis() / 1000);
params.put("Timestamp", 1465185768); // 公共参数
// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************
params.put("SecretId", System.getenv("TENCENTCLOUD_SECRET_ID")); // 公共参数
params.put("Action", "DescribeInstances"); // 公共参数
params.put("Version", "2017-03-12"); // 公共参数
params.put("Region", "ap-guangzhou"); // 公共参数
params.put("Limit", 20); // 业务参数
params.put("Offset", 0); // 业务参数
params.put("InstanceIds.0", "ins-09dx96dg"); // 业务参数
// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************
params.put("Signature", sign(getStringToSign(params), System.getenv("TENCENTCLOUD_SECRET_KEY"), "HmacSHA1")); // 公共参数
System.out.println(getUrl(params));
}
}

6. 返回结果

{
"Response": {
"TotalCount": 0,
"InstanceStatusSet": [],
"RequestId": "b5b41468-520d-4192-b42f-595cc34b6c1c"
}
}
  • Response 及其内部的 RequestId 是固定的字段,无论请求成功与否,只要 API 处理了,则必定会返回。
  • RequestId 用于一个 API 请求的唯一标识,如果 API 出现异常,可以联系 腾讯云客服 或 提交工单,并提供该 ID 来解决问题。
  • 除了固定的字段外,其余均为具体接口定义的字段,不同的接口所返回的字段参见接口文档中的定义。此例中的 TotalCount 和 InstanceStatusSet 均为 DescribeInstancesStatus 接口定义的字段,由于调用请求的用户暂时还没有云服务器实例,因此 TotalCount 在此情况下的返回值为 0, InstanceStatusSet 列表为空。


}
res = service.json(‘translate’, {}, json.dumps(body))
print(json.loads(res))

7. 常见问题

Q:如何找到腾讯AI

A:幂简集成是国内领先的API集成管理平台,专注于为开发者提供全面、高效、易用的API集成解决方案。幂简API平台可以通过以下两种方式找到所需API:通过关键词搜索API(例如,输入’腾讯AI‘这类品类词,更容易找到结果)、或者从API hub分类页进入寻找。

Q:NLP 服务的优势是什么?
A:我们的优势可以概括为三个方面:

语料上,NLP 服务多年来专注中文自然语言处理,在不同场景下积累了千亿级互联网语料。

技术上,整合了腾讯内部优秀的 NLP 能力,拥有数千篇相关技术专利和论文。

服务上,NLP 服务曾为数个腾讯亿级用户产品提供坚实的服务支撑。

Q:NLP 服务是否收费?
A:NLP 服务,已于2023年4月25日正式开始新的收费标准。基础 NLP 服务(词法分析、相似词召回、词相似度、句子相似度),将为每个腾讯云账号提供累计5万次的免费调用额度;高级 NLP 服务(文本润色、句子纠错、文本补全、句子生成),将为每个腾讯云账号提供累计1000次的免费调用额度。

Q:NLP 服务如何接入使用?
A:我们提供完备的 API 服务以及对应的 SDK ,您只要注册了腾讯云账号,即可按照 API 文档 接入使用,并可在我们的产品控制台上看到对应的使用数据。

Q:NLP 服务有免费额度吗?
A:基础 NLP 服务(词法分析、相似词召回、词相似度、句子相似度),将为每个腾讯云账号提供累计5万次的免费调用额度;高级 NLP 服务(文本润色、句子纠错、文本补全、句子生成),将为每个腾讯云账号提供累计1000次的免费调用额度。

Q:腾讯AI的替代品有哪些?

提供AI大模型API的服务商除了腾讯AI,还有其他替代服务商也提供类似api服务,例如:

360多模态大语言模型语音大模型服务MiniMax-稀宇科技通用大模型开放平台-华藏讯飞星火认知大模型

更多竞品可以在幂简集成开放平台中找到。

Q:腾讯AI这个密钥还适用于哪些api?

人脸识别图像创作机器翻译 TMT

8.  总结

本文旨在为开发者们提供一份详尽且实用的“如何获取腾讯AI开放平台访问token分步指南”。从腾讯AI平台账号的注册,到开发者身份的认证,再到API服务密钥的成功获取,本文覆盖了整个流程的每一个关键环节,并配以清晰的步骤说明和详尽的操作指导,确保了每位开发者都能轻松上手,顺利完成每一步操作。此外,本文还特别强调了密钥获取后的可用性测试步骤,这是确保API能够顺利集成到应用中,并发挥最佳效果的重要保障。通过这一指南,开发者们不仅能够快速掌握获取腾讯AI访问token的方法,还能学会如何有效地进行后续的应用集成与测试,从而充分发挥腾讯AI开放平台的强大功能。本文为开发者们提供了一个全面、实用的指南,帮助他们轻松获取腾讯AI密钥,并将这一先进的数据处理能力有效集成到应用中,从而提升应用的智能化水平,优化用户体验,为数字化转型之路增添强劲动力。

#你可能也喜欢这些API文章!