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

শিক্ষানবিসদের জন্য AIগাইড

কেন একটি দীর্ঘ AI চ্যাট বেশি খরচ করে: API হিস্টোরি আবার পাঠায়

একটি AI চ্যাটে প্রতিটি নতুন মেসেজ পুরো হিস্টোরি আবার পাঠায়, তাই প্রতি টার্নে ইনপুট বাড়ে। গণিতটি দেখুন এবং খরচ কম রাখার ৩টি উপায় জানুন।

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

কভার: “কেন একটি দীর্ঘ চ্যাট প্রতিটি মেসেজে বেশি খরচ করে” — API প্রতি টার্নে পুরো হিস্টোরি আবার পাঠায়
এই পৃষ্ঠায়
  1. সংক্ষিপ্ত উত্তর
  2. বানানো সংখ্যা দিয়ে একটি উদাহরণ
  3. লাইভ দামে কত খরচ হয়
  4. খরচ কম রাখার তিনটি উপায়
  5. 1. বিষয় পরিবর্তন হলে নতুন চ্যাট শুরু করুন
  6. 2. হিস্টোরি ছেঁটে ফেলুন
  7. 3. পুরনো টার্নগুলো সারাংশ দিয়ে প্রতিস্থাপন করুন
  8. নিজের কোডে এটি দেখুন
  9. দীর্ঘ চ্যাট কোথায় চালাবেন

একটি চ্যাটের প্রথম কয়েকটি মেসেজ সস্তা। পঞ্চাশতম মেসেজ দশম মেসেজের চেয়ে লক্ষণীয়ভাবে বেশি খরচ করে, যদিও আপনি সমান পরিমাণ টাইপ করেছেন। কিছুই নষ্ট হয়নি: চ্যাট API-গুলো এভাবেই কাজ করে।

সংক্ষিপ্ত উত্তর#

একটি মডেল আপনার আগের রিকোয়েস্টগুলো মনে রাখে না। OpenAI-এর ডকুমেন্টেশন সরাসরি বলছে: "each text generation request is independent and stateless", এবং একটি মাল্টি-টার্ন কথোপকথনের জন্য আপনি পরের রিকোয়েস্টে আগের মেসেজগুলো এবং মডেলের আগের উত্তরটি অন্তর্ভুক্ত করেন। Anthropic-এর Messages API একই প্যাটার্ন বর্ণনা করে: স্টেটলেস মাল্টি-টার্ন কথোপকথন, যেখানে আগের টার্নগুলো messages প্যারামিটারে পাঠানো হয়।

তাই একটি অ্যাপে আপনি যে চ্যাট উইন্ডো দেখেন তা অ্যাপটি তৈরি করা একটি মায়া। এর পেছনে, প্রতিটি নতুন মেসেজ একটি নতুন রিকোয়েস্ট যা এখন পর্যন্ত পুরো কথোপকথন বহন করে। আপনি প্রতিটি রিকোয়েস্টে ইনপুট টোকেনের জন্য খরচ দেন, এবং হিস্টোরি সেই ইনপুটের অংশ। পরিভাষাগুলোতে নতুন হলে, প্রথমে What is a token এবং Input vs output tokens পড়ুন।

OpenAI তার রেসপন্স চেইনের জন্য বিলিং দিকটি স্পষ্টভাবে উল্লেখ করে: চেইনের সমস্ত আগের ইনপুট টোকেন ইনপুট টোকেন হিসেবে বিল হয়। একই নীতি যেকোনো API-এর জন্য প্রযোজ্য যেখানে আপনি নিজেই হিস্টোরি পাঠান: আপনি যা পাঠান তা-ই গণনা করা হয়।

বানানো সংখ্যা দিয়ে একটি উদাহরণ#

নিচের সংখ্যাগুলো একটি শিক্ষামূলক উদাহরণ, কোনো পরিমাপ নয়। ধরে নিন আপনার প্রতিটি মেসেজ প্রায় 200 টোকেন এবং প্রতিটি উত্তর প্রায় 300 টোকেন। একটি সম্পূর্ণ বিনিময় হিস্টোরিতে 500 টোকেন যোগ করে।

টার্ন আগের হিস্টোরি আবার পাঠানো নতুন মেসেজ এই রিকোয়েস্টের ইনপুট আউটপুট
1 0 200 200 300
5 500 × 4 = 2,000 200 2,200 300
10 500 × 9 = 4,500 200 4,700 300
20 500 × 19 = 9,500 200 9,700 300

উত্তর একই দৈর্ঘ্যে থাকে, কিন্তু টার্ন 20-এর ইনপুট টার্ন 1-এর ইনপুটের প্রায় পঞ্চাশ গুণ। আউটপুট বাড়ে না; ইনপুট বাড়ে।

এখন একটি 20-টার্ন চ্যাটের মোট। হিস্টোরি 0, 1, 2 ... 19 বার যতগুলো বিনিময় আছে ততবার আবার পাঠানো হয়, যা একটি সরল যোগফল:

  • পুরনো বিনিময় আবার পাঠানো: 500 × 190 = 95,000 টোকেন (190 হলো 0 + 1 + 2 + ... + 19)।
  • নতুন মেসেজ: 200 × 20 = 4,000 টোকেন।
  • চ্যাটের মোট ইনপুট: 95,000 + 4,000 = 99,000 টোকেন।
  • মোট আউটপুট: 300 × 20 = 6,000 টোকেন।

যদি মডেল সবকিছু বিনামূল্যে মনে রাখত, ইনপুট হতো মাত্র 200 × 20 = 4,000 টোকেন। বাকিটা হলো হিস্টোরি আবার পাঠানো হচ্ছে। টার্নের সংখ্যা দ্বিগুণ করলে হিস্টোরির খরচ দ্বিগুণ হয় না, তা প্রায় চার গুণ হয়, কারণ যোগফল টার্ন সংখ্যার বর্গের সাথে বাড়ে।

লাইভ দামে কত খরচ হয়#

এখানে একই 20-টার্ন চ্যাট (99,000 ইনপুট, 6,000 আউটপুট) বর্তমান দামে। টেবিলটি লাইভ এবং ট্যারিফ পরিবর্তন হলে আপডেট হয়; শেষ কলামটি তুলনার জন্য OpenRouter-এর রেফারেন্স দাম।

মডেল খরচ OpenRouter
GLM-5.3-Flash $0.0022 $0.0045
DeepSeek-V4-Flash $0.0021 $0.0056
MiniMax-M2.7 $0.0059 $0.0369

মোট ৯৯,০০০ ইনপুট এবং ৬,০০০ আউটপুট টোকেন। প্রতি 1M টোকেনের দাম বর্তমান এবং আমাদের ট্যারিফের সাথে পরিবর্তিত হয়; OpenRouter কলামটি একই ওয়ার্কলোডের জন্য রেফারেন্স মূল্য দেখায়।

টেক্সটে দ্রুত যাচাইয়ের জন্য: MiniMax-M2.7-এ এই পুরো কথোপকথনের খরচ $0.0059। এ ধরনের চ্যাটে, যেখানে ইনপুট প্রধান, ইনপুট দামই সবচেয়ে গুরুত্বপূর্ণ: MiniMax-M2.7-এ এটি OpenRouter-এর রেফারেন্স দামের চেয়ে সস্তা। প্রতি 1M টোকেনে, MiniMax-M2.7-এর ইনপুট $0.05 এবং আউটপুট $0.15।

খরচ কম রাখার তিনটি উপায়#

1. বিষয় পরিবর্তন হলে নতুন চ্যাট শুরু করুন#

সবচেয়ে সস্তা হিস্টোরি হলো খালি হিস্টোরি। যদি আপনি একটি ফাংশন ডিবাগ করা শেষ করে এখন একটি রেসিপি চান, একটি নতুন চ্যাট 9,700-এর বদলে 200 টোকেন পাঠায়। একটি অ্যাপে এটি একটি বাটন; কোডে এটি history = []। যখনই আগের কনটেক্সট পরের প্রশ্নে আর সাহায্য করে না তখনই এটি করুন।

2. হিস্টোরি ছেঁটে ফেলুন#

শুধু শেষ কয়েকটি মেসেজ রাখুন এবং বাকিগুলো বাদ দিন। ধরুন আপনি শেষ তিনটি বিনিময় রাখেন, তাই হিস্টোরি কখনো 500 × 3 = 1,500 টোকেন ছাড়ায় না:

  • টার্ন 1-3 স্বাভাবিকভাবে বাড়ে: 1,500 টোকেন হিস্টোরি (0 + 500 + 1,000)।
  • টার্ন 4-20 প্রতিটি সীমিত 1,500 বহন করে: 1,500 × 17 = 25,500 টোকেন।
  • হিস্টোরি মোট: 1,500 + 25,500 = 27,000 টোকেন, সাথে 4,000 নতুন মেসেজ = 31,000 টোকেন ইনপুট।

একই 20 টার্নের জন্য 99,000-এর বদলে এটি 31,000, এবং MiniMax-M2.7-এ এটি দাঁড়ায় $0.0025। ছেঁটে ফেলার মূল্য হলো মডেল চ্যাটের শুরুর অংশ ভুলে যায়, তাই সিস্টেম প্রম্পট এবং যে তথ্যগুলো হারানো যাবে না সেগুলো ছাঁটা অংশের বাইরে রাখুন।

3. পুরনো টার্নগুলো সারাংশ দিয়ে প্রতিস্থাপন করুন#

হিস্টোরি দীর্ঘ হলে, মডেলকে একবার এটি সারসংক্ষেপ করতে বলুন, তারপর পুরো টেক্সটের বদলে সারাংশ দিয়ে চালিয়ে যান। উপরের উদাহরণে, নয়টি বিনিময় 4,500 টোকেন; প্রায় 300 টোকেনের একটি সারাংশ মূল বিষয়গুলো সামনে বহন করে। সারাংশ লেখার জন্য আপনি একটি অতিরিক্ত রিকোয়েস্টের খরচ দেন, এবং পরের প্রতিটি রিকোয়েস্ট হালকা হয়। এটি সাধারণ ছাঁটাইয়ের চেয়ে বেশি অর্থ ধরে রাখে, কিছুটা বিস্তারিতের বিনিময়ে।

কনটেক্সট উইন্ডো একটি আলাদা সীমা: এটি নির্ধারণ করে একটি রিকোয়েস্টে কত টোকেন থাকতে পারে, উত্তরসহ। হিস্টোরি শেষ পর্যন্ত সেই সিলিং-এ পৌঁছাবে; Why does an AI answer stop mid-sentence? এটি ব্যাখ্যা করে।

নিজের কোডে এটি দেখুন#

রেসপন্সে একটি usage অবজেক্ট থাকে, তাই আপনি নিজেই বৃদ্ধি লক্ষ্য করতে পারেন। এটি একটি উদাহরণ: কীটি প্রতিস্থাপন করুন এবং CheapTokens ডকুমেন্টেশন থেকে মডেল আইডি নিন, কারণ প্রোভাইডারদের মধ্যে আইডি ভিন্ন হয়।

python
from openai import OpenAI

client = OpenAI(base_url='https://api.cheaptokens.dev/v1', api_key='YOUR_KEY')

system = {'role': 'system', 'content': 'You are a helpful assistant.'}
history = []
KEEP = 7  # new message + last 3 exchanges (6 messages); None keeps everything

def ask(text):
    history.append({'role': 'user', 'content': text})
    r = client.chat.completions.create(
        model='MODEL_ID_FROM_DOCS',
        messages=[system] + (history[-KEEP:] if KEEP else history),
    )
    answer = r.choices[0].message.content
    history.append({'role': 'assistant', 'content': answer})
    print(r.usage.prompt_tokens, r.usage.completion_tokens)
    return answer

পরপর কয়েকবার ask() কল করুন এবং prompt_tokens প্রিন্ট করুন: KEEP = None-এর সাথে এটি প্রতি টার্নে বাড়ে, KEEP = 7-এর সাথে এটি সমান হয়ে যায়। যে এজেন্টগুলো অনেক ধাপ লুপ করে তাদের প্রতিটি ধাপে একই প্রভাব প্রযোজ্য; How to estimate the cost of an AI agent দেখায় কীভাবে এর জন্য বাজেট করা যায়।

দীর্ঘ চ্যাট কোথায় চালাবেন#

দীর্ঘ সংলাপ এবং এজেন্ট লুপ ঠিক সেই কাজগুলো যেখানে ইনপুটের পরিমাণ প্রধান, তাই একটি বড় কনটেক্সট উইন্ডো এবং দীর্ঘ উত্তরের জায়গা দুটোই গুরুত্বপূর্ণ:

  • MiniMax-M2.7: 180K কনটেক্সট, প্রতি উত্তরে সর্বোচ্চ 8,192 টোকেন, ইনপুট ও আউটপুট দুটোই OpenRouter-এর রেফারেন্স দামের চেয়ে সস্তা।
  • DeepSeek-V4-Flash: 380K কনটেক্সট, প্রতি উত্তরে সর্বোচ্চ 32,768 টোকেন, আউটপুট OpenRouter-এর রেফারেন্স দামের চেয়ে সস্তা।

CheapTokens-এ সব মডেলের জন্য একটি ব্যালেন্স, প্রতি মডেলে নির্দিষ্ট দাম যেখানে পিক আওয়ার নেই, এবং OpenAI Chat Completions ও Anthropic Messages-এর সাথে সামঞ্জস্যপূর্ণ একটি API, তাই উপরের কোডটি বেস URL পরিবর্তন করলেই কাজ করে। ব্যালেন্স টপ আপ করুন এবং Your first API request with CheapTokens অনুসরণ করে আপনার প্রথম রিকোয়েস্ট পাঠান।