前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何计算文档会消耗的Token数量?

如何计算文档会消耗的Token数量?

作者头像
AIGC部落
发布2024-06-24 20:02:33
620
发布2024-06-24 20:02:33
举报
文章被收录于专栏:Dance with GenAIDance with GenAI

在AI的世界里,"token"就像是把我们说的话或写的文字拆分成的小块块,每块可以是一个词、一个短语、一个标点,甚至一个字母。不同的AI系统可能有不同的拆分方法。

阿里云的灵积平台有个工具,叫做Token计算器。这个工具就是用来帮我们估算一段文字里有多少个这样的小块块。这个工具是免费的,用来帮助我们大概知道要花多少钱,但它只是个估计,可能不是完全准确的。

比如,在灵积平台的一些AI模型里,像通义千问、Llama2这样的,它们算钱是根据我们输入和输出的小块块数量来的。有时候,一个字符可能就代表一个小块块,有时候可能几个字符才代表一个。比如说,在通义千问的一个模型里:

- "苹果"这个词,算作1个小块块;

- "my friends"这个短语,算作3个小块块;

- "周"这个字,虽然只有一个字,但也被算作3个小块块。

我们可以让AI写一个程序来调用这个token计算API来自动计算文档的token数量。

在deepseek中输入提示词:

你是一个Python编程专家,现在要完成一个编写基于qwen-turbo模型Token计算API和dashscope库的程序脚本,具体步骤如下:

打开文件夹:F:\AI自媒体内容\待翻译;

逐个读取里面的TXT文档文件名,设为变量{txtfilename};

将每个TXT文档的内容作为输入,API Key为:XXX,model为qwen-turbo;

请求的输入长度范围应当在[1, 6000]之间,如果超长,需要对TXT内容分拆成多份,使单个输入内容不超过6000个字符,然后再一个个发送至API,接收API返回的结果;

接收API返回的结果usage.input_tokens(这是输入文本对应的token数目),如果文本长度低于6000字符,直接输出信息:{txtfilename}这篇文档的Token数量估计为{usage.input_tokens}个;如果文本长度大于6000字符,将分拆的各个txt文档的Token数目加总在一起,设为变量{totalusagetokens},输出信息:{txtfilename}这篇文档的Token数量估计为{totalusagetokens};

最后,把所有的{totalusagetokens}求和,设为变量{finaltotalusagetokens},然后输出信息:这些文档一共Token数量估计为{finaltotalusagetokens}

注意:

每一步都要打印相关的信息;

根据API的限流和请求要求,合理安排任务的发送频率,避免触发API的速率限制;

要有错误处理和调试信息,这有助于找出问题所在;

在读取文件时避免递归地处理同一个文件夹下的所有文件;

在文件的开始处添加以下导入语句:from http import HTTPStatus;

qwen-turbo的Token计算API的使用方法,请参照下面这个例子:

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()

返回结果示例

JSON

{

"status_code": 200,

"request_id": "2ecfce1f-b7af-9b3a-9482-01e4a5511e8f",

"code": "",

"message": "",

"output": {

"token_ids": [

108386,

11319

],

"tokens": [

"你好",

"?"

]

},

"usage": {

"input_tokens": 2

}

}

返回参数说明

status_code 200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。

request_Id 系统生成的标志本次调用的id。

code表示请求失败,表示错误码,成功忽略。

message失败,表示失败详细信息,成功忽略。

Output 调用结果信息。

output.token_ids 本次输入文本对应的token_ids。

output.tokens本次输入文本对应的tokens。

usage.input_tokens 输入文本对应的token数目。

源代码如下:

from http import HTTPStatus

import os

import dashscope

# 设置API Key

dashscope.api_key = 'XXX'

def estimate_tokens(text):

response = dashscope.Tokenization.call(

model='qwen-turbo',

messages=[{'role': 'user', 'content': text}],

)

if response.status_code == HTTPStatus.OK:

return response.usage['input_tokens']

else:

print(f'Failed request_id: {response.request_id}, status_code: {response.status_code}, code: {response.code}, message: {response.message}')

return None

def process_file(file_path):

with open(file_path, 'r', encoding='utf-8') as file:

content = file.read()

token_count = estimate_tokens(content)

if token_count is not None:

print(f"{file_path}这篇文档的Token数量估计为{token_count}")

return token_count

else:

print(f"Failed to estimate tokens for file: {file_path}")

return 0

def main():

folder_path = 'F:\\AI自媒体内容\\待翻译'

total_token_count = 0

for filename in os.listdir(folder_path):

if filename.endswith('.txt') and not filename.endswith('翻译.txt'):

file_path = os.path.join(folder_path, filename)

print(f"Processing file: {file_path}")

token_count = process_file(file_path)

total_token_count += token_count

print(f"这些文档一共Token数量估计为{total_token_count}")

if __name__ == "__main__":

main()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dance with GenAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档