กลับไปที่บล็อก

การลดต้นทุนคู่มือ

นับโทเค็นก่อนส่งคำขอ: tiktoken ใน Python

ประมาณจำนวนโทเค็นของพรอมต์แบบออฟไลน์ด้วย tiktoken ตรวจสอบกับหน้าต่างบริบท คิดราคา และเปรียบเทียบกับฟิลด์ usage ของ API

โดย CheapTokens Teamเผยแพร่เมื่อ ใช้เวลาอ่าน 5 นาที

เทอร์มินัลแสดง pip install tiktoken และการนับโทเค็นหนึ่งบรรทัด
ในหน้านี้
  1. ห้าบรรทัดที่นับโทเค็น
  2. พรอมต์พอดีกับหน้าต่างหรือไม่?
  3. จะมีค่าใช้จ่ายเท่าไร?
  4. เปรียบเทียบการประมาณกับการใช้งาน

คุณสามารถนับโทเค็นของพรอมต์บนเครื่องของคุณเองได้ก่อนที่จะส่ง: ติดตั้ง tiktoken, เข้ารหัสข้อความ, แล้วนำ len() ของผลลัพธ์ tiktoken เป็นตัวแบ่งโทเค็นของ OpenAI ดังนั้นสำหรับโมเดล DeepSeek, GLM และ MiniMax ตัวเลขที่ได้จึงเป็นเพียงการประมาณ ตัวเลขจริงจะกลับมาใน usage.prompt_tokens หลังจากการเรียกครั้งแรก และการเปรียบเทียบทั้งสองใช้เวลาเพิ่มอีกหนึ่งบรรทัด

ทำไมต้องสนใจ? เพราะทั้งค่าใช้จ่ายและข้อผิดพลาดต่างเริ่มต้นจากขนาดของอินพุต วางสัญญายาว ๆ ลงในสคริปต์ แล้วคุณจะรู้ว่ามันใหญ่เกินไปก็ต่อเมื่อ API ตอบกลับด้วย 400 รันอีเมลห้าพันฉบับ แล้วคุณจะรู้ว่ามันมีค่าใช้จ่ายเท่าไรก็ต่อเมื่อยอดคงเหลือลดลง การนับก่อนจะเปลี่ยนความประหลาดใจทั้งสองให้เป็นตัวเลขที่คุณอ่านล่วงหน้าได้

ห้าบรรทัดที่นับโทเค็น#

tiktoken README (ตรวจสอบเมื่อ 1 พฤศจิกายน 2026) แสดงแนวคิดทั้งหมด: เลือกการเข้ารหัส, เข้ารหัสข้อความ, และความยาวของลิสต์คือจำนวนโทเค็น

bash
pip install tiktoken
python
import tiktoken

enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens))  # how many tokens the text is
ห้าบรรทัดในไฟล์ชื่อ estimate.py
ตัวนับทั้งหมด: get_encoding, encode, len.

enc.decode(tokens) คืนข้อความต้นฉบับกลับมา ซึ่งเป็นการตรวจสอบความถูกต้องที่ handy ว่าคุณกำลังดูข้อความเดียวกับที่โมเดลจะเห็น README ยังกล่าวถึง tiktoken.encoding_for_model('gpt-4o') ซึ่งเลือกตัวแบ่งโทเค็นสำหรับโมเดล OpenAI ที่ระบุ นั่นคือจุดที่ควรจำ: ตัวแบ่งโทเค็นเป็นของตระกูลโมเดล กฎง่าย ๆ ใน README คือประมาณสี่ไบต์ของข้อความต่อโทเค็น และอธิบายเฉพาะตัวแบ่งโทเค็นของ OpenAI เท่านั้น

แล้วคุณจะทำอย่างไรกับโมเดล DeepSeek? ใช้การนับเดียวกันเป็นประมาณการใช้งาน และปรับเทียบตามที่แสดงด้านล่าง

ทายตัวเลข

ข้อความภาษาอังกฤษ 2,000 ตัวอักษรมีประมาณกี่โทเค็น?

แสดงคำตอบ

คำตอบ: 500

ประมาณ 500 ด้วยกฎง่าย ๆ ใน README ที่สี่ไบต์ต่อโทเค็น และข้อความภาษาอังกฤษทั่วไปที่ประมาณหนึ่งไบต์ต่อตัวอักษร 2,000 ÷ 4 = 500 ภาษาอื่นและอีโมจิใช้ไบต์ต่อตัวอักษรมากกว่า ดังนั้น 2,000 ตัวอักษรเดียวกันมักหมายถึงโทเค็นมากขึ้นตามกฎนั้น

พรอมต์พอดีกับหน้าต่างหรือไม่?#

ทุกโมเดลมีหน้าต่างบริบท และอินพุตของคุณบวกกับคำตอบที่คุณอนุญาตต้องพอดีกับมัน หน้าต่างสำหรับโมเดลที่เราให้บริการ: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K โทเค็น คำตอบที่ยาวที่สุดคือ 32,768 โทเค็นสำหรับ DeepSeek-V4-Flash และ 8,192 สำหรับอีกสองตัว (รายการโมเดล CheapTokens, 1 พฤศจิกายน 2026)

การป้องกันก่อนการเรียกคือสี่บรรทัด:

python
CONTEXT = {
    'deepseek-ai/DeepSeek-V4-Flash-0731': 380_000,
    'zai-org/GLM-5.3-Flash': 390_000,
    'MiniMaxAI/MiniMax-M2.7': 180_000,
}

def fits(prompt_tokens, max_tokens, model):
    return prompt_tokens + max_tokens <= CONTEXT[model]

สมมติว่าคุณมีเอกสาร 250,000 โทเค็น fits(250_000, 8_192, 'MiniMaxAI/MiniMax-M2.7') คือ False ดังนั้นคุณจึงส่งงานนั้นไปยังโมเดลที่มีหน้าต่างใหญ่กว่าหรือแบ่งเอกสาร และ 400 จะไม่เกิดขึ้น fits(250_000, 8_192, 'deepseek-ai/DeepSeek-V4-Flash-0731') คือ True หากคุณต้องการเรื่องราวเต็มของข้อผิดพลาดที่เกิดขึ้น request too long: 400 vs 413, context window and max_tokens อธิบายไว้

จะมีค่าใช้จ่ายเท่าไร?#

ตอนนี้มาดูงบประมาณ ใช้รายการทั่วไปหนึ่งรายการ นับมัน แล้วคูณ สมมติว่าคุณจำแนกอีเมลคำสั่งซื้อ 5,000 ฉบับ คุณนับอีเมลตัวแทนหนึ่งฉบับและได้ประมาณ 800 โทเค็นอินพุต และคุณจำกัดป้ายกำกับและเหตุผลสั้น ๆ ไว้ที่ 200 โทเค็นเอาต์พุต ยอดรวม: 5,000 × 800 = 4,000,000 โทเค็นอินพุต และ 5,000 × 200 = 1,000,000 โทเค็นเอาต์พุต

ตารางด้านล่างกำหนดราคางานนั้นพอดีด้วยราคาปัจจุบัน โดยนับอินพุตและเอาต์พุตรวมกัน:

โมเดล ต่อคำขอ 5,000 คำขอ OpenRouter, 5,000 คำขอ
GLM-5.3-Flash $0.000024 $0.12 $0.217
DeepSeek-V4-Flash $0.000032 $0.16 $0.42
MiniMax-M2.7 $0.00007 $0.35 $4.20

800 โทเค็นอินพุตและ 200 โทเค็นเอาต์พุตต่อคำขอ ราคาต่อ 1M โทเค็นเป็นราคาปัจจุบันและเปลี่ยนแปลงไปพร้อมกับอัตราค่าบริการของเรา คอลัมน์ OpenRouter แสดงราคาอ้างอิงสำหรับปริมาณงานเดียวกัน

โดยรวม เมื่อนับอินพุตและเอาต์พุตรวมกัน คอลัมน์ CheapTokens ถูกกว่า OpenRouter สำหรับโมเดลเหล่านี้ เปลี่ยนตัวเลขสามตัวเป็นจำนวนของคุณเอง แล้วคุณจะมีงบประมาณก่อนคำขอแรก สำหรับความแตกต่างระหว่างสองด้านของบิล ดู input vs output tokens: what an AI API bills you for และสำหรับตัวอย่างที่วัดจริง how many tokens an API request uses ราคาปัจจุบันอยู่บน pricing page เสมอ

ขั้นตอนการประมาณจากข้อความไปยังจำนวนการใช้งานจริง
ประมาณการออฟไลน์, ป้องกันหน้าต่าง, ส่ง, แล้วเปรียบเทียบกับการใช้งาน

เปรียบเทียบการประมาณกับการใช้งาน#

การประมาณคือการเดาเกี่ยวกับตัวแบ่งโทเค็นของคนอื่น ดังนั้นตรวจสอบสักครั้งกับเฉลย ทุกการตอบกลับมีฟิลด์ usage และ usage.prompt_tokens คือสิ่งที่ API นับสำหรับอินพุตของคุณ วางตัวเลขสองตัวเคียงข้างกันแล้วหาร

ทีละขั้นตอน

รันการเปรียบเทียบ

ตั้งค่า

ติดตั้งแพ็กเกจและใส่คีย์ในตัวแปรสภาพแวดล้อม อย่าวางลงในสคริปต์

bash
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'

รันสคริปต์

บันทึกเป็น compare.py มันนับในเครื่อง ส่งคำขอไปยัง https://api.cheaptokens.dev/v1 และพิมพ์ตัวเลขทั้งสอง รหัสโมเดลคือรหัสเต็มจากรายการโมเดล CheapTokens เนื่องจากชื่อย่อไม่ได้รับการยอมรับ

python
import os
import tiktoken
from openai import OpenAI

MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'
enc = tiktoken.get_encoding('o200k_base')
messages = [{'role': 'user',
             'content': 'Classify this email as order, refund or other: Hi, my parcel from last Tuesday has not arrived yet.'}]

estimate = sum(len(enc.encode(m['content'])) for m in messages)

client = OpenAI(base_url='https://api.cheaptokens.dev/v1',
                api_key=os.environ['CHEAPTOKENS_API_KEY'])
r = client.chat.completions.create(model=MODEL, messages=messages, max_tokens=200)

real = r.usage.prompt_tokens
print(f'estimate {estimate}, usage.prompt_tokens {real}, ratio {real / estimate:.2f}')

อ่านช่องว่าง

บรรทัดสุดท้ายพิมพ์ตัวเลขสามตัว สมมติว่าแสดง estimate 24, usage.prompt_tokens 31, ratio 1.29 จากนั้นคูณการประมาณในอนาคตของคุณด้วยอัตราส่วนก่อนจัดงบประมาณ พรอมต์จริงยังถูกห่อด้วยการจัดรูปแบบแชท ดังนั้นจำนวนจริงอาจออกมาสูงกว่าการประมาณข้อความล้วนเล็กน้อย รันกับพรอมต์ทั่วไปหลาย ๆ อัน ไม่ใช่แค่อันเดียว และใช้อัตราส่วนเฉลี่ย

จากนั้นขั้นตอนคือ: ประมาณในเครื่อง, ป้องกันหน้าต่าง, ใช้อัตราส่วนของคุณกับงบประมาณ, และให้ usage ในแต่ละการตอบกลับคอยตรวจสอบคุณ หากคุณต้องการยอดรวมสะสมตลอดทั้งงาน track AI agent token cost in Python สร้างสิ่งนั้นบนฟิลด์เดียวกัน ใหม่กับการเชื่อมต่อเอง? Your first API request with CheapTokens ครอบคลุมไว้ และ docs มีส่วนที่เหลือ

จับคู่

จับคู่แต่ละชื่อกับสิ่งที่มันบอกคุณ

  • len(enc.encode(text))การประมาณในเครื่องของคุณเกี่ยวกับขนาดอินพุต
  • usage.prompt_tokensขนาดอินพุตตามที่ API นับ
  • usage.completion_tokensขนาดของคำตอบ คิดราคาด้านเอาต์พุต
  • max_tokensขีดจำกัดความยาวคำตอบที่คุณกันไว้ในการตรวจสอบหน้าต่าง

การนับนั้นถูก ออฟไลน์ และใช้เวลาไม่กี่วินาที ทำก่อนการเรียกที่ต้องเสียเงิน