প্রম্পট ক্যাশিং — ৯০% পর্যন্ত সাশ্রয়
এই পাঠে যা শিখবেন
- কেন ডিফল্ট আচরণে একই কনটেন্ট বারবার বিল হয়
- প্রম্পট ক্যাশিং কীভাবে কাজ করে এবং বাস্তবে কত সাশ্রয় হতে পারে — নির্দিষ্ট সংখ্যাসহ
- Anthropic, OpenAI ও Google — প্রতিটি প্রোভাইডারে ক্যাশিং বাস্তবায়নের পার্থক্য
- এমনভাবে প্রম্পট সাজানোর নিয়ম যাতে ক্যাশিং স্বয়ংক্রিয়ভাবে কাজ করে
১ · কেন একই কনটেন্ট বারবার বিল হয়
পাঠ ০১-এ আমরা দেখেছি — API কল করার সময় সম্পূর্ণ প্রম্পট (system prompt, tool definition, কথোপকথনের ইতিহাস, ডকুমেন্ট, প্রশ্ন — সবকিছু) প্রতিবার নতুন করে মডেলে পাঠানো হয়। কিন্তু বাস্তব প্রোডাকশন সিস্টেমে এই প্রম্পটের একটা বড় অংশ প্রতিটি কলে হুবহু একই থাকে — যেমন একই system prompt, একই tool definitions, একই রেফারেন্স ডকুমেন্ট। শুধু ব্যবহারকারীর সাম্প্রতিক প্রশ্নটাই বদলায়।
ডিফল্ট আচরণে মডেল এই অপরিবর্তিত অংশটুকুও প্রতিবার শূন্য থেকে প্রসেস করে এবং প্রতিবারই তার জন্য পুরো দাম নেয় — এমনকি যদি সেই একই ৮,০০০ টোকেন গত এক মিনিট আগেও পাঠানো হয়ে থাকে। উচ্চ-ভলিউম অ্যাপ্লিকেশনে (যেমন একটি চ্যাটবট যেখানে হাজার হাজার ব্যবহারকারী একই system prompt ও ডকুমেন্ট সেট শেয়ার করে) এটি বিপুল অপচয়।
২ · প্রম্পট ক্যাশিং কী এবং কীভাবে কাজ করে
প্রম্পট ক্যাশিং (Prompt Caching)Prompt Cachingপ্রম্পটের অপরিবর্তিত prefix (শুরুর অংশ) মনে রাখার একটি প্রক্রিয়া, যাতে পরবর্তী কলে সেই অংশ পুনরায় গণনা না করে সরাসরি ব্যবহার করা যায় — ফলে সেই অংশের ইনপুট খরচ ও লেটেন্সি অনেক কমে যায়। হলো একটি প্রক্রিয়া যেখানে প্রোভাইডার প্রম্পটের অপরিবর্তিত অংশ (prefix) মনে রাখে, এবং পরের কলে সেই একই prefix দেখলে সেটি আবার প্রসেস না করে সরাসরি cached ফলাফল ব্যবহার করে। শুধু নতুন/ভিন্ন অংশটুকু (সাধারণত শেষের প্রশ্নটি) নতুন করে প্রসেস হয়।
ক্যাশিং কাজ করে কারণ একই prefix বারবার আসে। কোনো প্রম্পটের প্রথম X টোকেন যদি আগের কলের প্রথম X টোকেনের সাথে হুবহু মেলে, প্রোভাইডার সেই অংশের জন্য একটি সংরক্ষিত অবস্থা (cache) ব্যবহার করতে পারে — নতুন করে গণনা না করেই। এটি সাধারণত কয়েক মিনিটের একটি TTL (time-to-live) উইন্ডোতে সক্রিয় থাকে।
৩ · আসল সংখ্যায় সাশ্রয় — একটি বাস্তব উদাহরণ
সংখ্যাটা বিমূর্ত মনে হলে একটি বাস্তব উদাহরণ দেখা যাক। ধরুন একটি RAG চ্যাটবট প্রতিটি বার্তার সাথে ৮,০০০ টোকেনের system prompt এবং ডকুমেন্ট সেট পাঠায়। ক্যাশিং ছাড়া, স্ট্যান্ডার্ড রেটে এই পুনরাবৃত্ত কনটেক্সট চালাতে প্রতি মিলিয়ন বার্তায় আনুমানিক $24 খরচ হতে পারে। ক্যাশিং চালু থাকলে সেই একই পুনরাবৃত্ত টোকেনগুলোর খরচ নেমে আসতে পারে প্রতি মিলিয়নে আনুমানিক $0.30-এ — অর্থাৎ পুনরাবৃত্ত অংশে প্রায় ৯৮% হ্রাস।
সাধারণভাবে প্রোভাইডারদের দাবি হলো cached অংশে ইনপুট খরচ ৯০% পর্যন্ত কমানো সম্ভব — উপরের উদাহরণটি দেখায় যে বাস্তব প্রোডাকশন পরিস্থিতিতে (যেখানে prefix প্রায় সম্পূর্ণ পুনরাবৃত্ত হয়) এই সাশ্রয় আরও বেশি হতে পারে।
৪ · প্রতিটি প্রোভাইডারে ক্যাশিং কীভাবে কাজ করে
তিনটি প্রধান প্রোভাইডারই ২০২৬ সালে ক্যাশিং সাপোর্ট করে, কিন্তু ডেভেলপারের জন্য বাস্তবায়নের অভিজ্ঞতা বেশ ভিন্ন —
-
Anthropic (Claude): এখানে ক্যাশিং explicit opt-incache_controlমেসেজ কনটেন্টের একটি নির্দিষ্ট ব্লকে সেট করা একটি ফিল্ড, যা ডেভেলপারকে বলে দিতে হয় ঠিক কোন অংশটুকু ক্যাশ করতে হবে। —
ডেভেলপারকে মেসেজ কনটেন্টের নির্দিষ্ট ব্লকে
cache_controlফিল্ড সেট করে বলে দিতে হয় ঠিক কোথায় ক্যাশ পয়েন্ট বসবে। এতে নিয়ন্ত্রণ বেশি, কিন্তু ডেভেলপারকেই সচেতনভাবে এটি চালু করতে হয়। - OpenAI (GPT): ক্যাশিং স্বয়ংক্রিয় এবং কোনো কোড পরিবর্তন ছাড়াই কাজ করে — শুধু শর্ত একটাই, পুনরাবৃত্ত/স্ট্যাটিক কনটেন্ট প্রম্পটের শুরুতে রাখতে হবে। প্রোভাইডার নিজে থেকেই পুনরাবৃত্ত prefix শনাক্ত করে ক্যাশ প্রয়োগ করে।
- Google (Gemini): এখানে একে বলা হয় Context Caching — এটিও একটি সামঞ্জস্যপূর্ণ prefix অর্ডারিং থেকে উপকৃত হয়, অর্থাৎ একই universal নিয়মই এখানেও কাজ করে।
৫ · সোনালী নিয়ম — Static আগে, Variable পরে
সব প্রোভাইডার জুড়ে একটিই ইউনিভার্সাল বাস্তবায়ন-নিয়ম প্রযোজ্য — স্ট্যাটিক ও পুনর্ব্যবহৃত কনটেন্ট (system prompt, tool definitions, রেফারেন্স ডকুমেন্ট) প্রম্পটের শুরুতে রাখুন, আর ভ্যারিয়েবল/প্রশ্ন-নির্দিষ্ট কনটেন্ট একদম শেষে রাখুন। এটাই একটি cacheable prefix তৈরি করার একমাত্র উপায় — কারণ ক্যাশিং কেবল তখনই কাজ করে যখন প্রম্পটের শুরুর অংশ প্রতিটি কলে অভিন্ন থাকে। প্রশ্ন বা ভ্যারিয়েবল ডেটা মাঝখানে বসিয়ে দিলে সেই পয়েন্ট থেকে prefix আর মেলে না, এবং ক্যাশ ভেঙে যায়।
সুখবর হলো — এই একই অর্ডারিং নিয়ম Anthropic-এর long-context গবেষণা অনুযায়ী শুধু ক্যাশের জন্যই ভালো নয়, বরং উত্তরের মানও বাড়ায়। দীর্ঘ ডকুমেন্ট/ডেটা উপরে এবং প্রশ্নটি একদম শেষে রাখলে মডেলের উত্তরের গুণমান উন্নত হতে পারে, কারণ প্রশ্নটি মডেলের "চোখের সামনে" সবচেয়ে সাম্প্রতিক অবস্থানে থাকে ঠিক উত্তর দেওয়ার আগ মুহূর্তে। অর্থাৎ এখানে খরচ ও মান — দুটোই একই দিকে টানে।
৬ · ভালো বনাম খারাপ প্রম্পট অর্ডার
নিচের দুটি উদাহরণ একই তথ্য বহন করে, কিন্তু একটি ক্যাশযোগ্য (cacheable) এবং অন্যটি নয় —
❌ কম কার্যকর (ক্যাশ ভেঙে যায় — প্রশ্ন মাঝখানে বসানো):
[System prompt — ২০০ টোকেন]
ব্যবহারকারীর প্রশ্ন: "রিফান্ড পলিসি কী বলে যদি প্রোডাক্ট
৩০ দিনের বেশি ব্যবহার করা হয়ে থাকে?"
[রেফারেন্স ডকুমেন্ট — কোম্পানি পলিসি, ৭,৮০০ টোকেন]
উপরের ডকুমেন্ট অনুযায়ী উত্তর দাও।
এখানে প্রশ্নটি ডকুমেন্টের আগে বসানো হয়েছে — প্রতিটি নতুন প্রশ্নে prefix ভিন্ন হয়ে যাবে (কারণ প্রশ্ন সবার আগে), তাই ৭,৮০০-টোকেন ডকুমেন্টের জন্যও কোনো ক্যাশ হিট হবে না, যদিও ডকুমেন্টটা প্রতিবার একই।
✅ বেশি কার্যকর (স্ট্যাটিক অংশ শুরুতে — cacheable prefix):
[System prompt — ২০০ টোকেন]
[রেফারেন্স ডকুমেন্ট — কোম্পানি পলিসি, ৭,৮০০ টোকেন]
উপরের ডকুমেন্ট অনুযায়ী নিচের প্রশ্নের উত্তর দাও।
ব্যবহারকারীর প্রশ্ন: "রিফান্ড পলিসি কী বলে যদি প্রোডাক্ট
৩০ দিনের বেশি ব্যবহার করা হয়ে থাকে?"
এখানে system prompt এবং ডকুমেন্ট — দুটোই প্রম্পটের শুরুতে, এবং প্রতিটি কলে হুবহু একই থাকে। শুধু একদম শেষের প্রশ্নটি বদলায়। ফলে প্রথম ৮,০০০ টোকেন প্রতিবার cache থেকে আসে, আর নতুন করে বিল হয় শুধু প্রশ্ন ও উত্তরের টোকেন।
প্রম্পট ক্যাশিং কোনো এক্সট্রা "ফিচার" নয় যা মাঝে মাঝে কাজে লাগে — এটি খরচ-অপ্টিমাইজেশনের অগ্রাধিকার তালিকায় সর্বোচ্চ স্থানে থাকে, কারণ ঝুঁকি সবচেয়ে কম আর সাশ্রয় সবচেয়ে বেশি। শুধু প্রম্পটের গঠন ঠিক রাখলেই (স্ট্যাটিক আগে, ভ্যারিয়েবল পরে) — কোনো মডেল পরিবর্তন বা মানের ছাড় ছাড়াই — উল্লেখযোগ্য খরচ কমানো যায়।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ যদি একজন ব্যবহারকারী প্রতিটি বার্তায় আগের কথোপকথনের সাথে নতুন লাইন যোগ করে চলতে থাকেন (একটি ক্রমবর্ধমান কথোপকথন), তাহলে ক্যাশিং কি এখনও কাজ করবে?
হ্যাঁ, এবং এটাই ক্যাশিং-এর সবচেয়ে সাধারণ ব্যবহারিক ক্ষেত্র। একটি চলমান কথোপকথনে আগের সব বার্তা প্রম্পটের শুরুতে থাকে এবং অপরিবর্তিত থাকে — শুধু একদম শেষে নতুন বার্তা যোগ হয়। যেহেতু prefix (আগের সব কথোপকথন) প্রতিটি নতুন টার্নেও অভিন্ন থাকে, প্রোভাইডার সেই পুরো prefix cache থেকে ব্যবহার করতে পারে এবং শুধু নতুন যোগ হওয়া অংশটুকু নতুন করে প্রসেস করে।
এই কারণেই দীর্ঘ কথোপকথনভিত্তিক চ্যাটবট বা এজেন্ট সিস্টেমে ক্যাশিং-এর প্রভাব বিশেষভাবে বড় — কথোপকথন যত লম্বা হয়, পুনরাবৃত্ত prefix তত বড় হয়, এবং সাশ্রয়ও তত বেশি হয়।
প্র ০২ একটি সিস্টেমে ডেভেলপার প্রতিটি ব্যবহারকারীর জন্য system prompt-এ তাদের নাম ব্যক্তিগতভাবে বসিয়ে দেন ("তুমি করিমের সহকারী...")। এটা ক্যাশিং-এর ওপর কী প্রভাব ফেলবে?
এটি একটি সাধারণ ভুল যা ক্যাশিং ভেঙে দেয়। যেহেতু system prompt-টি প্রতিটি ব্যবহারকারীর জন্য আলাদা (নামের কারণে), এটি আর প্রকৃত অর্থে "স্ট্যাটিক" থাকে না — প্রতিটি ব্যবহারকারীর জন্য এটি একটি ভিন্ন prefix তৈরি করে, যদিও একই ব্যবহারকারীর একাধিক কলে এটি এখনও পুনরাবৃত্ত হতে পারে।
ব্যবহারিক সমাধান — ব্যক্তিগতকৃত তথ্য (নাম, আইডি) system prompt-এর একদম নিচে বা ভ্যারিয়েবল অংশে (প্রশ্নের কাছাকাছি) রাখা, যাতে সবচেয়ে বড় স্ট্যাটিক অংশ (নিয়ম, টোন, নির্দেশনা) prefix হিসেবে অভিন্ন থেকে ক্যাশযোগ্য থাকে।
প্র ০৩ Anthropic-এ ক্যাশিং explicit opt-in (ডেভেলপারকে cache_control বসাতে হয়), কিন্তু OpenAI-তে এটি স্বয়ংক্রিয়। এই পার্থক্যের ট্রেড-অফ কী হতে পারে?
Explicit opt-in মডেলে ডেভেলপার সুনির্দিষ্টভাবে ঠিক করতে পারেন প্রম্পটের কোন ব্লক পর্যন্ত ক্যাশ হবে — এতে জটিল প্রম্পটে (একাধিক ডকুমেন্ট, ভিন্ন TTL প্রয়োজনীয়তা) সূক্ষ্ম নিয়ন্ত্রণ পাওয়া যায়, কিন্তু ডেভেলপারকে সচেতনভাবে এটি বাস্তবায়ন করতে হয় — ভুলে গেলে সাশ্রয় হয় না।
স্বয়ংক্রিয় মডেলে কোনো এক্সট্রা কাজ ছাড়াই সাশ্রয় পাওয়া যায়, যতক্ষণ প্রম্পট অর্ডারিং সঠিক থাকে — কিন্তু ঠিক কতটুকু ক্যাশ হচ্ছে বা কোথায় ক্যাশ পয়েন্ট বসছে তার ওপর ডেভেলপারের সরাসরি নিয়ন্ত্রণ কম। দুটোই বৈধ ডিজাইন সিদ্ধান্ত — একটি নিয়ন্ত্রণ প্রাধান্য দেয়, অন্যটি সরলতা।
অনুশীলন
-
বিশ্লেষণ করুন: আপনার তৈরি করা একটি প্রম্পট (বা কল্পনা করা একটি প্রোডাকশন প্রম্পট) নিন এবং চিহ্নিত করুন
— এর কোন অংশগুলো সত্যিই "স্ট্যাটিক" (প্রতিটি কলে একই) এবং কোনগুলো "ভ্যারিয়েবল"। বর্তমান অর্ডার কি cache-friendly?
সাধারণত system prompt, রোল বর্ণনা, tool definitions এবং যেকোনো স্থির রেফারেন্স ডকুমেন্ট — এগুলো স্ট্যাটিক। ব্যবহারকারীর সাম্প্রতিক প্রশ্ন, timestamp, বা সেশন-নির্দিষ্ট ডেটা — এগুলো ভ্যারিয়েবল। যদি এই দুই ধরনের কনটেন্ট মিশিয়ে রাখা হয় (বিশেষ করে ভ্যারিয়েবল কিছু স্ট্যাটিক অংশের আগে বসানো থাকে), সেটা cache-friendly নয় — পুনর্গঠন দরকার।
-
হিসেব করুন: একটি অ্যাপ প্রতিদিন ৫০,০০০ বার্তা পাঠায়, প্রতিটিতে ৮,০০০ টোকেনের অভিন্ন system prompt +
ডকুমেন্ট থাকে। এই লেসনে দেওয়া $24/million ও $0.30/million হিসাব ব্যবহার করে, মাসিক (৩০ দিন) সাশ্রয় আনুমানিক কত হতে পারে?
মাসে বার্তা: ৫০,০০০ × ৩০ = ১৫,০০,০০০টি। ক্যাশিং ছাড়া আনুমানিক খরচ: ১.৫ million × $24 = $36। ক্যাশিং সহ: ১.৫ million × $0.30 = $0.45। অর্থাৎ শুধু এই পুনরাবৃত্ত prefix-এর জন্যই মাসিক আনুমানিক সাশ্রয় প্রায় $35.55 — এবং এটি শুধু একটি ছোট-স্কেল উদাহরণ; বড় প্রোডাকশন সিস্টেমে এই অঙ্ক আরও বহুগুণ বড় হতে পারে।
-
ডিজাইন করুন: একটি কাস্টমার-সাপোর্ট চ্যাটবটের জন্য প্রম্পট স্ট্রাকচার কল্পনা করুন যেখানে system prompt,
৩টি পলিসি ডকুমেন্ট এবং ব্যবহারকারীর প্রশ্ন — সবই থাকবে। এমনভাবে অর্ডার করুন যাতে সর্বোচ্চ পরিমাণ prefix cacheable থাকে।
সঠিক অর্ডার — (১) system prompt, (২) ৩টি পলিসি ডকুমেন্ট (নিজেরাও অভিন্ন অর্ডারে, যেমন সবসময় একই ক্রমে: রিফান্ড → শিপিং → ওয়ারেন্টি), (৩) নির্দেশনা বাক্য ("উপরের ডকুমেন্ট অনুযায়ী উত্তর দাও"), (৪) সবশেষে ব্যবহারকারীর প্রশ্ন। এতে প্রথম তিনটি অংশ — যেগুলো সবচেয়ে বড় ও পুনরাবৃত্ত — প্রতিটি কলে অভিন্ন prefix হিসেবে থাকে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পরবর্তী পাঠ — লিন প্রম্পটিং পাঠ ১৭ কম শব্দে বেশি ফল — কীভাবে বাহুল্যপূর্ণ প্রম্পট ছেঁটে ফেলা টোকেন খরচ ৬৬% পর্যন্ত কমাতে পারে।
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ২৮টি পাঠ টোকেন খরচ, মডেল সাইজিং, এজেন্টিক প্রম্পটিং ও আরও অনেক কিছু — সম্পূর্ণ কোর্স ম্যাপ।
- সব AI Courses দেখুন ABCL TECH AI Foundations, Python for AI, Machine Learning, Deep Learning, NLP ও LLM, Prompt Engineering — সব এক জায়গায়।
- AI সংবাদ ও সাম্প্রতিক ঘটনাবলি Blog ABCL TECH-এর বাংলা AI সংবাদ — Claude, GPT, Gemini-এর নতুন মডেল ও আপডেট নিয়ে।