LLM অ্যাপ নিরাপদ করা: prompt injection ও ক্ষতি সীমিত রাখা
Language model নির্ভরযোগ্যভাবে নির্দেশ ও data আলাদা করতে পারে না। অ্যাপ এমনভাবে বানান যাতে প্রতারিত model আসল ক্ষতি করতে না পারে।

LLM ফিচার বানানো সহজ এবং ভুল করাও সহজ। মূল সমস্যা: model নির্দেশ ও data একই লেখার স্রোত হিসেবে পায়, এবং কোনটা কোনটা তা নির্ভরযোগ্যভাবে আলাদা করতে পারে না। যে-ই model-এর সামনে লেখা রাখতে পারে সে-ই তাকে চালনা করার চেষ্টা করতে পারে। এই লেখা নিজের অ্যাপ রক্ষা নিয়ে।
প্রধান ঝুঁকি
১. Prompt injection (সরাসরি)। ব্যবহারকারী "আগের নির্দেশ উপেক্ষা করো এবং ..."-এর মতো কিছু লিখে model-এর আচরণ বদলায়, নিয়ম এড়ায় বা লুকানো prompt প্রকাশ করায়।
২. Indirect prompt injection। Model যে কনটেন্ট পড়ে তাতে ক্ষতিকর নির্দেশ লুকানো থাকে: ওয়েব পেজ, email, নথি, support ticket বা কোড মন্তব্য। ব্যবহারকারী তা লেখেনি, কিন্তু model দেখে। যেসব সহকারী ব্রাউজ করে, email সারাংশ করে বা ফাইল পড়ে তাদের জন্য এটি বেশি গুরুতর ঝুঁকি।
৩. সংবেদনশীল data প্রকাশ। Model system prompt, অন্য ব্যবহারকারীর data বা context-এ রাখা secret প্রকাশ করে ফেলে। Retrieval সিস্টেম এমন নথি ফাঁস করতে পারে যা ব্যবহারকারীর দেখার কথা নয়।
৪. অতিরিক্ত ক্ষমতা (excessive agency)। Model অতি বেশি ক্ষমতার টুলের সাথে যুক্ত (email পাঠানো, query চালানো, কোড চালানো, কেনাকাটা), ফলে প্রতারিত model আসল ক্ষতি করতে পারে।
৫. অনিরাপদ আউটপুট সামলানো। অ্যাপ model-এর আউটপুট বিশ্বাস করে: HTML হিসেবে দেখায় (cross-site scripting), SQL query বা shell কমান্ডে বসায়, বা আনার জন্য URL হিসেবে ব্যবহার করে (server-side request forgery)।
৬. Supply chain ও model ঝুঁকি। অবিশ্বস্ত model, plugin, package, বা বিষাক্ত training ও retrieval data।
৭. খরচ ও প্রাপ্যতার অপব্যবহার। বিশাল ইনপুট, loop ও ভারী request যা বিল বাড়ায় বা সীমা শেষ করে।
এগুলো OWASP Top 10 for LLM Applications-এর বিভাগের সাথে মেলে, যা পড়ার মতো ভালো checklist।
নিখুঁত filter নেই
চালাক system prompt বা খারাপ বাক্যাংশের blocklist দিয়ে prompt injection পুরোপুরি সমাধান করা যায় না। আক্রমণকারী অন্যভাবে বলে, এনকোড করে, অনুবাদ করে বা লেখা লুকায়। এগুলোকে সহায়ক কিন্তু আংশিক প্রতিরক্ষা ধরুন, এবং এমনভাবে নকশা করুন যেন model মাঝে মাঝে প্রতারিত হবে।
স্তরভিত্তিক প্রতিরক্ষা
Model কী করতে পারে তা সীমিত করুন (সবচেয়ে গুরুত্বপূর্ণ)
- টুলকে least privilege দিন। যে support bot শুধু একজন গ্রাহকের order পড়ে তার পুরো database-এর access লাগে না।
- কাজ ডিফল্টে read-only রাখুন। যা কিছু বদলায় (refund, email, মোছা) তাতে মানুষের নিশ্চিতকরণ বা কড়া যাচাই লাগান।
- এক model session-এ অবিশ্বস্ত কনটেন্ট, ব্যক্তিগত data এবং data বাইরে পাঠানোর ক্ষমতা একসাথে রাখবেন না। তিনটির যেকোনো একটি সরালে অনেক আক্রমণ পথ ভাঙে।
- তৈরি কোড sandbox-এ চালান, কোনো secret ও সীমিত network access ছাড়া।
Model-এর আউটপুটকে অবিশ্বস্ত ইনপুট ধরুন
- HTML-এ দেখানোর আগে escape বা sanitise করুন। আউটপুট সরাসরি SQL, shell কমান্ড বা ফাইল path-এ বসাবেন না।
- কাঠামোবদ্ধ আউটপুট schema দিয়ে যাচাই করুন এবং ID, পরিমাণ ও URL সাধারণ অ্যাপ যুক্তিতে পরীক্ষা করুন।
- Model-বাছাই করা URL শুধু নিরাপদ, allow-list করা fetcher দিয়ে আনুন যা অভ্যন্তরীণ ঠিকানা আটকায়।
Data সুরক্ষা
- Model-এর বাইরে অনুমতি প্রয়োগ করুন। বর্তমান ব্যবহারকারীর অধিকার অনুযায়ী কোডে retrieval filter করুন। কে কী দেখবে তা model কখনো ঠিক করবে না।
- Prompt-এ secret, key বা অন্য ব্যবহারকারীর data রাখবেন না।
- ধরে নিন system prompt বের করা যাবে, তাই তাতে সংবেদনশীল কিছু রাখবেন না।
Injection-এর প্রভাব কমান
- অবিশ্বস্ত কনটেন্ট স্পষ্টভাবে চিহ্নিত ও আলাদা করুন এবং model-কে data হিসেবে দেখতে বলুন। এটি সাহায্য করে, তবে নিশ্চয়তা নয়।
- সম্ভব হলে উদ্ধার করা কনটেন্ট থেকে লুকানো লেখা, অদ্ভুত ফরম্যাটিং ও অদৃশ্য অক্ষর সরান বা নিষ্ক্রিয় করুন।
- URL-এ data ফাঁস করতে পারে এমন স্বয়ংক্রিয় ছবি বা লিংক লোডের মতো বাইরে যাওয়ার পথ বন্ধ করুন।
- অতিরিক্ত স্তর হিসেবে সন্দেহজনক ইনপুট বা আউটপুট চিহ্নিত করতে আলাদা classifier বা guard model ব্যবহার করুন।
নিরাপদে চালান
- ব্যবহারকারীর rate limit দিন এবং ইনপুটের আকার, আউটপুটের দৈর্ঘ্য, প্রতি request-এ টুল কল ও খরচের সীমা রাখুন।
- Prompt, টুল কল ও ফল log করুন (গোপনীয়তার যত্নসহ) এবং অদ্ভুত ধরনে alert দিন।
- Prompt কোডের মতো version ও পর্যালোচনা করুন।
- জানা injection চেষ্টার test set দিয়ে নিজের অ্যাপে red-team করুন, এবং prompt, model বা টুল বদলালে আবার চালান।
- যুক্ত করার আগে তৃতীয় পক্ষের model, টুল ও plugin যাচাই করুন।
দ্রুত নকশা যাচাই
যেকোনো LLM ফিচারের জন্য জিজ্ঞেস করুন:
১. কোন অবিশ্বস্ত লেখা model-এ পৌঁছাতে পারে? ২. সেই লেখার সবচেয়ে খারাপ নির্দেশ মানলে model কী করতে বা প্রকাশ করতে পারে? ৩. এর কোন ফল অগ্রহণযোগ্য, এবং কোন non-AI নিয়ন্ত্রণ তা ঠেকায়?
৩ নম্বরের উত্তর "শুধু prompt" হলে আসল নিয়ন্ত্রণ যোগ করুন।
দায়িত্বশীল পরীক্ষা
শুধু নিজের বা পরীক্ষার অনুমতি থাকা সিস্টেমে পরীক্ষা করুন। অন্যের পণ্যে injection সমস্যা পেলে তাদের disclosure বা bug bounty কর্মসূচিতে জানান।
মূল কথা: ধরে নিন prompt injection মাঝে মাঝে কাজ করবে। Model-কে ন্যূনতম অনুমতি দিন, access control কোডে প্রয়োগ করুন, আউটপুট যাচাই ও escape করুন, ঝুঁকিপূর্ণ কাজে মানুষকে রাখুন, এবং নিয়মিত প্রতিরক্ষা পরীক্ষা করুন।
AI ও LLM সিরিজ, পর্ব ১ (language model দিয়ে বানানো): 5 নম্বর (মোট 5)। আগের লেখা: RAG সহজ ভাষায়: নিজের নথি থেকে প্রশ্নের উত্তর.


