如何计算文档会消耗的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的输入类型都是这样定义的。 …

springMVC的bug

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

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

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

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

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

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办公软件、联想电脑管家…

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

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

【STM32-ST-Link】

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

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

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

Day10—Spark SQL基础

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

IDEA上MySQL的jar包导入教程

jar包下载网址——》https://mvnrepository.com/ 1.进入界面,点击搜索框,搜索mysql: 外国网站,可能有点慢,耐心等待即可。 2.点击查询结果: 进入界面,点击前两个结果的其中一个,两个都可以 …

计算机毕业设计Python+Vue.js+Flask+Scrapy电影大数据分析 电影推荐系统 电影爬虫可视化 电影数据分析 大数据毕业设计 协同过滤算法

开发技术 协同过滤算法、机器学习、vue.js、echarts、Flask、Python、MySQL 创新点 协同过滤推荐算法、爬虫、数据可视化 补充说明 两种Python协同过滤推荐算法集成 (ItemCF推荐算法 和 UserCF 推荐算法) 2.专业美工整体设计的细腻的酷黑主题,前后端分离一体化系统&…

leetCode-hot100-链表专题

leetCode-hot100-链表专题 链表简介单链表单链表的使用例题206.反转链表19.删除链表的倒数第N个结点24.两两交换链表中的节点25.K个一组翻转链表 双向链表双向链表的使用 循环链表61.旋转链表141.环形链表142.环形链表Ⅱ LinkedListLinkedList的使用 链表简介 参考博客&#x…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《协同考虑空气质量与热舒适度的空调系统双层优化控制策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

数据资产安全保卫战:构建多层次、全方位的数据安全防护体系,守护企业核心数据资产安全

一、引言 在信息化时代,数据资产已成为企业运营的核心,其安全性直接关系到企业的生存与发展。然而,随着网络技术的飞速发展,数据泄露、黑客攻击等安全威胁日益增多,给企业的数据资产安全带来了严峻挑战。因此&#xf…

202483读书笔记|《把你写进诗歌里》——人生是一场不知何时散场的约会,爱慕向来短暂,失去才是唯一出路

202483读书笔记|《把你写进诗歌里》——人生是一场不知何时散场的约会,爱慕向来短暂,失去才是唯一出路 摘录 《把你写进诗歌里(2020年度中国优秀诗歌)》,作者上官文露。并不惊艳,中英文双语对照的一本诗集&…

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

题目: 题解: class Solution:def convertToTitle(self, columnNumber: int) -> str:ans list()while columnNumber > 0:columnNumber - 1ans.append(chr(columnNumber % 26 ord("A")))columnNumber // 26return "".join(an…