文档

计量计费

更新时间:

在您调用通义千问的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的计量会有额外的增加。常见的情况有:

  1. 搜索增强。当搜索增强参数(enable_search)被配置时,触发搜索本身会需要额外的prompt和插件调用,同时搜索的结果在输入到模型时,也会被计入输入token计数;

  2. 插件调用。当插件被调用时,会有额外的触发插件调用所需要的指令,这些都会被计入token数目;

  3. 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-v1qwen-v1计费与qwen-turbo保持一致。qwen-v1模型已弃用,请使用qwen-turbo

  • qwen-plus原来为qwen-plus-v1qwen-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

以下条件任何一个超出都会触发限流:

  • 调用频次 ≤ 500 QPM,每分钟不超过500次API调用;

  • Token消耗 ≤ 500,000 TPM,每分钟消耗的token数目不超过500,000。

qwen-turbo超出基础限流配额点此申请

qwen-plus

以下条件任何一个超出都会触发限流:

  • 调用频次 ≤ 200 QPM,每分钟不超过200次API调用;

  • Token消耗 ≤ 200,000 TPM,每分钟消耗的token数目不超过200,000。

qwen-plus超出基础限流配额点此申请

qwen-max

以下条件任何一个超出都会触发限流(限时免费开放中,限流策略可能随时变化):

  • 调用频次 ≤ 60 QPM,每分钟不超过60次API调用;

  • Token消耗 ≤ 100,000 TPM,每分钟消耗的token数目不超过100,000。

qwen-max超出基础限流配额点此申请

qwen-max-0428

qwen-max-0403

暂无

qwen-max-0107

以下条件任何一个超出都会触发限流(限时免费开放中,限流策略可能随时变化):

  • 调用频次 ≤ 10 QPM,每分钟不超过10次API调用;

  • Token消耗 ≤ 20,000 TPM,每分钟消耗的token数目不超过20,000。

暂无

qwen-max-longcontext

以下条件任何一个超出都会触发限流(限时免费开放中,限流策略可能随时变化):

  • 调用频次 ≤ 5 QPM,每分钟不超过5次API调用;

  • Token消耗 ≤ 1,500,000 TPM,每分钟消耗的token数目不超过1,500,000。

暂无

查看账单

有关DashScope灵积模型服务的账单时效信息请参阅计量计费规则

有关账单详情请前往阿里云用户中心查询。

  • 本页导读 (0)
文档反馈