ল্যাঙ্গুয়েজ মডেল

ওয়েব ফিচার: LanguageModel

Prompt API ডেভেলপারদের Gemini Nano ব্যবহার করে সরাসরি ব্রাউজারে ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং টাস্ক রান করার অনুমতি দেয়। এই বিল্ট-ইন AI পদ্ধতি ব্যবহারকারীর গোপনীয়তা নিশ্চিত করে, সার্ভারের খরচ কমায় এবং অফলাইন কার্যকারিতা চালু করে।

১. শুরু করা এবং হার্ডওয়্যার সংক্রান্ত প্রয়োজনীয়তা

Prompt API বর্তমানে Windows, macOS, Linux এবং Chromebook Plus-এর জন্য Chrome-এর 148 (ডেস্কটপ) ভার্সনে উপলভ্য।

হার্ডওয়্যার সংক্রান্ত পূর্বশর্ত

  • স্টোরেজ: ২২ জিবি খালি জায়গা (প্রাথমিক প্রোফাইল ও মডেলের জন্য)।
  • মেমরি/সিপিইউ: ১৬ জিবি র‍্যাম এবং ৪+ সিপিইউ কোর।
  • GPU: ৪ জিবি VRAM বা তার বেশি (অডিও ইনপুটের জন্য প্রয়োজন)।
  • নেটওয়ার্ক: শুধুমাত্র প্রাথমিক মডেল ডাউনলোডের জন্য প্রয়োজন।

API চালু করা হচ্ছে

ডাউনলোড ট্রিগার করার আগে মডেলের উপলভ্যতা চেক করুন:

const availability = await LanguageModel.availability();

// Do not call create() when unavailable — the model cannot run on this device.
if (availability !== 'unavailable') {
    const session = await LanguageModel.create({
        monitor(m) {
            // Inform the user while the model downloads so the UI doesn't appear frozen.
            m.addEventListener('downloadprogress', (e) => {
                console.log(`Downloaded ${e.loaded * 100}%`);
            });
        },
    });
}

২. মূল প্রম্পটিং ক্ষমতা

এই বিভাগে সেশনের উদাহরণে session.destroy() বাদ দেওয়া হয়েছে যাতে সংক্ষিপ্ত করা যায়। ডিভাইসের মেমরি খালি করার জন্য সেশনের আর প্রয়োজন না থাকলে, সবসময় session.destroy() কল করুন (বিভাগ ৫ দেখুন)।

বেসিক ও স্ট্রিম করা আউটপুট

সংক্ষিপ্ত উত্তরের জন্য, prompt() ব্যবহার করুন। আরও দীর্ঘ কন্টেন্টের জন্য, আরও বেশি রেসপন্সিভ UI প্রদান করতে promptStreaming() ব্যবহার করুন।

বাধ্যতামূলক: innerHTML-এ কখনও মডেল আউটপুট অ্যাসাইন করবেন না। মডেল আউটপুট বিশ্বস্ত নয় এবং এতে ইনজেক্ট করা মার্কআপ থাকতে পারে। সবসময় textContent বা স্যানিটাইজার ব্যবহার করুন।

const session = await LanguageModel.create();

// prompt() accumulates the full response before resolving — use for short, one-shot output.
const result = await session.prompt('Write a haiku about coding.');
// textContent, not innerHTML — model output is untrusted and must not be parsed as markup.
outputEl.textContent = result;

// promptStreaming() yields independent chunks that must be concatenated;
// use for longer content so each chunk can be rendered progressively.
const stream = session.promptStreaming('Write a long story about a robot.');
let completeResult = '';
for await (const chunk of stream) {
    completeResult += chunk;
    outputEl.append(chunk);
}
console.log('Full story:', completeResult);

মাল্টিমোডাল ইনপুট

Prompt API-তে টেক্সট, অডিও ও ভিজ্যুয়াল ইনপুট (ছবি, ক্যানভাস, ভিডিও ফ্রেম) কাজ করে।

const session = await LanguageModel.create({
    // Declaring expected input types lets the browser optimize model loading.
    expectedInputs: [{ type: 'text' }, { type: 'image' }],
    expectedOutputs: [{ type: 'text' }],
});

const response = await session.prompt([
    {
        role: 'user',
        content: [
            { type: 'text', value: 'What is in this image?' },
            { type: 'image', value: document.querySelector('canvas') },
        ],
    },
]);

৩. উন্নত সেশন ম্যানেজমেন্ট

সেশন মডেলকে একাধিক ইন্টার‍্যাকশন জুড়ে প্রসঙ্গ বজায় রাখতে দেয়।

কনটেক্সট ও কোটা

প্রতিটি সেশনে টোকেনের সর্বাধিক সীমা থাকে। আপনি session.contextUsage এবং session.contextWindow-এর মাধ্যমে ব্যবহার মনিটর করতে পারবেন। উইন্ডো উপচে পড়লে, সবচেয়ে পুরনো মেসেজ (সিস্টেম প্রম্পট ছাড়া) বাদ দেওয়া হয়।

ক্লোনিং সেশন

ক্লোনিংয়ের মাধ্যমে একই প্রাথমিক প্রসঙ্গ (যেমন, "সিস্টেম" পার্সোনালিটি) শেয়ার করে এমন সমান্তরাল কথোপকথন শুরু করা যায়। এর জন্য আবার শুরু করার প্রয়োজন হয় না।

const mainSession = await LanguageModel.create({
    initialPrompts: [{ role: 'system', content: 'You speak like a pirate.' }],
});

const branchA = await mainSession.clone();
const branchB = await mainSession.clone();
// Destroy the base after cloning — the clones own their own context from here.
mainSession.destroy();

আগের সেশন ফিরিয়ে আনা হচ্ছে

"রিস্টোর" করার নেটিভ ফিচার ডেভেলপ করা হচ্ছে, তবে আপনি initialPrompts-এ আগের ইতিহাস ফিড করে সেশন আবার তৈরি করতে পারবেন।

মনে রাখবেন: localStorage এনক্রিপ্ট করা নয় এবং স্থায়ী। সেভ করা কথোপকথনের ইতিহাসে ব্যবহারকারীর PII অন্তর্ভুক্ত থাকতে পারে — চ্যাট ইতিহাস সেভ করার আগে গোপনীয়তার প্রভাব বিবেচনা করুন।

// || '[]' ensures JSON.parse never receives null when the key doesn't exist yet.
const history = JSON.parse(localStorage.getItem('chat_history') || '[]');
const session = await LanguageModel.create({
    initialPrompts: history, // Array of {role, content} objects
});

৪. JSON স্কিমার সাথে স্ট্রাকচার্ড আউটপুট

মডেল যাতে "চ্যাটার" (যেমন, "অবশ্যই, এখানে আপনার JSON দেওয়া হল:") যোগ না করে, তার জন্য responseConstraint ফিল্ডের মাধ্যমে JSON স্কিমা ব্যবহার করুন। এটি নিশ্চিত করে যে আউটপুটটি সঠিক JSON যা অবিলম্বে পার্স করা যেতে পারে।

উদাহরণ: সেন্টিমেন্ট ক্লাসিফিকেশন

// Pass the schema as a plain object — do not JSON.stringify() it first.
const schema = {
    type: 'object',
    properties: {
        rating: { type: 'number', minimum: 1, maximum: 5 },
        is_positive: { type: 'boolean' },
    },
    required: ['rating', 'is_positive'],
};

const result = await session.prompt(
    "Rate the following feedback: 'The food was great!'",
    { responseConstraint: schema },
);

const data = JSON.parse(result);
console.log(data.rating); // 5

সীমাবদ্ধতা ও প্রিফিক্স

আপনি prefix: true ব্যবহার করে অ্যাসিস্ট্যান্টের উত্তর আগে থেকে পূরণ করে মডেলকে আরও নির্দেশ দিতে পারেন।

const character = await session.prompt([
    { role: 'user', content: 'Create a character sheet' },
    { role: 'assistant', content: '```json\n', prefix: true },
]);

৫. পেশাদার পদ্ধতি ও নিরাপত্তা

  • রিসোর্স ক্লিনআপ: মেমরি খালি করার জন্য কথোপকথন শেষ হলে সবসময় session.destroy() কল করুন।
  • আউটপুট নিরাপত্তা: মডেল আউটপুট বিশ্বস্ত নয়। ক্ষতিকর মডেল আউটপুট থেকে XSS ইনজেকশন প্রতিরোধ করতে, সবসময় textContent-এ ফলাফল লিখুন, innerHTML-এ নয়।
  • সীমিত HTML-এর অনুমতি দিতে হলে, নেটিভ Sanitizer API বা DOMPurify-এর মতো স্যানিটাইজার ব্যবহার করুন।
  • টাস্ক বাতিল করা: ব্যবহারকারীদের দীর্ঘ সময় ধরে চলা জেনারেশন বন্ধ করার অনুমতি দিতে AbortController ব্যবহার করুন। signal-কে prompt() বা promptStreaming()-এ পাস করুন, LanguageModel.create()-এ নয়।
  • নিরাপত্তা: iframe-এ অ্যাক্সেস নিয়ন্ত্রণ করতে অনুমতি সংক্রান্ত নীতি ব্যবহার করুন: <iframe src="..." allow="language-model"></iframe>.
  • ডিজাইন: দায়িত্বশীল AI প্রয়োগ নিশ্চিত করতে People + AI Guidebook পর্যালোচনা করুন।

স্ট্রাকচার্ড আউটপুট ও শক্তিশালী সেশন ম্যানেজমেন্ট একত্রিত করে, ডেভেলপাররা জটিল, স্টেটফুল AI অ্যাপ্লিকেশন তৈরি করতে পারেন যা সম্পূর্ণভাবে ব্যবহারকারীর ডিভাইসে চলে।

কী করবেন এবং কী করবেন না

কী করা উচিত এবং কী করা উচিত নয় তার সম্পূর্ণ তালিকা দেখতে, https://developer.chrome.com/docs/ai/built-in-ai-dos-donts.md.txt দেখুন। নিচে সারাংশ দেওয়া হল:

যুক্তিযুক্ত সময়ের মধ্যে মডেলটি প্রস্তুত করুন

এতে প্রযোজ্য: সব API, যেমন, Summarizer, Translator ও Writer.

করণীয়: AI ফিচার ব্যবহার করার জন্য ব্যবহারকারীর উদ্দেশ্য স্পষ্টভাবে বুঝতে পারার সাথে সাথেই সেশন শুরু করুন, যেমন, ব্যবহারকারী প্রাসঙ্গিক AI টুল সারফেসে নেভিগেট করলে, AI ওয়ার্কস্পেসের উপর মাউস নিয়ে গেলে অথবা ফিচারের আশেপাশের UI-এর সাথে ইন্টার‍্যাক্ট করলে। সেশন প্রি-ওয়ার্মিংয়ের মাধ্যমে ব্যবহারকারী টাস্ক সেট-আপ করার সময় ব্যাকগ্রাউন্ডে মডেলটি মেমরিতে লোড হয়ে যায়, যার ফলে কোল্ড-স্টার্টের কারণে হওয়া দেরি এড়ানো যায়। বর্তমান ফলাফল রেন্ডার করা শুরু করার সাথে সাথেই পরবর্তী সবচেয়ে সম্ভাব্য AI টাস্ক শুরু করে এক ধাপ এগিয়ে থাকার চেষ্টা করুন, উদাহরণস্বরূপ, যদি ফিচারটি পুনরাবৃত্তিমূলক ব্যবহারের জন্য ডিজাইন করা হয়।

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

তৈরি করার সময় প্রাথমিক প্রম্পট সেট করুন

এতে প্রযোজ্য: Prompt API.

করণীয়: প্রথম প্রম্পটের স্পিড উন্নত করতে সেশন শুরু করার সময় সিস্টেম সংক্রান্ত নির্দেশাবলী প্রদান করুন।

যা করবেন না: খালি সেশন দিয়ে শুরু করা এবং প্রথম prompt() কলের অংশ হিসেবে সিস্টেমের নির্দেশাবলী পাঠানো। এটি লেটেন্সি বাড়ায় কারণ এটি মডেলকে শেষ মুহূর্তে সেইসব নির্দেশাবলী প্রসেস করতে বাধ্য করে।

বারবার করা টাস্কের জন্য সেশন ক্লোন করুন

এতে প্রযোজ্য: Prompt API.

Prompt API-এর জন্য, প্রতিটি সেশন কথোপকথনের প্রসঙ্গ ট্র্যাক করে, আগের সব ইন্টার‍্যাকশন বিবেচনা করে। যেহেতু একটি ক্লোন তার মূল সেশন থেকে প্রাথমিক প্রম্পট এবং ক্লোনিং পয়েন্ট পর্যন্ত সমস্ত ইন্টার‍্যাকশন ইতিহাস সহ সবকিছু ইনহেরিট করে, তাই আপনার ব্যবহারকে এমনভাবে গঠন করুন যাতে শুধুমাত্র আপনার যা প্রয়োজন তা ইনহেরিট করা যায়।

করণীয়:

  • বেস সেশন তৈরি করা: সম্পর্কহীন টাস্ক দক্ষতার সাথে ম্যানেজ করতে, এমন একটি বেস সেশন তৈরি করুন যাতে শুধুমাত্র আপনার সিস্টেম নির্দেশাবলী থাকে এবং আগের কথোপকথনের কোনও প্রসঙ্গ থাকে না।
  • বেসলাইন ক্লোন করা: সিস্টেম নির্দেশাবলী আবার পার্স করার ওভারহেড বাঁচাতে নতুন টাস্কের জন্য সেই বেস সেশনে clone() ব্যবহার করুন। এটি আপনাকে সমান্তরাল কথোপকথন তৈরি করতে বা কোনও টাস্ককে তার বেসলাইনে রিসেট করতে দেয়।

করণীয় নয়:

  • সম্পর্কহীন টাস্কের জন্য একই সেশন আবার ব্যবহার করবেন না এবং অপ্রয়োজনীয় ইন্টার‍্যাকশন ইতিহাস আছে এমন কোনও সেশন ক্লোন করা এড়িয়ে চলুন। উভয় প্যাটার্নের কারণে আপনার বর্তমান টাস্কে অপ্রাসঙ্গিক পূর্ববর্তী প্রসঙ্গ হস্তক্ষেপ করতে পারে।
  • একই সিস্টেম নির্দেশাবলী সহ create()-কে বারবার কল করবেন না। পারফর্ম্যান্স অপ্টিমাইজ করতে, এর পরিবর্তে ক্লোনিং প্যাটার্ন ব্যবহার করুন।

অব্যবহৃত সেশন ধ্বংস করুন

এতে প্রযোজ্য: সব API।

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

করবেন না: একাধিক বড় সেশন অ্যাক্টিভ রাখবেন না। প্রতিটি সেশন মেমরি ব্যবহার করে, যা অপ্রয়োজনীয় রিসোর্স ব্যবহার তৈরি করে এবং সমস্যা হতে পারে। গার্বেজ কালেক্টর স্বাভাবিকভাবেই সেশন মুছে দেবে, তবে destroy() কল করলে আরও দ্রুত মেমরি খালি হয়।

নিরাপদে ও দক্ষতার সাথে স্ট্রিমিং রেসপন্স রেন্ডার করুন

এতে প্রযোজ্য: স্ট্রিমিং সাপোর্ট সহ সব API (প্রম্পট, সামারাইজার, রাইটার, রিরাইটার ও ট্রান্সলেটর)।

করণীয়: LLM-এর সব আউটপুটকে বিশ্বাসযোগ্য নয় এমন কন্টেন্ট হিসেবে বিবেচনা করুন। শুধু চাঙ্ক নয়, সম্পূর্ণ সম্মিলিত আউটপুট স্যানিটাইজ করুন, কারণ ক্ষতিকর কোড আপডেট জুড়ে বিভক্ত হতে পারে। রেন্ডার করার আগে, যেখানে কাজ করে সেখানে Sanitizer API ব্যবহার করুন। পারফর্ম্যান্স যাতে কমে না যায়, তার জন্য streaming-markdown-এর মতো স্ট্রিমিং Markdown পার্সার ব্যবহার করুন।

করবেন না: প্রতিটি চাঙ্ক আপডেটে সরাসরি innerHTML সেট করবেন না। এটি ধীরগতির, বিশেষ করে সিনট্যাক্স হাইলাইটিংয়ের মতো জটিল ফর্ম্যাটিংয়ের ক্ষেত্রে এবং ইনজেকশনের ক্ষেত্রে দুর্বল।

স্পিডের জন্য ইনপুট অপ্টিমাইজ করুন

এতে প্রযোজ্য: সব API।

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

যা করবেন না: API-তে প্রসেস না করা টেক্সট, অপ্রয়োজনীয় মেটাডেটা, HTML ট্যাগ বা ফিল্টার না করা বড় তালিকা পাঠাবেন না। ইনপুটের সাইজ বড় হলে লেটেন্সি উল্লেখযোগ্যভাবে বেড়ে যায়, যার ফলে অনেক ডিভাইসে AI ফিচার কাজ করছে না বলে মনে হতে পারে।

অনুমানযোগ্য ফলাফলের জন্য স্ট্রাকচার্ড আউটপুট ব্যবহার করুন

এতে প্রযোজ্য: Prompt API.

করণীয়: মডেলের থেকে নির্দিষ্ট ফর্ম্যাটে ডেটা পেতে চাইলে, JSON স্কিমা প্রদান করার জন্য responseConstraint ফিল্ড ব্যবহার করে স্ট্রাকচার্ড আউটপুট ব্যবহার করুন। এটি নিশ্চিত করে যে আউটপুটটি অনুমানযোগ্য এবং আপনাকে জটিল পোস্ট-প্রসেসিং বা ম্যানুয়াল পার্সিংয়ের প্রয়োজন থেকে বিরত রাখে।

করবেন না: শুধু ন্যাচারাল ল্যাঙ্গুয়েজ নির্দেশাবলীর (যেমন "শুধু JSON আউটপুট") উপর নির্ভর করবেন না। মডেলে কথোপকথন সংক্রান্ত ফিলার অন্তর্ভুক্ত থাকতে পারে যা আপনার পার্সারকে ভেঙে দেয়।

দৈর্ঘ্যের সীমাবদ্ধতা থেকে জেনারেশন ডিকাপল করুন

এতে প্রযোজ্য: Prompt API, কারণ এটিই একমাত্র API যা স্ট্রাকচার্ড আউটপুট স্কিমা সমর্থন করে।

করণীয়: মডেলকে স্বাভাবিকভাবে উত্তর জেনারেট করতে দিন এবং তারপর আপনার UI-তে ফিট করার জন্য টেক্সট ট্রাঙ্কেট করতে ক্লায়েন্ট-সাইড লজিক ব্যবহার করুন।

করবেন না: maxLength: 125-এর মতো কঠোর অক্ষর সীমা প্রয়োগ করা স্ট্রাকচার্ড আউটপুট স্কিমা ব্যবহার করে। আপনার সেট করা সীমার চেয়ে model-এর উত্তর বড় হলে, model বিদেশি ভাষা বা ইমোজির মতো হাই-ডেনসিটি টোকেনে সুইচ করতে পারে, যার ফলে অর্থহীন আউটপুট তৈরি হতে পারে।

ব্যবহারকারীকে জানিয়ে রাখুন

এতে প্রযোজ্য: সব API।

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

  • দীর্ঘ কন্টেন্টের জন্য স্ট্রিমিং: সারসংক্ষেপ বা চ্যাটের জন্য, স্ট্রিমিং ডিফল্ট হিসেবে প্রতি-টোকেন টাইপরাইটার এফেক্ট তৈরি করে। এটি স্বাভাবিক মনে হতে পারে এবং তাৎক্ষণিক প্রতিক্রিয়া প্রদান করতে পারে।
  • ছোট টাস্কের (বা দীর্ঘ অ্যাসিঙ্ক টাস্ক) জন্য নন-স্ট্রিমিং: ছোট আউটপুটের জন্য, যেমন, অল্টারনেট টেক্সট, নন-স্ট্রিমিং আরও পালিশ করা UI তৈরি করতে পারে। এছাড়াও, বর্তমান AI টাস্ক রেন্ডার করার সময় এটি পরবর্তী AI টাস্কের জন্য অনুমানমূলকভাবে প্রস্তুতি নেওয়ার সময় দেয়। এই পদ্ধতিটি দীর্ঘ অ্যাসিঙ্ক্রোনাস বা ব্যাকগ্রাউন্ড টাস্কের জন্যও কাজ করে। ব্যবহারকারী যদি তার জার্নি চালিয়ে যাওয়ার জন্য আউটপুটে ব্লক না হন, তাহলে আউটপুট তৈরি করার কোনও জরুরি প্রয়োজন নেই। UI-তে প্রসেস চলছে বলে সিগন্যাল দেওয়া।
  • আপডেটের জন্য ভিজ্যুয়াল ট্রানজিশন: টেক্সট অনুবাদ বা রিরাইট করার সময় অ্যানিমেশন ব্যবহার করুন, যেমন, ওয়ার্ড-মর্ফিং।

করবেন না: ভিজ্যুয়াল ইঙ্গিত ছাড়া UI আপডেট করা।

ব্যবহারকারীর সময় ও কাজ সংক্রান্ত মানসিক মডেলের সাথে অ্যালাইন করা

এতে প্রযোজ্য: সব API।

করণীয়: উত্তর প্রায় সাথে সাথে দেওয়া হলে, এক বা দুই সেকেন্ডের কৃত্রিম বিলম্বের কথা বিবেচনা করুন। তবে, ব্যবহারকারীরা ফলাফল আরও বেশি বিশ্বাসযোগ্য বলে মনে করতে পারেন যখন তারা এমন একটি জেনারেশন প্রসেস দেখেন যা তাদের কাজের অনুভূত অসুবিধার সাথে সামঞ্জস্যপূর্ণ। AI প্রসেস যে হয়েছে তা বোঝাতে অ্যানিমেশন ব্যবহার করুন।

যা করবেন না: ঝটপট UI পরিবর্তন করে ব্যবহারকারীদের চমকে দেবেন না।

ব্যবহারকারীদের দ্রুত নেভিগেট করতে এবং AI এডিট আগের অবস্থায় ফেরাতে দিন

এতে প্রযোজ্য: সব API।

করণীয়: আপনার UI-তে স্টেপার বা নেভিগেশন ইতিহাস যোগ করুন যাতে ব্যবহারকারীরা আত্মবিশ্বাসের সাথে বিভিন্ন ফলাফল এক্সপ্লোর করতে পারেন এবং AI-এর করা এডিট দ্রুত আগের অবস্থায় ফিরিয়ে আনতে পারেন। এর ফলে বিভিন্ন ভার্সন এখনও সহজেই উপলভ্য থাকে।

করবেন না: ব্যবহারকারীর আগের ড্রাফ্ট বা AI-এর মাধ্যমে তৈরি করা ফলাফল যা তিনি পছন্দ করেছেন, তা ওভাররাইট করবেন না। এতে ব্যবহারকারী আগের ভার্সনে ফিরে যেতে, আগের ভার্সন ফিরিয়ে আনতে বা ভার্সনগুলির মধ্যে তুলনা করতে পারবেন না।

ব্যবহারকারীর নিয়ন্ত্রণ ও ওভাররাইড করার ক্ষমতা প্রদান করা

এতে প্রযোজ্য: সব API।

করণীয়: জেনারেট করা সব কন্টেন্টের চূড়ান্ত এডিটর হিসেবে ব্যবহারকারীকে সেট করুন। সহজ ওভাররাইড প্রদান করুন যাতে ব্যবহারকারী চূড়ান্ত আউটপুটের সম্পূর্ণ মালিকানা বজায় রাখেন। API ভুল ফলাফল দেখাতে পারে।

করবেন না: AI-জেনারেটেড ফলাফলকে একমাত্র বিকল্প হিসেবে জোর করে দেখাবেন না।

বার বার করা টাস্কের জন্য ফলাফল ক্যাশে করুন

এতে প্রযোজ্য: সব API।

করণীয়: বারবার ইনপুট বা কোয়েরির জন্য স্থানীয় ফলাফল ক্যাশে (যেমন, sessionStorage বা IndexedDB ব্যবহার করে) প্রয়োগ করুন। ক্যাশে হিট বাড়াতে হোয়াইটস্পেস ট্রিম করে এবং ছোট হাতের অক্ষরে লিখে ইনপুট নরমালাইজ করুন। ভারী ইনপুটের জন্য, যেমন, ছবি, ক্যাশে কী হিসেবে ব্যবহার করার জন্য একটি হ্যাশ জেনারেট করুন। আপনার ক্যাশের জন্য একটি রক্ষণশীল টাইম টু লিভ (TTL) সেট করুন (অথবা ব্যাকগ্রাউন্ডে আপডেট করার সময় ক্যাশে করা ফলাফল পরিবেশন করুন)। ফলাফল সন্তোষজনক না হলে ব্যবহারকারীকে নতুন ইনফারেন্স ট্রিগার করতে দিন।

যা করবেন না: বারবার করা সার্চ কোয়েরি বা একই ডেটা ইনপুটের জন্য একই অনুমান আবার রান করবেন না যেখানে পরিবর্তনশীলতা কাম্য নয়, যেমন ব্যবহারকারী যখন সার্চ ফলাফলের মধ্যে আগে-পরে নেভিগেট করেন। এটি রেসপন্সিভনেস এবং লোকাল কম্পিউটের দক্ষ ব্যবহার অপ্টিমাইজ করে।

৬. ফলব্যাক স্ট্র্যাটেজি

ব্যবহার করার আগে, LanguageModel অবজেক্ট গ্লোবাল স্কোপে উপলভ্য কিনা তা চেক করুন:

if ('LanguageModel' in self) {
  // The Prompt API is supported.
} else {
  // Execute fallback strategy
}

Prompt API কাজ না করলে বা উপলভ্যতা চেক করার সময় 'উপলভ্য নেই' দেখালে, আপনাকে অবশ্যই সুন্দরভাবে ফলব্যাক করতে হবে:

  • রিমোট API ফলব্যাক: শনাক্তকরণের অনুরোধ কোনও সার্ভার এন্ডপয়েন্ট বা ক্লাউড API-তে (যেমন Vertex AI Gemini API) রিডাইরেক্ট করুন।
  • লোকাল API ফলব্যাক: শনাক্তকরণের অনুরোধটি একটি লোকাল এন্ডপয়েন্টে রিডাইরেক্ট করুন, উদাহরণস্বরূপ, Transformers.js ব্যবহার করে।