首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何计算文档会消耗的Token数量?

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

作者头像
AIGC部落
发布于 2024-06-24 12:02:33
发布于 2024-06-24 12:02:33
1.1K0
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
智能体开发工具链全景图:IDE、调试器与监控平台
🚀 每一次编译都是新的征程,每一个bug都是未解的谜题。让我们携手,在0和1的星河中,书写属于开发者的浪漫诗篇。
摘星.
2025/07/17
1310
智能体开发工具链全景图:IDE、调试器与监控平台
CVE-2024-53677|Apache Struts 2(S2-067)远程代码执行漏洞(POC)
Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java ServletAPI,鼓励开发者采用MVC架构。
信安百科
2025/07/30
1100
CVE-2024-53677|Apache Struts 2(S2-067)远程代码执行漏洞(POC)
AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容
Qwen-Long是在通义千问针对超长上下文处理场景的大语言模型,支持中文、英文等不同语言输入,支持最长1000万tokens(约1500万字或1.5万页文档)的超长上下文对话。配合同步上线的文档服务,可支持word、pdf、markdown、epub、mobi等多种文档格式的解析和对话。借助Qwen-Long可以批量总结长文档。
AIGC部落
2024/06/24
1.4K0
AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容
AI办公自动化:用通义千问批量翻译长篇英语TXT文档
你是一个Python编程专家,现在要完成一个编写基于qwen-turbo模型API和dashscope库的程序脚本,具体步骤如下:
AIGC部落
2024/06/24
2810
AI办公自动化:用通义千问批量翻译长篇英语TXT文档
总结|哪些平台有大模型知识库的Web API服务
截止2023/12/6 笔者个人的调研,有三家有大模型知识库的web api服务:
悟乙己
2023/12/07
9870
总结|哪些平台有大模型知识库的Web API服务
AI智能体(四)
以往,我们都是直接跟大模型进行交互,没有办法系统的实现记忆。langchain给出了一个系统级的解决方案,如上图中,用户提出问题,系统会先在存储器(如上图中的redis)中查询相关的文档返回系统,系统会带着用户的问题以及查询到的文档碎片一起提交给大模型,然后再将答案返回给用户。其中存储器充当了大脑记忆的部分。在上图的左下角,就是我们之前说的各种文档(pdf,word,excel等)通过向量化后存储进存储器。比起直接向大模型提问,langchain相当于多了一个外挂系统。
算法之名
2025/02/06
2840
AI智能体(四)
Python3 urllib全面指南:网络请求的瑞士军刀
在Python生态系统中,当提到网络请求时,大多数人会立刻想到requests库。然而,Python标准库中的urllib模块却常常被忽视。作为Python内置的HTTP客户端工具集,urllib提供了强大而灵活的网络通信能力,无需额外依赖即可完成绝大多数网络操作。
熊猫钓鱼
2025/08/01
880
基础RAG实现,最佳入门选择(五)
> 增强生成(RAG)通过在生成响应之前检索相关的外部知识来提高语言模型的事实准确性。然而,标准组块经常丢失重要的上下文,使得检索不太有效。上下文块标头(CCH)通过在嵌入每个块之前为每个块添加高级上下文(如文档标题或部分标头)来增强RAG。这提高了检索质量并防止了断章取义的响应。
舒一笑不秃头
2025/06/20
680
基础RAG实现,最佳入门选择(五)
独家 | 17个可以用于工作自动化的最佳Python脚本(上集)
您是否厌倦了在日常工作中做那些重复性的任务?简单但多功能的Python脚本可以解决您的问题。
数据派THU
2023/11/12
1.8K0
独家 | 17个可以用于工作自动化的最佳Python脚本(上集)
FastAPI官方教程太棒了(下)
status_code也可以是IntEnum,比如Python的http.HTTPStatus。
dongfanger
2022/11/21
2.8K0
FastAPI官方教程太棒了(下)
初识langchain[1]:Langchain实战教学,利用qwen2.1与GLM-4大模型构建智能解决方案[含Agent、tavily面向AI搜索]
大模型三大重点:算力、数据、算法,ReAct (reason推理+act行动)–思维链
汀丶人工智能
2024/07/25
1.9K0
初识langchain[1]:Langchain实战教学,利用qwen2.1与GLM-4大模型构建智能解决方案[含Agent、tavily面向AI搜索]
如何做好一份技术文档?从规划到实践的完整指南
作为一名从事软件开发十余年的技术人员,我深深体会到优秀技术文档的价值和重要性。在我的职业生涯中,我见过太多因为文档缺失或质量不佳而导致的项目延期、知识断层、团队协作困难等问题。同时,我也亲身体验过一份结构清晰、内容详实的技术文档如何能够显著提升团队效率,降低沟通成本,甚至成为产品成功的关键因素。技术文档不仅仅是代码的说明书,更是知识传承的载体、团队协作的桥梁、用户体验的重要组成部分。在这篇文章中,我将基于多年的实践经验,从技术文档的规划设计、内容组织、编写技巧、工具选择等多个维度,系统性地分享如何创建一份高质量的技术文档。我会详细探讨技术文档的核心要素,包括清晰的结构设计、准确的技术描述、实用的代码示例、直观的图表展示等,并结合具体的工具和最佳实践,帮助读者掌握技术文档编写的精髓。无论你是刚入行的新手开发者,还是经验丰富的技术专家,相信这篇文章都能为你在技术文档创作方面提供有价值的指导和启发。让我们一起探讨如何让技术文档成为技术传播路上的明灯,为整个技术社区的发展贡献力量。
摘星.
2025/06/10
1850
如何做好一份技术文档?从规划到实践的完整指南
爱派(AiPy实战):文生视频工作流,爱派能直接生成爆款笔记
​用 AiPy 打造全网上万点赞的AI视频“冰箱食材” ,爆款不是靠运气,而是靠可复制的 AI 工作流。爱派 “文生视频不限次数 + 无水印+高质量” 的三大杀招,直接把内容生产效率拉到天花板。今天就用 “6 种食材拒入冰箱” 的案例,拆解普通人也能学会的爆款制造术。
用户11707012
2025/07/10
1550
爱派(AiPy实战):文生视频工作流,爱派能直接生成爆款笔记
FastAPI 实用教程:构建高性能 Python Web API 的终极指南
本文为原创实战教程,涵盖 FastAPI 核心特性、路由设计、数据验证、数据库集成、认证授权、测试部署全流程,4000+字助你快速掌握现代 Python Web 开发利器。
熊猫钓鱼
2025/08/01
2740
FastAPI 实用教程:构建高性能 Python Web API 的终极指南
一个案例演示什么是RAG+Prompt工程
本文将通过一个"算命大师"的案例,演示如何利用RAG技术和精心设计的Prompt来创建一个既有趣又实用的AI应用。
GeekLiHua
2025/07/07
2000
AI自动生成Git提交信息-git AI Commit
在现代软件开发中,编写清晰且一致的Git提交信息对于维护项目历史和促进团队协作至关重要。然而,为每次变更手动撰写描述性提交信息可能耗时,尤其是处理复杂差异或大型项目时。AI Commit 是一个利用AI分析Git差异并生成符合Conventional Commits规范的提交信息的Python脚本。本文将介绍其工作原理、核心功能以及如何优化您的开发流程。
井九
2025/07/11
2100
AI自动生成Git提交信息-git AI Commit
本地化部署文本嵌入向量模型(AI知识库中间最重要一环)的爬坑过程
前言:嵌入向量模型排行榜,可以在这个网站上进行查看。可以手动选择不同的模型进行横向对比:
Wesky
2025/04/04
5590
本地化部署文本嵌入向量模型(AI知识库中间最重要一环)的爬坑过程
大模型开发落地实战-长上下文多模态场景大模型运用实战
如何从零开始实现 AI 项目的落地?这是每个开发者和企业在迈向智能化时都会面临的核心问题。在本人创建的《人工智能项目落地实战指南》专栏中,我从实践角度出发,为大家梳理了大模型技术在市场应用中的三大方向,并根据 AI 运用的深浅程度进行分类。
fanstuck
2025/01/07
1.2K2
大模型开发落地实战-长上下文多模态场景大模型运用实战
21个Python脚本自动执行日常任务(1)
作为编程领域摸爬滚打超过十年的老手,我深刻体会到,自动化那些重复性工作能大大节省我们的时间和精力。
数据科学工厂
2024/12/30
6410
21个Python脚本自动执行日常任务(1)
FastAPI开发AI应用二:多厂商模型使用指南
本文将深入讲解如何在 FastAPI AI 聊天应用中设计和实现多模型厂商架构,让你的应用能够灵活切换不同的 AI 提供商,提升系统的可靠性和成本效益。即使你是架构设计新手,也能跟着本教程掌握多厂商集成的核心技术。
wayn
2025/07/08
1390
FastAPI开发AI应用二:多厂商模型使用指南
推荐阅读
相关推荐
智能体开发工具链全景图:IDE、调试器与监控平台
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档