ব্লগে ফিরে যান

খরচ অপ্টিমাইজেশনগাইড

অনুরোধ পাঠানোর আগে টোকেন গণনা করুন: Python-এ tiktoken

tiktoken দিয়ে অফলাইনে একটি প্রম্পটের টোকেন সংখ্যা অনুমান করুন, কনটেক্সট উইন্ডোর সাথে মিলিয়ে দেখুন, মূল্য নির্ধারণ করুন, এবং API-এর usage ফিল্ডের সাথে তুলনা করুন।

CheapTokens Team দ্বারাপ্রকাশিত হয়েছে 9 মিনিট পড়ার সময়

টার্মিনালে pip install tiktoken এবং এক লাইনের টোকেন গণনা দেখানো হচ্ছে
এই পৃষ্ঠায়
  1. টোকেন গণনা করার পাঁচটি লাইন
  2. প্রম্পট কি উইন্ডোতে ফিট করে?
  3. এতে কত খরচ হবে?
  4. অনুমানকে usage-এর সাথে তুলনা করুন

আপনি অনুরোধ পাঠানোর আগেই নিজের মেশিনে একটি প্রম্পটের টোকেন গণনা করতে পারেন: tiktoken ইনস্টল করুন, টেক্সট এনকোড করুন, ফলাফলের len() নিন। tiktoken হলো OpenAI-এর টোকেনাইজার, তাই DeepSeek, GLM ও MiniMax মডেলের জন্য সংখ্যাটি একটি অনুমান। প্রকৃত সংখ্যা প্রথম কলের পর usage.prompt_tokens-এ ফিরে আসে, এবং দুটির তুলনা করতে আরও একটি লাইন লাগে।

কেন এই ঝামেলা? কারণ বিল এবং ত্রুটি—দুটোই ইনপুটের আকার থেকে শুরু হয়। একটি স্ক্রিপ্টে একটি দীর্ঘ চুক্তিপত্র পেস্ট করুন, আর আপনি জানতে পারবেন এটি খুব বড় ছিল কেবল তখনই যখন API একটি 400 দিয়ে উত্তর দেয়। পাঁচ হাজার ইমেইলের একটি ব্যাচ চালান, আর আপনি জানতে পারবেন এতে কত খরচ হলো কেবল তখনই যখন ব্যালেন্স কমে যায়। আগে গণনা করলে এই দুটি অপ্রত্যাশিত ঘটনাই এমন একটি সংখ্যায় পরিণত হয় যা আপনি আগেই পড়তে পারেন।

টোকেন গণনা করার পাঁচটি লাইন#

tiktoken README (১ নভেম্বর ২০২৬-এ যাচাইকৃত) পুরো ধারণাটি দেখায়: একটি এনকোডিং বেছে নিন, টেক্সট এনকোড করুন, এবং তালিকার দৈর্ঘ্যই হলো টোকেন সংখ্যা।

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) মূল টেক্সট ফিরিয়ে দেয়, যা একটি সুবিধাজনক স্যানিটি চেক—আপনি যে টেক্সট দেখছেন সেটাই মডেল দেখবে কিনা। README-তে tiktoken.encoding_for_model('gpt-4o')-ও উল্লেখ আছে, যা একটি নির্দিষ্ট OpenAI মডেলের জন্য টোকেনাইজার বেছে নেয়। এটাই মনে রাখার মতো মূল বিষয়: টোকেনাইজার মডেল পরিবারের অন্তর্গত। README-এর নিয়ম হলো প্রতি টোকেনে প্রায় চার বাইট টেক্সট, এবং এটি কেবল OpenAI-এর টোকেনাইজার সম্পর্কে বলে।

তাহলে DeepSeek মডেলের জন্য আপনি কী করবেন? একই গণনাকে কার্যকর অনুমান হিসেবে ব্যবহার করুন, এবং নিচে দেখানো মতো এটি ক্যালিব্রেট করুন।

সংখ্যা অনুমান করুন

একটি ২,০০০ অক্ষরের ইংরেজি টেক্সট মোটামুটি কত টোকেন?

উত্তর দেখান

উত্তর: ৫০০

প্রায় ৫০০। README-এর প্রতি টোকেনে চার বাইটের নিয়ম এবং সাধারণ ইংরেজি টেক্সটে প্রতি অক্ষরে প্রায় এক বাইট ধরে, ২,০০০ ÷ ৪ = ৫০০। অন্যান্য ভাষা ও ইমোজিতে প্রতি অক্ষরে বেশি বাইট লাগে, তাই সেই নিয়মে একই ২,০০০ অক্ষর সাধারণত বেশি টোকেন বোঝায়।

প্রম্পট কি উইন্ডোতে ফিট করে?#

প্রতিটি মডেলের একটি কনটেক্সট উইন্ডো থাকে, এবং আপনার ইনপুট যোগ আপনি যে উত্তর অনুমোদন করছেন তা এর মধ্যে ফিট হতে হবে। আমরা যে মডেলগুলো পরিবেশন করি তাদের উইন্ডো: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K টোকেন। দীর্ঘতম উত্তর DeepSeek-V4-Flash-এর জন্য 32,768 টোকেন এবং বাকি দুটির জন্য 8,192 (CheapTokens মডেল তালিকা, ১ নভেম্বর ২০২৬)।

কলের আগে একটি গার্ড চার লাইন:

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 তা বিস্তারিত দেখায়।

এতে কত খরচ হবে?#

এবার বাজেট। একটি সাধারণ আইটেম নিন, এটি গণনা করুন, এবং গুণ করুন। ধরুন আপনি ৫,০০০ অর্ডার ইমেইল শ্রেণিবদ্ধ করছেন। আপনি একটি প্রতিনিধিত্বমূলক ইমেইল গণনা করে পান প্রায় ৮০০ ইনপুট টোকেন, এবং লেবেল ও একটি সংক্ষিপ্ত কারণের জন্য ২০০ আউটপুট টোকেন সীমাবদ্ধ করেন। মোট: ৫,০০০ × ৮০০ = ৪,০০০,০০০ ইনপুট টোকেন এবং ৫,০০০ × ২০০ = ১,০০০,০০০ আউটপুট টোকেন।

নিচের টেবিলটি ঠিক সেই কাজটির মূল্য নির্ধারণ করে লাইভ দামে, ইনপুট ও আউটপুট একসাথে গণনা করে:

মডেল প্রতি অনুরোধে ৫,০০০টি অনুরোধ OpenRouter, ৫,০০০টি অনুরোধ
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

প্রতি অনুরোধে ৮০০ ইনপুট এবং ২০০ আউটপুট টোকেন। প্রতি 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-এর সাথে তুলনা করুন।

অনুমানকে usage-এর সাথে তুলনা করুন#

অনুমানটি অন্য কারও টোকেনাইজার সম্পর্কে একটি আন্দাজ, তাই এটি একবার উত্তরপত্রের সাথে মিলিয়ে নিন। প্রতিটি প্রতিক্রিয়ায় একটি 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_tokensAPI যেভাবে গণনা করেছে সেই অনুযায়ী ইনপুট আকার
  • usage.completion_tokensউত্তরের আকার, আউটপুট দিকে মূল্য নির্ধারিত
  • max_tokensউইন্ডো চেকের সময় আপনি যে উত্তর দৈর্ঘ্যের সীমা সংরক্ষণ করেন

গণনা সস্তা, লোকাল এবং কয়েক সেকেন্ড লাগে। টাকা খরচ করে এমন কলের আগে এটি করুন।