ChatGPT丨使用tiktoken计算tokens

fe6478fb44d531a1d16ff0ad46952079.png

现在我们使用tiktoken来计算对应的tokens,tiktoken是OpenAI开源的一个快速分词工具。它将一个文本字符串(例如“tiktoken很棒!”)和一个编码(例如“cl100k_base”)作为输入,然后将字符串拆分为标记列表(例如["t","ik","token"," is"," great","!"])。

编码

编码指定如何将文本转换为tokens。不同的模型使用不同的编码。

9dba59104d3d4f8158f157351de90dfc.jpeg

可以使用tiktoken.encoding_for_model()检索模型的编码,如下所示:

encoding = tiktoken.encoding_for_model('gpt-3.5-turbo')

请注意,p50k_base与r50k_base重叠很大,在非代码应用中,它们通常会给出相同的tokens。

字符串通常如何进行分词

在英语中,标记的长度通常从一个字符到一个单词不等(例如“t”或“great”),尽管在某些语言中,标记可以比一个字符更短或比一个单词更长。空格通常与单词的开头分组(例如“is”而不是“ is”或“+”“is”)。您可以在OpenAI Tokenizer(https://platform.openai.com/tokenizer)上快速检查字符串的分词方式。

0. 安装 tiktoken

%pip install --upgrade tiktoken

1.引用 tiktoken

import tiktoken

2. 加载编码

使用tiktoken.get_encoding()方法按名称加载一种编码。

第一次运行此方法时,需要连接互联网下载,之后的运行将不需要网络连接。

encoding = tiktoken.get_encoding("cl100k_base")

使用tiktoken.encoding_for_model()方法,自动加载给定模型名称对应的正确编码。

encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")

3. 放入文本

.encode()方法将文本字符串转换为标记整数列表。

encoding.encode("tiktoken is great!")

0e8e59fced65096320991e27b3020e66.png

4.计算调用的token消耗

通过计算.encode()方法返回的列表长度来计算tokens。

def num_tokens_from_string(string: str, encoding_name: str) -> int:
    """Returns the number of tokens in a text string."""
    encoding = tiktoken.get_encoding(encoding_name)
    num_tokens = len(encoding.encode(string))
    return num_tokens
    
num_tokens_from_string("tiktoken is great!", "cl100k_base")

37bd4659686ddfc882056eda875f60c9.png

这里”tiktoken is great!“ 使用了6个tokens

与openAI的Tokenizer对比:

b6e5aab4af51960d9d3c4f55b5aef947.png

发现18个字符,使用了6个Tokens。

总结:

官网已经有了Tokenizer,可以计算出使用Tokens,而为什么还要写这篇文章来自己计算tokens呢?

将文本字符串拆分成tokens是有价值的,因为GPT模型使用tokens表示文本。了解文本字符串中有多少tokens可以告诉我们:

  1. 该字符串是否太长以至于文本模型无法处理;

  2. OpenAI API调用的费用(因为使用费用按token计算)。

最后,想入群ChatGPT嗨玩俱乐部一起抱团学习的欢迎添加我的微信,备注入群ChatGPT

911962f2a0ca740a0349bc06c71c06b9.png

创作不易,您的关注转发点赞在看是我坚持下来的动力

<think>好的,我现在需要帮助用户解决如何计算URL中的tokens的问题。首先,我得理解用户的具体需求。他们提到URL中涉及的tokens,可能是指在使用某些API时,URL中包含的访问令牌(如API密钥或访问令牌)的计算方法,或者是自然语言处理中URL作为文本时的token计数。根据用户提供的引用内容,引用[1]提到了免费tokens链接,引用[3][4]涉及GitLab访问令牌API的使用,所以可能需要考虑这两方面的情况。 首先,我需要明确“计算URL中的tokens”具体指的是什么。如果是计算URL中访问令牌的生成或使用,比如GitLab的个人访问令牌,可能需要按照引用[3]中的步骤生成,而计算可能涉及权限范围、有效期等。但如果是处理URL作为文本时的token数量,比如在NLP模型中,用户可能想知道如何统计URL字符串占用的tokens数,这在调用如GPT模型时很重要,因为费用与token数量相关。 接下来,我需要检查用户提供的引用内容是否有相关信息。引用[4]提到通过Dify连接模型并使用API,这可能涉及将URL作为输入时的处理。但引用中没有直接说明如何计算URL的tokens,所以可能需要结合一般知识来回答。 如果是API访问令牌,如GitLab的访问令牌,计算可能不涉及长度或数量,而是生成管理。但用户的问题是关于“计算”,可能更倾向于统计URL字符串的token数量。例如,在OpenAI的模型中,一个token大约相当于4个字符,URL作为字符串会被分词处理。不同的分词方式会影响token数量,比如较长的URL可能被拆分成多个tokens。 需要分情况讨论:1. URL作为访问令牌的参数,如?token=xxx,这里的token值可能需要按生成规则计算;2. URL整体作为文本时的token计数。根据用户提供的引用,可能更偏向于第二种情况,尤其是在使用API处理URL时如何计算其消耗的tokens。 然后,我需要验证是否有工具或方法可以计算URL的tokens。例如,OpenAI提供了tiktoken库,可以用于统计文本的token数量。用户可能需要将URL字符串输入该库来获取准确计数。此外,需要注意不同模型的分词器可能不同,比如GPT-3GPT-4可能有不同的分词方式。 还需要考虑URL的结构是否影响token数量。例如,特殊字符如斜杠、点等可能被分词器处理为单独的tokens,或者与相邻字符合并。例如,"https://"可能被分成一个token,而路径部分可能被拆分成多个。 总结回答的结构:先区分两种情况(访问令牌本身的计算 vs URL作为文本的token计数),然后分别说明。根据用户引用内容,可能重点在第二种情况,并提供具体方法,如使用tiktoken库,或在线工具,同时提醒注意事项如不同模型的分词差异。 最后,生成相关问题,确保覆盖用户可能感兴趣的扩展内容,比如优化token使用、不同模型的分词区别等。</think>要计算URL中的tokens,需根据具体场景选择方法。以下是两种主要情况的处理方式: ### 一、URL作为访问令牌参数 当URL中包含形如`?token=<value>`的访问令牌时: 1. **令牌生成规则**:按引用[3]所述,访问令牌由系统按指定字符集(如字母+数字+符号)生成,长度由系统预设(如GitLab默认20字符) 2. **计算逻辑**:假设令牌长度为$n$,字符集大小$k$,则理论组合数为$k^n$。例如使用62种字符(26大写+26小写+10数字)的8位令牌,组合数为$62^8≈2.18×10^{14}$ ### 二、URL作为文本时的NLP tokens计算 当需要统计URL字符串在NLP模型中的token消耗时: 1. **使用分词工具**:如OpenAI的`tiktoken`库 ```python import tiktoken encoder = tiktoken.encoding_for_model("gpt-4") url = "https://example.com/api?token=abc123" tokens = encoder.encode(url) print(len(tokens)) # 输出token数量 ``` 2. **在线估算工具**:通过[OpenAI Tokenizer](https://platform.openai.com/tokenizer)输入URL可直接查看分词结果 3. **经验公式**:英文场景下约$token≈char/4$,但特殊符号可能增加token数。例如`https://`可能被拆分为`['http', 's', '://']`等多个tokens[^4] ### 注意事项 1. **编码差异**:不同模型分词器结果不同,如`cl100k_base`(GPT-4)与`p50k_base`(GPT-3)的分词粒度存在差异 2. **缩短策略**:可对URL进行编码压缩,如将`https://`简写为`h://`,最多可减少6个tokens(从3 tokens降为1 token)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值