在您调用通义千问的API时会产生一定的费用,模型调用也有限流条件。本文介绍了计费单元、计费单价、您可免费使用的额度以及模型的限流条件。
通义千问
计费单元
模型服务 | 计费单元 |
通义千问 | token |
Token是模型用来表示自然语言文本的基本单位,可以直观地理解为“字”或“词”。对于中文文本来说,千问模型的1个token平均对应1.5-1.8个汉字;对于英文文本来说,1个token通常对应一个单词或词根。
通义千问模型服务根据模型输入和输出的总token数量进行计量计费,其中多轮对话中的所有messages作为输入都会进行计量计费。每一次模型调用产生的实际token数量可以从 response 中获取。
字符串与token之间的互相转换
不同的大模型切分token的方法可能不同。您可以使用SDK在本地查看经过通义千问模型切分后的token数据。
# 运行前请 pip install tiktoken
from dashscope import get_tokenizer # dashscope版本 >= 1.14.0
# 获取tokenizer对象,目前只支持通义千问系列模型
tokenizer = get_tokenizer('qwen-turbo')
input_str = '通义千问具有强大的能力。'
# 将字符串切分成token并转换为token id
tokens = tokenizer.encode(input_str)
print(f"经过切分后的token id为:{tokens}。")
# 经过切分后的token id为: [31935, 64559, 99320, 56007, 100629, 104795, 99788, 1773]
print(f"经过切分后共有{len(tokens)}个token")
# 经过切分后共有8个token
# 将token id转化为字符串并打印出来
for i in range(len(tokens)):
print(f"token id为{tokens[i]}对应的字符串为:{tokenizer.decode(tokens[i])}")
// Copyright (c) Alibaba, Inc. and its affiliates.
// dashscope SDK版本 >= 2.13.0
import java.util.List;
import com.alibaba.dashscope.exception.NoSpecialTokenExists;
import com.alibaba.dashscope.exception.UnSupportedSpecialTokenMode;
import com.alibaba.dashscope.tokenizers.Tokenizer;
import com.alibaba.dashscope.tokenizers.TokenizerFactory;
public class Main {
public static void testEncodeOrdinary(){
Tokenizer tokenizer = TokenizerFactory.qwen();
String prompt ="如果现在要你走十万八千里路,需要多长的时间才能到达? ";
// encode string with no special tokens
List<Integer> ids = tokenizer.encodeOrdinary(prompt);
System.out.println(ids);
String decodedString = tokenizer.decode(ids);
assert decodedString == prompt;
}
public static void testEncode() throws NoSpecialTokenExists, UnSupportedSpecialTokenMode{
Tokenizer tokenizer = TokenizerFactory.qwen();
String prompt = "<|im_start|>system\nYour are a helpful assistant.<|im_end|>\n<|im_start|>user\nSanFrancisco is a<|im_end|>\n<|im_start|>assistant\n";
// encode string with special tokens <|im_start|> and <|im_end|>
List<Integer> ids = tokenizer.encode(prompt, "all");
// 24 tokens [151644, 8948, 198, 7771, 525, 264, 10950, 17847, 13, 151645, 198, 151644, 872, 198, 23729, 80328, 9464, 374, 264, 151645, 198, 151644, 77091, 198]
String decodedString = tokenizer.decode(ids);
System.out.println(ids);
assert decodedString == prompt;
}
public static void main(String[] args) {
try {
testEncodeOrdinary();
testEncode();
} catch (NoSpecialTokenExists | UnSupportedSpecialTokenMode e) {
e.printStackTrace();
}
}
}
python 输出为
经过切分后的token id为:[31935, 64559, 99320, 56007, 100629, 104795, 99788, 1773]。
经过切分后共有8个token
token id为31935对应的字符串为:通
token id为64559对应的字符串为:义
token id为99320对应的字符串为:千
token id为56007对应的字符串为:问
token id为100629对应的字符串为:具有
token id为104795对应的字符串为:强大的
token id为99788对应的字符串为:能力
token id为1773对应的字符串为:。
本地运行的tokenizer可以用来估计文本的token量,但是得到的结果不保证与模型服务端完全一致,仅供参考。如果您对通义千问的tokenizer细节感兴趣,请参考: tokenizer参考
输入token的计算逻辑
输入token的计量数目中,除了包含用户的原始输入所对应的token,还会包括将原始输入根据chatml格式进行格式化所需要引入的special token。
随着模型能力的迭代,这部分计算逻辑可能会进行演变和调整
基础调用
在用户未试图调用插件时,token计数将包含system、user和历史轮的assistant,以及对输入进行格式化组装需要的special token。例如,在用户输入为:
[
{
"role": "user",
"content": "hi"
}
]
则token计数基于如下prompt进行,对应9个token:
<|im_start|>user\nhi<|im_end|>\n<|im_start|>assistant\n
再例如用户输入为:
[
{
"role": "system",
"content": "you are a bot."
},
{
"role": "user",
"content": "hi"
},
{
"role": "assistant",
"content": "Hello! How can I assist you today?"
},
{
"role": "user",
"content": "who are you"
}
]
则token计数基于如下prompt进行,对应41个token
<|im_start|>system\nyou are a bot.<|im_end|>\n<|im_start|>user\nhi<|im_end|>\n<|im_start|>assistant\nHello! How can I assist you today?<|im_end|>\n<|im_start|>user\nwho are you<|im_end|>\n<|im_start|>assistant\n
高级调用
当用户的请求涉及插件调用时,会额外引入prompt来引导模型做出正确的回应。此时token的计量会有额外的增加。常见的情况有:
搜索增强。当搜索增强参数(enable_search)被配置时,触发搜索本身会需要额外的prompt和插件调用,同时搜索的结果在输入到模型时,也会被计入输入token计数;
插件调用。当插件被调用时,会有额外的触发插件调用所需要的指令,这些都会被计入token数目;
function call。当使用function call功能时,会有额外的引导指令,这些也都会被计入token数目。
计费单价
模型服务 | 模型名 | 计费单价 |
通义千问 | qwen-turbo | 0.008元/1,000 tokens |
qwen-plus | 0.02元/1,000 tokens | |
qwen-max-0428 | 限时免费中 | |
qwen-max | 0.12元/1,000 tokens | |
qwen-max-0403 | ||
qwen-max-0107 | ||
qwen-max-longcontext |
qwen-turbo原来为qwen-v1。qwen-v1计费与qwen-turbo保持一致。qwen-v1模型已弃用,请使用qwen-turbo。
qwen-plus原来为qwen-plus-v1。qwen-plus-v1计费与qwen-plus保持一致。qwen-plus-v1模型已弃用,请使用qwen-plus。
免费额度
模型服务 | 模型名 | 免费额度 |
通义千问 | qwen-turbo | 开通DashScope即获赠总计2,000,000 tokens限时免费使用额度,有效期180天。 |
qwen-plus | 开通DashScope即获赠总计1,000,000 tokens限时免费使用额度,有效期180天。 | |
qwen-max | 开通DashScope即获赠总计1,000,000 tokens限时免费使用额度,有效期30天。 | |
qwen-max-0428 | ||
qwen-max-0403 | ||
qwen-max-0107 | ||
qwen-max-longcontext |
基础限流
为了保证用户调用模型的公平性,通义千问对于普通用户设置了基础限流。限流是基于模型维度的,并且和调用用户的阿里云主账号相关联,按照该账号下所有API-KEY调用该模型的总和计算限流。如果超出调用限制,用户的API请求将会因为限流控制而失败,用户需要等待一段时间待满足限流条件后方能再次调用。
通常情况下,基础限流可以满足大部分客户的应用场景,如果您有超过基础限流配额的访问需求,请使用下面表单中的方式额外提交申请。
模型服务 | 模型名 | 基础限流 | 超出基础限流申请方式 |
通义千问 | qwen-turbo | 以下条件任何一个超出都会触发限流:
| |
qwen-plus | 以下条件任何一个超出都会触发限流:
| ||
qwen-max | 以下条件任何一个超出都会触发限流(限时免费开放中,限流策略可能随时变化):
| ||
qwen-max-0428 | |||
qwen-max-0403 | 暂无 | ||
qwen-max-0107 | 以下条件任何一个超出都会触发限流(限时免费开放中,限流策略可能随时变化):
| 暂无 | |
qwen-max-longcontext | 以下条件任何一个超出都会触发限流(限时免费开放中,限流策略可能随时变化):
| 暂无 |
查看账单
有关DashScope灵积模型服务的账单时效信息请参阅计量计费规则。
有关账单详情请前往阿里云用户中心查询。
- 本页导读 (0)