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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经常混淆的ADC输入类型!

大家好,这里是大话硬件。 这篇文章我们来聊聊ADC的输入类型。 ADC的输入类型根据ADI的官网,分为了3种类型,单端,差分,伪差分。如下图快速选型的界面所示。 同时,TI的官网对ADC的输入类型划分也是同样的3种类型。 可见,两个器件厂家对ADC的输入类型都是这样定义的。 …

简说贪心算法

贪心算法(Greedy Algorithm)是一类在每一步选择中都做出当前最优解,以期望通过一系列局部最优选择达到全局最优解的算法。贪心算法的核心思想是通过一次次的局部优化来构建全局解。尽管这种方法不总是能找到全局最优解,但在许多情…

springMVC的bug

写SpringMVC时,配置视图解析器路径中少写了个“/”导致url拼接错误,无法返回视图

支持向量机 (SVM) 算法详解

支持向量机 (SVM) 算法详解 支持向量机(Support Vector Machine, SVM)是一种监督学习模型,广泛应用于分类和回归分析。SVM 特别适合高维数据,并且在处理复杂非线性数据时表现出色。本文将详细讲解 SVM 的原理、数学公式、应用场景…

三目运算符中间的表达式可以省略吗(a?:c)?

熟悉C语言的童靴对三目运算符都非常熟悉,a? b : c; 如果a为true,则整个运算符的值为b,否则为c;那么问题来了,三目运算符中间的表达式可以省略吗?即a? : c; 1、linux内核中出现的省略情况 本人在阅读内核代码是发现了下面的代码: preferr…

centos7 低版本docker 升级为高版本

删除 docker yum -y remove docker*安装 yum 管理工具 yum install -y yum-utils添加国内镜像 manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo查看可用软件版本yum list docker-ce --showduplicates|sort -r安装 yum -y install docke…

机器学习实验--- 金融数据基础与计算在线实验闯关

第1关:申万家用电器行业股票代码获取 任务描述 本关任务:根据右边测试平台的提示,补充代码。 # -*- coding: utf-8 -*- #1.读取“申万行业分类.xlsx”表,字段如下所示: # 行业名称 股票代码 股票名称 # 获得“…

项目中选择Entity Framework Core还是Dapper?

我是将 Dapper 还是 Entity framework core 用于下一个 .NET 项目?当你必须做出这个决定时,总是令人困惑,为了项目的成功,你需要做出正确的决定。让我来帮你... 介绍 使用 .NET 开发的应用程序可以根据其使用的对象关系映射器 &…

「前端+鸿蒙」鸿蒙应用开发-在线教育测验案例

在鸿蒙应用开发中,状态管理是确保应用能够响应用户交互并保持数据一致性的关键。以下是一个状态管理的真实案例,包括功能简介、布局和样式、状态定义、业务逻辑、UI交互等。 案例 - 在线教育测验应用 功能简介 用户可以进行选择题测验。应用提供自动评分和统计信息。用户可以…

Java | Leetcode Java题解之第168题Excel表列名称

题目: 题解: class Solution {public String convertToTitle(int columnNumber) {StringBuffer sb new StringBuffer();while (columnNumber ! 0) {columnNumber--;sb.append((char)(columnNumber % 26 A));columnNumber / 26;}return sb.reverse().t…

【APP移动端性能测试】第一节.APP应用架构、环境和敏捷开发模型介绍

文章目录 前言一、APP应用架构二、APP项目环境 2.1 后端项目环境 2.2 前端项目环境三、Scrum敏捷开发模型 3.1 Scrum敏捷模型基础介绍 3.2 Scrum敏捷开发开发流程总结 前言 一、APP应用架构 (1)APP应用架构 (2&#xff0…

springboot应用cpu飙升的原因排除

1、通过top或者jps命令查到是那个java进程, top可以看全局那个进程耗cpu,而jps则默认是java最耗cpu的,比如找到进程是196 1.1 top (推荐)或者jps命令均可 2、根据第一步获取的进程号,查询进程里那个线程最占用cpu,发…

js 用正则表达式 匹配自定义字符之间的字符串数据,如:( )、[ ]、{ }、< >、【】等括号之间的字符串数据

要使用正则表达式匹配尖括号()之间的数据,可以使用以下代码示例: 在JavaScript中,你可以使用正则表达式来匹配括号()之间的数据。以下是一个简单的例子,它展示了如何使用正则表达式来获取两对括号之间的文本。 // 示例字符串 con…

LENOVO联想 小新 16 IAH8 2023款(83BG)笔记本原厂Windows11系统,恢复出厂开箱状态预装OEM系统镜像安装包下载

适用型号:小新 16 IAH8【83BG】 链接:https://pan.baidu.com/s/18VbGbBXtQEW5P8wLIyJtAQ?pwddv1s 提取码:dv1s 联想原装Win11系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家…

董宇辉的人生关键词:年轻人的成长指南

在当今这个信息爆炸、竞争激烈的社会中,年轻人面临着前所未有的挑战与机遇。如何从纷繁复杂的世界中找到属于自己的道路?近日,知名人生导师董宇辉为年轻人提出了几个人生关键词,这些词汇不仅凝聚了他多年的人生感悟,更…

服务器负载均衡

什么是服务器负载 1. 常见理解的平均负载 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如下列情况 [rootkube-node1 ~]# uptime09:44:37 up 74 days, 11:53, 1 user, load average:…

【STM32-ST-Link】

STM32-ST-Link ■ ST-Link简介■ ST-Link驱动的安装。■ ST-Link编程软件(MDK)配置。■ ST-Link固件升级方法 ■ ST-Link简介 由于德产 J-LINK 价格非常昂贵, 而国产 J-LINK 因为版权问题将在万能的淘宝销声匿迹。 所以我们有必要给大家介绍 JTAG/SWD 调试工具中另…

架构设计 - Nginx Lua 缓存配置

摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 本文主要分享 Nginx Lua 缓存配置开发 鉴于 Nginx Proxy Cache 缓存的劣势,在生产项目中很少使用…

如何做好技术管理与技术规划?

一、背景 做好技术管理不仅要求紧跟行业前沿动态,同时也需把握好产品开发的阶段性分期,确保技术成果转化和产品落地的顺畅进行。技术管理的成功与否,在很大程度上取决于能否精准捕捉市场需求,据此调整任务优先级。面对瞬息万变的…

Day10—Spark SQL基础

Spark SQL介绍 ​ Spark SQL是一个用于结构化数据处理的Spark组件。所谓结构化数据,是指具有Schema信息的数据,例如JSON、Parquet、Avro、CSV格式的数据。与基础的Spark RDD API不同,Spark SQL提供了对结构化数据的查询和计算接口。 Spark …