「AI Python 系列」第 01 栏 · AI 时代的 Python 办公自动化
品牌:梅雅达编程笔记
摘要: 2026数博会提出"词元增值订阅、按效付费",大模型计费方式又添新词。新手调API最怕一笔糊涂账:Token是什么?输入输出为什么分开算钱?为什么说一句话就扣费?这篇番外用一个成本计算器讲清楚计费规则,附代码,能查真实账单、能估算费用。学习用GLM-4.7-Flash,账单永远是0。
开篇 · 从一个新词说起
2026 数博会上,国家数据局提到一个说法:围绕重点场景探索**“词元增值订阅、按效付费”**。
"词元"是啥?其实就是我们从 Day 02 就一直在用的 Token——大模型的计费单位。政策说的是企业级数据服务的收费探索,但它也给我们提了个醒:
AI 应用正在从"按年订阅"走向"按用量付费"。
这对普通人意味着什么?意味着你写代码调 API,每一句话都可能在花钱。问题是很多读者跟到 Day 18,代码跑了一堆,被问一句"你这些程序跑一次多少钱",还是答不上来。
今天这篇番外,把这笔账彻底算明白:Token 跟字数什么关系、账单怎么算、三种收费模式怎么选,最后给你一个能实际跑的成本计算器。五件事,一条一条讲透。
Token:一个汉字,大约 1.5 个"币"
你给大模型发一段话,它不是按"字"理解的,而是先把这段话切成一小段一小段的标记,这些标记就叫 Token(词元)。
几个直观的换算经验值:
| 文本 | 大约 Token 数 |
|---|---|
| 1 个汉字 | ≈ 1.5 个 Token |
| 1 个英文单词(如 hello) | ≈ 1 个 Token |
| 1 个标点 / 空格 | 通常 1 个或和字符合并 |
| 1000 字中文文章 | ≈ 1500 Token |
为什么中文比英文"贵"? 因为英文一个单词天然就是一个语义单位,切一刀就是一个 Token;而汉字要走分词,“我喜欢编程"可能被切成"我/喜欢/编程”,再加上字节编码,平均下来一个汉字要 1~2 个 Token。
所以同样一句话,用中文写比用英文写,Token 消耗略高。这不是坑,是语言结构决定的。
账单是这么算出来的
记不住长篇大论没关系,API 计费一共就三条规则。
规则 1:输入和输出,分开算钱
你发出去的 Prompt 算输入 Token,模型吐回来的回答算输出 Token。两家价格不同,输出通常比输入贵 2~4 倍:
| 模型 | 输入价格(元/百万Token) | 输出价格(元/百万Token) |
|---|---|---|
| GLM-4.7-Flash | 0 | 0 |
| DeepSeek V4-Flash | 空闲 ¥1.5 / 高峰 ¥3.0 | 空闲 ¥4.5 / 高峰 ¥9.0 |
| Qwen-Plus | 0.8 | 2.0 |
| GPT-4o-mini | 约1.08 | 约4.32 |
价格采集于 2026 年 8 月。DeepSeek 已于 8 月 17 日启用峰谷定价:高峰时段为北京时间 9:00-12:00、14:00-18:00,其余为空闲时段,空闲价约为高峰价的一半;缓存命中时输入价可低至 ¥0.05~0.1。各平台价格以官方定价页为准,随时可能调整。
为什么输出贵?因为输出是模型一个 Token 一个 Token"算"出来的,每生成一个字都要跑一次完整推理;而输入是"读",算一次就行。
规则 2:每一轮对话,历史会重复计费
这是新手最容易忽略的一点。用 API 做多轮对话时,第二轮请求要把第一轮的对话历史也带上。也就是说:
- 第 1 轮:输入 = 你的第 1 句话
- 第 2 轮:输入 = 第 1 句话 + AI 回答 + 你的第 2 句话
- 第 10 轮:输入 = 前面所有内容叠加
聊得越久,每轮的输入越胖。这也是为什么 Day 16 讲"长任务与记忆"时,要做记忆摘要裁剪——不裁剪,Token 会滚雪球。
规则 3:费用 = 输入Token × 输入单价 + 输出Token × 输出单价
公式就这么简单。拿 DeepSeek 算笔账(用空闲价):一次调用输入 2000 Token、输出 1000 Token——
- 输入费:2000 / 1,000,000 × 1.5 = ¥0.003
- 输出费:1000 / 1,000,000 × 4.5 = ¥0.0045
- 合计:¥0.0075,一次不到一分钱。
看着便宜对不对?但如果是 Day 13 那种爬 500 个网页、每个都喂给模型提取的场景,500 次调用就是 ¥3.75;每天跑一遍,一个月轻松上百块。便宜是便宜,但架不住量大。
三种收费模式,怎么选不吃亏
数博会说的"词元增值订阅、按效付费",把市面上的模式基本凑齐了:
| 模式 | 怎么收钱 | 代表 | 适合谁 |
|---|---|---|---|
| 订阅制 | 按月/年付固定费用,随便用 | ChatGPT Plus、网页版会员 | 个人聊天、轻度使用 |
| 按量付费 | 用多少 Token 付多少钱 | 各家 API(本专栏用的) | 开发者、自动化脚本 |
| 按效付费 | 按调用结果/效果付费 | 数博会探索的新方向、部分Agent商店 | 未来的企业场景 |
对跟这个专栏的读者,结论很明确:
- 学习和写自动化脚本 → 按量付费的 API,精准、便宜、能进代码
- GLM-4.7-Flash 永久免费,学习阶段单价直接是 0,随便跑
- 等你的程序要上线服务别人了,再按 Day 04 的横评结果选付费模型兜底
上手:cost_tracker.py,把账算明白
原理说够了,上工具。这个脚本干三件事:
- 不调 API,用经验公式估算任意文本的 Token 数
- 真实调用一次 API,从返回结果里读官方账单(输入/输出分开)
- 自动按四家单价折算费用,同一次调用换别家要花多少钱一目了然
完整代码
"""
cost_tracker.py - 大模型 API 成本计算器(番外01 配套代码)
功能:
1. 经验公式估算 Token(不调 API、不花钱也能算)
2. 真实调用 API 读取官方账单(输入 / 输出 Token 分开记)
3. 按四家模型单价自动折算费用
4. 啰嗦 Prompt vs 精简 Prompt 的成本对比
运行:python cost_tracker.py
依赖:llm_client.py(day02_code 目录)+ .env(配置 GLM_API_KEY)
"""
import sys
import os
import re
# 自动引入 day02_code 目录下的 llm_client.py
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "day02_code"))
from llm_client import LLMClient
# ========== 一、四家模型价格表(单位:元 / 百万 Token)==========
# 数据采集于 2026 年 8 月,实际以各平台官方定价页为准
PRICING = {
"glm": {"name": "GLM-4.7-Flash", "input": 0.0, "output": 0.0},
"deepseek": {"name": "DeepSeek V4-Flash", "input": 1.5, "output": 4.5}, # 2026-08-17 起峰谷定价,此处取空闲时段价;高峰输入3.0/输出9.0,缓存命中输入0.05~0.1
"qwen": {"name": "Qwen-Plus", "input": 0.8, "output": 2.0}, # 缓存命中输入约 0.16
"openai": {"name": "GPT-4o-mini", "input": 1.08, "output": 4.32},
}
# ========== 二、经验公式估算 Token(不调 API)==========
def estimate_tokens(text):
"""
粗估规则(够日常算账用):
- 中文汉字 / 中文标点:1 字 ≈ 1.5 Token
- 英文、数字、空格符号:4 字符 ≈ 1 Token
"""
chinese_chars = len(re.findall(r"[\u4e00-\u9fff\u3000-\u303f\uff00-\uffef]", text))
other_chars = len(text) - chinese_chars
return int(chinese_chars * 1.5 + other_chars / 4)
# ========== 三、真实调用,读取官方账单 ==========
def chat_with_usage(client, message, system_prompt=None,
temperature=0.7, max_tokens=4096):
"""
在 LLMClient 基础上拿真实 Token 用量。
返回:(回复文本, usage字典)
"""
messages = []
if system_prompt:
messages.append({"role": "system", "content": system_prompt})
messages.append({"role": "user", "content": message})
response = client.client.chat.completions.create(
model=client.model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
)
usage = {
"prompt_tokens": response.usage.prompt_tokens, # 输入 Token
"completion_tokens": response.usage.completion_tokens, # 输出 Token
"total_tokens": response.usage.total_tokens,
}
return response.choices[0].message.content, usage
# ========== 四、按单价算钱 ==========
def calc_cost(provider, usage):
"""根据价格表计算一次调用的费用(元)"""
price = PRICING[provider]
input_cost = usage["prompt_tokens"] / 1_000_000 * price["input"]
output_cost = usage["completion_tokens"] / 1_000_000 * price["output"]
return {
"model": price["name"],
"input_cost": input_cost,
"output_cost": output_cost,
"total_cost": input_cost + output_cost,
}
def print_bill(provider, usage, bill):
"""打印一张明白账"""
print(f"\n--- {bill['model']} 本次账单 ---")
print(f" 输入 Token:{usage['prompt_tokens']:>6} 个 → ¥{bill['input_cost']:.4f}")
print(f" 输出 Token:{usage['completion_tokens']:>6} 个 → ¥{bill['output_cost']:.4f}")
print(f" 合计 Token:{usage['total_tokens']:>6} 个")
print(f" 本次费用: ¥{bill['total_cost']:.4f}")
# ========== 五、三个演示 ==========
def demo_estimate():
"""演示1:不调 API,估算一段话值多少 Token"""
print("=" * 56)
print(" 演示 1:Token 经验估算(不花一分钱)")
print("=" * 56)
samples = [
"帮我写一份周报",
"你是梅雅达公司技术部后端工程师,风格简洁务实。周报格式:本周完成 / 遇到问题 / 下周计划,每部分不超过3条。",
]
for s in samples:
shown = s[:30] + ("..." if len(s) > 30 else "")
print(f"\n文本:{shown}")
print(f"字数:{len(s)} → 估算约 {estimate_tokens(s)} Token")
def demo_real_call():
"""演示2:真实调用 GLM,拿官方账单并折算别家价格"""
print("\n" + "=" * 56)
print(" 演示 2:真实调用 + 四家费用折算")
print("=" * 56)
client = LLMClient(provider="glm")
answer, usage = chat_with_usage(
client,
"这周修了12个bug,优化了数据库查询性能。帮我写个周报,三行以内。",
system_prompt="你是后端工程师,回复简洁。",
max_tokens=600,
)
print(f"\nAI 回复:{answer[:60]}...")
print_bill("glm", usage, calc_cost("glm", usage))
print("\n 同样的 Token 用量,换三家付费模型要花:")
for p in ("deepseek", "qwen", "openai"):
bill = calc_cost(p, usage)
print(f" {bill['model']:<20} 约 ¥{bill['total_cost']:.4f}")
def demo_prompt_slim():
"""演示3:啰嗦 prompt vs 精简 prompt"""
print("\n" + "=" * 56)
print(" 演示 3:Prompt 瘦身能省多少?")
print("=" * 56)
fat = (
"你好呀,麻烦你了,我是一家电商公司的员工,今天想请你帮个忙,"
"就是能不能帮我写一份工作周报呀,格式就按正常周报格式来就行,"
"谢谢啦辛苦你了!"
)
slim = "写一份工作周报,格式:本周完成/遇到问题/下周计划,各不超过3条。"
fat_tokens = estimate_tokens(fat)
slim_tokens = estimate_tokens(slim)
print(f"\n啰嗦版:{len(fat)} 字 ≈ {fat_tokens} Token")
print(f"精简版:{len(slim)} 字 ≈ {slim_tokens} Token")
saved = fat_tokens - slim_tokens
print(f"每次省 {saved} Token;调用 1 万次 ≈ 省 {saved * 10000 / 1_000_000:.2f} 百万 Token")
if __name__ == "__main__":
demo_estimate()
demo_real_call()
demo_prompt_slim()
print("\n✅ 算账完毕。学习阶段用 GLM-4.7-Flash,账单永远是 ¥0。")
运行效果(真实输出)
========================================================
演示 1:Token 经验估算(不花一分钱)
========================================================
文本:帮我写一份周报
字数:7 → 估算约 10 Token
文本:你是梅雅达公司技术部后端工程师,风格简洁务实。周报格式:本周...
字数:56 → 估算约 75 Token
========================================================
演示 2:真实调用 + 四家费用折算
========================================================
AI 回复:本周修复12个Bug,优化数据库查询性能,提升系统稳定性。...
--- GLM-4.7-Flash 本次账单 ---
输入 Token: 38 个 → ¥0.0000
输出 Token: 301 个 → ¥0.0000
合计 Token: 339 个
本次费用: ¥0.0000
同样的 Token 用量,换三家付费模型要花:
DeepSeek V4-Flash 约 ¥0.0014
Qwen-Plus 约 ¥0.0006
GPT-4o-mini 约 ¥0.0013
========================================================
演示 3:Prompt 瘦身能省多少?
========================================================
啰嗦版:68 字 ≈ 102 Token
精简版:33 字 ≈ 45 Token
每次省 57 Token;调用 1 万次 ≈ 省 0.57 百万 Token
✅ 算账完毕。学习阶段用 GLM-4.7-Flash,账单永远是 ¥0。
注意看演示 2 的账单:response.usage 里的三个字段是平台官方统计,比经验公式准——经验公式用来"事前估算预算",真实账单用来"事后核对扣费",两个搭配用。这篇番外的全部验证调用都走的 GLM 免费模型,账单永远是 ¥0。
算完账,三件值得动手的事
脚本够用了吗?对想更进一步的人,有三件事很值得自己动手,都是真实项目里会踩的坑:
第一件:加一个"月度账单预测"。 输入预计每天调用次数和平均 Token 数,输出四家模型一个月的费用。思路很简单:月费 = 日均次数 × 30 × 单次成本。学会了这个,你就能在接活前先给客户报出个大概成本。
第二件:让 Day 17 的日报 Agent 自动记账。 每次运行结束后,把 Token 用量追加写进一个 cost_log.csv(日期、任务、输入/输出 Token 一行),月底一汇总就是你的真实成本报表。每次调用后调 chat_with_usage 拿 usage,用 csv 模块追加一行就行。
第三件:实现"预算熔断"。 给程序设一个月度 Token 预算(比如 100 万),每次调用前读取累计用量,超预算就自动停止调用并提醒。累计用量存本地 JSON,调用前判断——这个思路就是真实云平台"预算告警"的迷你版,等你的 Agent 真跑起来,它是保命符。
五个不影响效果的省钱习惯
最后是实战经验。这些习惯不是让你抠门,是让你的自动化程序上线后别莫名其妙烧钱:
1. Prompt 说人话,但别寒暄。 "你好呀麻烦你了谢谢啦"这些全是 Token,模型一个字都不需要。演示 3 里啰嗦版比精简版胖一圈,效果没有任何区别。
2. 用 max_tokens 给输出封顶。 模型偶尔会失控写小作文。每个调用都设 max_tokens,最坏情况的费用就被锁死了。
3. 长文本任务先摘再喂。 Day 16 的记忆裁剪、Day 08 的 PDF 分段,本质都是同一件事:别把用不到的原文扔进输入。输入是按次重复计费的,省下来的都是纯利润。
4. 批量任务先小样试跑。 处理 200 张报销单之前,先拿 3 张跑通并看账单,确认单次成本再放量。否则循环一跑起来,错误 Prompt 会被重复 200 次。
5. 能缓存就缓存。 DeepSeek 的上下文缓存命中时输入价从空闲的 ¥1.5 一路降到 ¥0.05,差 30 倍;Qwen 缓存命中输入也只有 ¥0.16。重复的 system prompt、固定的示例文本,天然适合缓存。
"词元增值订阅、按效付费"这些新词听着玄乎,拆开了就是一件事:用多少,付多少。 对学习者这是好消息——你不用为没用上的功能买单,GLM-4.7-Flash 更是直接把单价打到了 0。
但工具免费不等于可以糊涂。看懂账单、算得清成本,是从"会调 API"到"能上线跑业务"的分水岭。把这个计算器存好,等你的 Agent 真要替你赚钱的那天,你会感谢现在算过的每一笔账。
所有价格都以官方定价页为准,随时可能调整。学习阶段用 GLM,可到智谱开放平台申请免费 Key;其余 DeepSeek、通义千问、OpenAI 各家,均以各自官方定价页为准。
——梅雅达编程笔记,专注 Python + AI 办公自动化实战教程。
「AI 时代的 Python 办公自动化」专栏,
姊妹专栏:Python 零基础入门 / 编程启蒙-Scratch转Python。

251

被折叠的 条评论
为什么被折叠?



