您可以通過本文檔了解如何通過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通用狀態碼請查閱:返回狀態碼說明。