您可以通过本文档了解如何通过API估计您在调用模型时使用的token数目。
在语言模型中,token是指将输入的文本分割成的最小单位;token可以是一个单词、一个词组、一个标点符号、一个字符等,不同模型可能有自己的切分方法;
Token计算API仅用于计量和计费的估计,调用不收取费用,请勿在生产环境依赖token计算API。
Token计算
Token计算API是帮助您估算指定文本对应多少token数目的API。在DashScope中,包括通义千问、Llama2等在内的语言模型都是基于用户输入和输出的token数目来进行计量和计费的。在语言模型使用中,字符数目和token数目并不一定是一一对应的,例如在通义千问开源7B模型中:
"苹果"
对应1个token;"my friends"
对应2个token;" 周"
对应3个token。
因此DashScope提供token计算API供您参考。
您也可以通过DashScope提供的token计算器页面,直接获取token的计算结果。
已支持模型列表
其它模型正在支持中,敬请期待。
模型分类 | 对应模型名称 |
通义千问 | |
通义千问开源系列 | 语言模型(仅包括Qwen2.5、Qwen2、Qwen1.5) 代码模型(仅Qwen2.5-Coder) |
llama2-7b-chat-v2 llama2-13b-chat-v2 | |
baichuan2-13b-chat-v1 baichuan2-7b-chat-v1 baichuan-7b-v1 | |
chatglm-6b-v2 chatglm3-6b | |
ziya-llama-13b-v1 | |
belle-llama-13b-2m-v1 | |
chatyuan-large-v2 | |
billa-7b-sft-v1 |
SDK使用
前提条件
已开通服务并获得API-KEY:API-KEY的获取与配置。
已安装最新版SDK:安装DashScope SDK。
我们推荐您将API-KEY配置到环境变量中以降低API-KEY的泄漏风险,详情可参考通过环境变量配置API-KEY。
重要您也可以在代码中配置API-KEY,但是会存在泄露风险。
Token计算
以下示例展示了调用qwen-turbo模型的tokenizer对一个用户指令进行token计算的代码。
from http import HTTPStatus
import dashscope
import os
def tokenizer():
response = dashscope.Tokenization.call(
model='qwen-turbo',
messages=[{'role': 'user', 'content': '你好?'}],
api_key=os.getenv("DASHSCOPE_API_KEY"),
)
if response.status_code == HTTPStatus.OK:
print('Result is: %s' % response)
else:
print('Failed request_id: %s, status_code: %s, code: %s, message:%s' %
(response.request_id, response.status_code, response.code,
response.message))
if __name__ == '__main__':
tokenizer()
// Copyright (c) Alibaba, Inc. and its affiliates.
import java.lang.System;
import com.alibaba.dashscope.common.Message;
import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.tokenizers.Tokenization;
import com.alibaba.dashscope.tokenizers.TokenizationResult;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
public static void tokenizer() throws ApiException, NoApiKeyException, InputRequiredException {
Tokenization tokenizer = new Tokenization();
Message userMsg = Message.builder()
.role(Role.USER.getValue())
.content("你好?")
.build();
GenerationParam param = GenerationParam.builder()
.model(Tokenization.Models.QWEN_TURBO)
.messages(Arrays.asList(userMsg))
.apiKey(System.getenv("DASHSCOPE_API_KEY")) // 如果您没有配置环境变量,可以在这里配置API-KEY
.build();
TokenizationResult result = tokenizer.call(param);
System.out.println(JsonUtils.toJson(result));
}
public static void main(string[] args) {
try {
tokenizer();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.println(string.format("Exception %s", e.getMessage()));
}
System.exit(0);
}
}
参数配置
参数 | 类型 | 默认值 | 说明 |
model | string | - | 用户使用model参数指明对应的模型,目前可选的模型见已支持模型列表。 |
prompt | string | - | 用户当前输入的期望模型执行指令。 |
messages | list | - | 用户与模型的对话历史。list中的每个元素形式为 |
返回结果
返回结果示例
{ "status_code": 200, "request_id": "2ecfce1f-b7af-9b3a-9482-01e4a5511e8f", "code": "", "message": "", "output": { "token_ids": [ 108386, 11319 ], "tokens": [ "你好", "?" ] }, "usage": { "input_tokens": 2 } }
返回参数说明
返回参数
类型
说明
status_code
int
200(HTTPStatus.OK)
表示请求成功,否则表示请求失败,可以通过code
获取错误码,通过message
字段获取错误详细信息。request_Id
string
系统生成的标志本次调用的ID。
code
string
表示请求失败,表示错误码,成功忽略。
message
string
失败,表示失败详细信息,成功忽略。
output
dict
调用结果信息。
output.token_ids
list[int]
本次输入文本对应的Token_ids。
output.tokens
list[string]
本次输入文本对应的Tokens。
usage.input_tokens
int
输入文本对应的Token数目。
HTTP调用接口
功能描述
Token计算API也同时提供了HTTP
接口,您可以根据自己的需求选择。
为了方便用户的使用,DashScope提供的Token计算API和具体模型的调用API几乎一致,唯一不同的地方是服务的URL不同。用户完全可以复用之前调用模型的参数,更换接口的URL即可。
前提条件
已开通服务并获得API-KEY:API-KEY的获取与配置。
我们推荐您将API-KEY配置到环境变量中以降低API-KEY的泄漏风险,详情可参考通过环境变量配置API-KEY。
重要您也可以在代码中配置API-KEY,但是会存在泄露风险。
提交接口调用
POST https://dashscope.aliyuncs.com/api/v1/tokenizer
入参描述
传参方式 | 字段 | 类型 | 必选 | 描述 | 示例值 |
Header | Content-Type | string | 是 | 请求类型:application/json。 | application/json |
Authorization | string | 是 | API-Key,例如:Bearer d1**2a。 | Bearer d1**2a | |
Body | model | string | 是 | 指明需要调用的模型,目前可选的模型见“已支持模型列表”。 | qwen-turbo |
input.prompt | string | prompt和messages仅二选一。 | 输入文本。为了避免用户调用模型API和token API拼接不同的参数格式,Token API在参数上兼容了模型API的写法,prompt和messages均可作为输入文本。 | hello, who are you? | |
input.messages | list |
| |||
| string | messages存在的时候不能为空。 | |||
| string |
出参描述
字段 | 类型 | 描述 | 示例值 |
output.token_ids | list | 本次输入文本对应的token_ids。 |
|
output.tokens | list | 本次输入文本对应的tokens。 |
|
usage.input_tokens | int | 输入文本对应的token数目。 | 26 |
request_id | string | 本次请求的系统唯一码。 | 415018a6-4c64-95ea-8ec7-98436f4c16b6 |
请求示例
以下示例展示通过CURL命令来调用token计算API的脚本。
curl --location 'https://dashscope.aliyuncs.com/api/v1/tokenizer' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen-plus",
"input":{
"messages":[
{
"role": "user",
"content": "北京有哪些好玩地方?"
},
{
"role": "assistant",
"content": "故宫、颐和园、天坛等都是可以去游玩的景点哦。"
},
{
"role": "user",
"content": "帮我安排一些行程"
}
]
},
"parameters": {
}
}'
响应示例
{
"output": {
"token_ids": [
68990,
104719,
108257,
100371,
11319,
113508,
5373,
113085,
33108,
99354,
5373,
35727,
101152,
49567,
100132,
73670,
85336,
109280,
9370,
105869,
104170,
1773,
108965,
103956,
101883,
106318
],
"tokens": [
"北京",
"有哪些",
"好玩",
"地方",
"?",
"故宫",
"、",
"颐",
"和",
"园",
"、",
"天",
"坛",
"等",
"都是",
"可以",
"去",
"游玩",
"的",
"景点",
"哦",
"。",
"帮我",
"安排",
"一些",
"行程"
]
},
"usage": {
"input_tokens": 26
},
"request_id": "aeabe685-5e87-9c32-93f4-21396c5656f2"
}
异常响应示例
在访问请求出错的情况下,输出的结果中会通过code
和message
指明出错原因。
{
"code":"InvalidApiKey",
"message":"Invalid API-key provided.",
"request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}
状态码说明
DashScope通用状态码请查阅:返回状态码说明。