(উপরে ছবিটিতে ক্লিক করে এই পাঠের ভিডিওটি দেখুন)
আপনি যে অ্যাপলিকেশনটির জন্য একটি এআই এজেন্ট তৈরি করছেন তার জটিলতা বোঝা একটি নির্ভরযোগ্য এজেন্ট তৈরির জন্য গুরুত্বপূর্ণ। আমাদের এমন এআই এজেন্ট তৈরি করতে হবে যা প্রম্পট ইঞ্জিনিয়ারিংয়ের বাইরে জটিল চাহিদা মোকাবেলার জন্য তথ্য কার্যকরভাবে পরিচালনা করতে পারে।
এই পাঠে, আমরা দেখব কনটেক্সট ইঞ্জিনিয়ারিং কী এবং এআই এজেন্ট তৈরি করতে এতে কী ভূমিকা আছে।
এই পাঠে কভার করা হবে:
• কনটেক্সট ইঞ্জিনিয়ারিং কী এবং কেন এটি প্রম্পট ইঞ্জিনিয়ারিং থেকে আলাদা।
• কার্যকর কনটেক্সট ইঞ্জিনিয়ারিংয়ের কৌশলসমূহ, যার মধ্যে কিভাবে তথ্য লেখা, নির্বাচন, সঙ্কোচন এবং পৃথকীকরণ করা যায় তা অন্তর্ভুক্ত।
• সাধারণ কনটেক্সট ব্যর্থতা যা আপনার এআই এজেন্টকে বিপথগামী করতে পারে এবং সেগুলি কীভাবে ঠিক করা যায়।
এই পাঠ সম্পন্ন করার পর, আপনি জানতে পারবেন কিভাবে:
• কনটেক্সট ইঞ্জিনিয়ারিং সংজ্ঞায়িত করতে হয় এবং এটি প্রম্পট ইঞ্জিনিয়ারিং থেকে কীভাবে আলাদা তা ব্যাখ্যা করতে।
• বড় ভাষা মডেল (LLM) অ্যাপ্লিকেশনগুলিতে কনটেক্সটের মূল উপাদানগুলি চিহ্নিত করতে।
• কনটেক্সট লেখা, নির্বাচন, সঙ্কুচিতকরণ এবং পৃথকীকরণের কৌশল প্রয়োগ করে এজেন্টের কার্যকারিতা উন্নত করতে।
• সাধারণ কনটেক্সট ব্যর্থতা যেমন বিষাক্ততা (poisoning), বিভ্রান্তি (distraction), কনফিউশন, এবং সংঘাত (clash) চিনতে এবং এগুলোর মোকাবেলার কৌশল বাস্তবায়ন করতে।
এআই এজেন্টদের জন্য, কনটেক্সট হল যা এজেন্টকে নির্দিষ্ট ক্রিয়া নেওয়ার পরিকল্পনা চালায়। কনটেক্সট ইঞ্জিনিয়ারিং হল এই নিশ্চয়তা দেওয়ার অনুশীলন যে এজেন্টের কাছে টাস্কের পরবর্তী ধাপ সম্পন্ন করার জন্য সঠিক তথ্য আছে। কনটেক্সট উইন্ডো সাইজে সীমিত, তাই এজেন্ট নির্মাতারা হিসেবে আমাদেরকে কনটেক্সট উইন্ডোতে তথ্য যোগ, অপসারণ এবং সংকুচিত করার জন্য সিস্টেম এবং প্রক্রিয়া তৈরি করতে হবে।
প্রম্পট ইঞ্জিনিয়ারিং একটি একক স্থির নির্দেশাবলীর উপর কেন্দ্রীভূত যা নিয়মের একটি সেটের মাধ্যমে এআই এজেন্টকে কার্যকরভাবে নির্দেশনা দেয়। কনটেক্সট ইঞ্জিনিয়ারিং হল কিভাবে একটি গতিশীল তথ্য সেট, প্রাথমিক প্রম্পট সহ, পরিচালনা করতে হয় যাতে এজেন্টের কাছে সময়ের সঙ্গে যা কিছু প্রয়োজন তা থাকে। কনটেক্সট ইঞ্জিনিয়ারিংয়ের মূল ধারণা হল এই প্রক্রিয়াটিকে পুনরাবৃত্তিমূলক এবং নির্ভরশীল করে তোলা।
মনে রাখা গুরুত্বপূর্ণ যে কনটেক্সট কেবল এক জিনিস নয়। এআই এজেন্ট যে তথ্যগুলো প্রয়োজন তা বিভিন্ন উৎস থেকে আসতে পারে এবং আমাদের উপরই নির্ভর করে যে এজেন্টকে এইসব উৎসগুলোর অ্যাক্সেস নিশ্চিত করা হবে:
একটি এআই এজেন্ট যা কনটেক্সট পরিচালনা করতে পারে তার দরকার হতে পারে এমন কনটেক্সটের ধরনগুলো হল:
• নির্দেশাবলী: এগুলো হলো এজেন্টের “নিয়ম” – প্রম্পট, সিস্টেম মেসেজ, few-shot উদাহরণ (এআইকে কিভাবে কিছু করতে হয় তা দেখানো), এবং যে টুলগুলো এটি ব্যবহার করতে পারে সেগুলির বর্ণনা। এখানে প্রম্পট ইঞ্জিনিয়ারিংয়ের ফোকাস কনটেক্সট ইঞ্জিনিয়ারিংয়ের সাথে সংযুক্ত হয়।
• জ্ঞান: এটি তথ্য, ডাটাবেস থেকে প্রাপ্ত তথ্য, বা এজেন্ট সংগ্রহ করা দীর্ঘমেয়াদী স্মৃতি কভার করে। যদি একটি এজেন্টকে বিভিন্ন জ্ঞান স্টোর এবং ডাটাবেসে অ্যাক্সেসের প্রয়োজন হয়, তাহলে এতে একটি Retrieval Augmented Generation (RAG) সিস্টেম ইন্টিগ্রেশন অন্তর্ভুক্ত থাকতে পারে।
• টুলস: এগুলো হলো বহিরাগত ফাংশন, API এবং MCP সার্ভারের সংজ্ঞা যেগুলো এজেন্ট কল করতে পারে, এবং সেগুলো ব্যবহার করার পর যে ফিডব্যাক (ফলাফল) পায় তা।
• কথোপকথনের ইতিহাস: ব্যবহারকারীর সাথে চলমান ডায়ালগ। সময়ের সঙ্গে এগুলো লম্বা এবং জটিল হয়ে ওঠে, যার ফলে কনটেক্সট উইন্ডোতে এদের স্থান লাগে।
• ব্যবহারকারীর পছন্দসমূহ: সময়ের সাথে একজন ব্যবহারকারীর পছন্দ বা অপছন্দ সম্পর্কে শিখা তথ্য। এগুলো সংরক্ষণ করে গুরুত্বপূর্ণ সিদ্ধান্ত নেওয়ার সময় ব্যবহার করা যেতে পারে ব্যবহারকারীকে সাহায্য করার জন্য।
ভালো কনটেক্সট ইঞ্জিনিয়ারিং শুরু হয় ভালো পরিকল্পনা থেকে। এখানে একটি পদ্ধতি যা আপনাকে কনটেক্সট ইঞ্জিনিয়ারিং ধারণা প্রয়োগ করার বিষয়ে চিন্তা শুরু করতে সাহায্য করবে:
পরিকল্পনা গুরুত্বপূর্ণ, তবে একবার তথ্য আমাদের এজেন্টের কনটেক্সট উইন্ডোতে প্রবাহিত হতে শুরু করলে, আমাদের এটি পরিচালনা করার জন্য ব্যবহারিক কৌশল থাকা প্রয়োজন:
কিছু তথ্য স্বয়ংক্রিয়ভাবে কনটেক্সট উইন্ডোতে যোগ করা হবে, তবু কনটেক্সট ইঞ্জিনিয়ারিং হল এই তথ্যের উপর আরো সক্রিয় ভূমিকা নেওয়া, যা কয়েকটি কৌশলে করা যায়:
Agent Scratchpad এটি একটি এআই এজেন্টকে একটি একক সেশনের সময়কার বর্তমান টাস্ক এবং ব্যবহারকারীর ইন্টারঅ্যাকশনের সম্পর্কিত প্রাসঙ্গিক তথ্য নোট নিতে দেয়। এটি কনটেক্সট উইন্ডোর বাইরে একটি ফাইল বা রানটাইম অবজেক্টে থাকা উচিত যা এজেন্ট পরে এই সেশনের সময় প্রয়োজনে পুনরুদ্ধার করতে পারে।
Memories Scratchpad একক সেশনের কনটেক্সট উইন্ডোর বাইরে তথ্য পরিচালনার জন্য ভাল। মেমোরি এজেন্টকে একাধিক সেশনের জুড়ে প্রাসঙ্গিক তথ্য সংরক্ষণ এবং পুনরুদ্ধার করতে সক্ষম করে। এতে সারাংশ, ব্যবহারকারীর পছন্দ এবং ভবিষ্যতে উন্নতির জন্য ফিডব্যাক অন্তর্ভুক্ত থাকতে পারে।
কনটেক্সট সঙ্কুচিতকরণ একবার কনটেক্সট উইন্ডো বাড়তে শুরু করলে এবং সীমার কাছে পৌঁছালে, সারসংক্ষেপ এবং ছাঁটাইয়ের মতো কৌশলগুলি ব্যবহার করা যেতে পারে। এতে সবচেয়ে প্রাসঙ্গিক তথ্যই রাখা বা পুরনো মেসেজগুলি মুছে ফেলা অন্তর্ভুক্ত থাকতে পারে।
মাল্টি-এজেন্ট সিস্টেম মাল্টি-এজেন্ট সিস্টেম তৈরি করা কনটেক্সট ইঞ্জিনিয়ারিংয়ের একটি রূপ কারণ প্রতিটি এজেন্টের নিজস্ব কনটেক্সট উইন্ডো থাকে। কিভাবে সেই কনটেক্সট ভাগ করা এবং বিভিন্ন এজেন্টকে প্রেরণ করা হবে তা এই সিস্টেমগুলো তৈরির সময় পরিকল্পনা করার আরেকটি বিষয়।
স্যান্ডবক্স পরিবেশ যদি একটি এজেন্টকে কিছু কোড চালাতে বা একটি ডকুমেন্টে বড় পরিমাণ তথ্য প্রক্রিয়াকরণ করতে হয়, তাহলে ফলাফল প্রক্রিয়াকরণ করতে অনেক টোকেন লাগতে পারে। সবকিছু কনটেক্সট উইন্ডোতে সংরক্ষণ করার পরিবর্তে, এজেন্ট একটি স্যান্ডবক্স পরিবেশ ব্যবহার করতে পারে যা এই কোড চালাতে সক্ষম এবং কেবল ফলাফল এবং অন্যান্য প্রাসঙ্গিক তথ্য পড়ে নেয়।
রানটাইম স্টেট অবজেক্টস এটি তথ্যের কন্টেইনার তৈরি করে করা হয় যাতে পরিচালনা করা যায় যখন এজেন্টকে নির্দিষ্ট তথ্যের অ্যাক্সেস থাকতে হবে। একটি জটিল টাস্কের জন্য, এটি একটি এজেন্টকে প্রতিটি সাবটাস্কের ফলাফল ধাপে ধাপে সংরক্ষণ করার সক্ষমতা দেবে, যাতে কনটেক্সট শুধুমাত্র সেই নির্দিষ্ট সাবটাস্কের সাথে সংযুক্ত থাকে।
ধরা যাক আমরা একটি এআই এজেন্টকে চাই “প্যারিসে আমাকে একটি ভ্রমণ বুক করুন।”
• একটি সাধারণ এজেন্ট যা কেবল প্রম্পট ইঞ্জিনিয়ারিং ব্যবহার করে, হয়তো কেবল প্রতিক্রিয়া দেবে: “ঠিক আছে, আপনি কখন প্যারিসে যেতে চান?”. এটি কেবল ব্যবহারকারীর সরাসরি প্রশ্ন সেই মুহূর্তে প্রক্রিয়া করেছিল।
• একটি এজেন্ট যা উল্লেখিত কনটেক্সট ইঞ্জিনিয়ারিং কৌশলগুলি ব্যবহার করে তা অনেক বেশি করবে। প্রতিক্রিয়া দেওয়ার আগেও, এর সিস্টেমটি হয়তো:
◦ আপনার ক্যালেন্ডার চেক করবে উপলব্ধ তারিখের জন্য (রিয়েল-টাইম ডেটা পুনরুদ্ধার করে)।
◦ গামীকালের ভ্রমণ পছন্দগুলো স্মরণ করবে (দীর্ঘমেয়াদী স্মৃতি থেকে) যেমন আপনার প্রিয় এয়ারলাইন, бюджет, বা আপনি কি সরাসরি ফ্লাইট পছন্দ করেন কিনা।
◦ ফ্লাইট ও হোটেল বুকিংয়ের জন্য প্রাপ্য টুলগুলো শনাক্ত করবে।
এটা কী: যখন একটি হলুসিনেশন (LLM দ্বারা তৈরি ভেজাল তথ্য) বা একটি ত্রুটি কনটেক্সটে প্রবেশ করে এবং বারবার উল্লেখ করা হয়, ফলে এজেন্ট অসম্ভব লক্ষ্য অনুসরণ করতে পারে বা অযৌক্তিক কৌশল গ্রহণ করে।
কী করতে হবে: কনটেক্সট যাচাই এবং কোয়ারেন্টাইন প্রয়োগ করুন। দীর্ঘমেয়াদী মেমোরিতে যোগ করার আগে তথ্য যাচাই করুন। যদি সম্ভাব্য পয়জনিং সনাক্ত হয়, তাহলে খারাপ তথ্য ছড়িয়ে পড়া রোধ করতে নতুন কনটেক্সট থ্রেড দিয়ে শুরু করুন।
ভ্রমণ বুকিং উদাহরণ: আপনার এজেন্ট একটি ক্ষুদ্রীয় স্থানীয় বিমানবন্দর থেকে একটি দূরবর্তী আন্তর্জাতিক শহরে সরাসরি ফ্লাইট হ্যালুসিনেট করে যা বাস্তবে আন্তর্জাতিক ফ্লাইট অফার করে না। এই অ-মৌজুদ ফ্লাইটের বিশদ কনটেক্সটে সংরক্ষিত হয়ে যায়। পরে, যখন আপনি এজেন্টকে বুক করতে বলবেন, এটি এই অসম্ভব রুটের জন্য টিকিট খুঁজতে থাকে, ফলে বারবার ত্রুটি ঘটে।
সমাধান: একটি ধাপ বাস্তবায়ন করুন যা বিমান অস্তিত্ব এবং রুটগুলি বাস্তব-সময়ের API দিয়ে যাচাই করে এড করার আগে এজেন্টের ওয়ার্কিং কনটেক্সটে ফ্লাইটের বিশদ যুক্ত করে। যদি যাচাই ব্যর্থ হয়, তাহলে ত্রুটিপূর্ণ তথ্যটি “কোয়ারেন্টাইন করা” হবে এবং ভবিষ্যতে ব্যবহার করা হবে না।
এটা কী: যখন কনটেক্সট এতটুকু বড় হয়ে যায় যে মডেল সংগ্রহ করা ইতিহাসের উপর অতিরিক্তভাবে ফোকাস করতে শুরু করে, প্রশিক্ষণের সময় যা শিখেছে তা ব্যবহার না করে, ফলে পুনরাবৃত্তিমূলক বা অপ্রয়োজনীয় ক্রিয়া ঘটে। মডেলগুলি এমনকি কনটেক্সট উইন্ডো পূর্ণ হওয়ার আগেই ভুল করা শুরু করতে পারে।
কী করতে হবে: কনটেক্সট সারসংক্ষেপ ব্যবহার করুন। সময়ে সময়ে সংগৃহীত তথ্যগুলিকে ছোট সারাংশে সংকুচিত করুন, গুরুত্বপূর্ণ বিবরণগুলি রেখে পুনরাবৃত্তি করা ইতিহাস অপসারণ করুন। এটি ফোকাস “রিসেট” করতে সাহায্য করে।
ভ্রমণ বুকিং উদাহরণ: আপনি দীর্ঘ সময় ধরে বিভিন্ন স্বপ্নের ভ্রমণের গন্তব্য নিয়ে আলোচনা করেছেন, সহ দুই বছর আগে আপনার ব্যাকপ্যাকিং ট্রিপের একটি বিশদ বিবরণ। যখন আপনি অবশেষে “আমার জন্য একটি সস্তা ফ্লাইট খুঁজে আগামী মাসে,” বলতে বলেন, এজেন্টটি পুরোনো, অসংগত বিবরণে আটকে পড়ে এবং আপনার ব্যাকপ্যাকিং গিয়ার বা অতীত ভ্রমণসূচি সম্পর্কে বারবার জিজ্ঞাসা করে, আপনার বর্তমান অনুরোধ উপেক্ষা করে।
সমাধান: নির্দিষ্ট সংখ্যক টার্ন বা কনটেক্সট বড় হয়ে গেলে, এজেন্টকে আলাপচারিতার সাম্প্রতিক এবং প্রাসঙ্গিক অংশগুলির সারসংক্ষেপ করা উচিত – আপনার বর্তমান ভ্রমণের তারিখ এবং গন্তব্যের উপর ফোকাস করে – এবং পরবর্তী LLM কলের জন্য সেই সঙ্কুচিত সারাংশ ব্যবহার করা উচিত, কম প্রাসঙ্গিক ঐতিহাসিক চ্যাট পরিত্যাগ করে।
এটা কী: যখন অপ্রয়োজনীয় কনটেক্সট, প্রায়শই খুব বেশি উপলব্ধ টুলসের আকারে, মডেলকে খারাপ প্রতিক্রিয়া তৈরি করতে বা অপ্রাসঙ্গিক টুল কল করতে বাধ্য করে। ছোট মডেলগুলো বিশেষ করে এটার কাছে প্রবণ।
কী করতে হবে: RAG কৌশল ব্যবহার করে টুল লোডআউট ম্যানেজমেন্ট প্রয়োগ করুন। টুল বর্ণনাগুলোকে একটি ভেক্টর ডাটাবেসে সংরক্ষণ করুন এবং প্রতিটি নির্দিষ্ট টাস্কের জন্য কেবল সবচেয়ে প্রাসঙ্গিক টুলগুলো নির্বাচন করুন। গবেষণা দেখায় টুল নির্বাচনের সংখ্যা 30 এর কম রাখা উচিত।
ভ্রমণ বুকিং উদাহরণ: আপনার এজেন্টের ডজনো টুলসের অ্যাক্সেস আছে: book_flight, book_hotel, rent_car, find_tours, currency_converter, weather_forecast, restaurant_reservations, ইত্যাদি। আপনি জিজ্ঞাসা করলে, “প্যারিসে ঘোরার জন্য সবচেয়ে ভাল উপায় কী?” টুলগুলোর বিশাল সংখ্যার কারণে, এজেন্টটি বিভ্রান্ত হয়ে book_flight কল করার চেষ্টা করে প্যারিসের মধ্যে বা rent_car কল করে যদিও আপনি পাবলিক ট্রান্সপোর্ট পছন্দ করেন, কারণ টুল বর্ণনাগুলো ওভারল্যাপ করতে পারে বা এটি সেরা টুলটি সনাক্ত করতে পারেনা।
সমাধান: টুল বর্ণনাগুলোর উপর RAG ব্যবহার করুন। যখন আপনি প্যারিসে ঘোরার উপায় সম্পর্কে জিজ্ঞাসা করবেন, সিস্টেমটি গতিশীলভাবে কেবল সবচেয়ে প্রাসঙ্গিক টুলগুলো যেমন rent_car বা public_transport_info আপনার ক্যোয়ারির ভিত্তিতে পুনরুদ্ধার করবে, LLM-কে একটি ফোকাস করা “লোডআউট” উপস্থাপন করবে।
এটা কী: যখন কনটেক্সটে বিরোধপূর্ণ তথ্য উপস্থিত থাকে, ফলে অনিয়মিত যুক্তি বা খারাপ চূড়ান্ত প্রতিক্রিয়া হয়। এটি প্রায়শই ঘটে যখন তথ্য ধাপে ধাপে আসে, এবং প্রথম পর্যায়ের ভুল অনুমান কনটেক্সটে থেকেই যায়।
কী করতে হবে: কনটেক্সট ছাঁটাই এবং অফলোডিং ব্যবহার করুন। ছাঁটাই মানে পুরনো বা বিরোধপূর্ণ তথ্য নতুন বিবরণ আসার সঙ্গে সঙ্গে সরিয়ে ফেলা। অফলোডিং মডেলকে একটি আলাদা “স্ক্র্যাচপ্যাড” ওয়ার্কস্পেস দেয় যাতে মূল কনটেক্সটকে ভরাট না করে তথ্য প্রক্রিয়া করা যায়।
ভ্রমণ বুকিং উদাহরণ: আপনি প্রথমে আপনার এজেন্টকে বলেন, “আমি ইকোনমি ক্লাসে ভ্রমণ করতে চাই।” পরে আলাপের মধ্যে আপনি মানসিকভাবে বদলিয়ে বলেন, “আসলে, এই ট্রিপে আমরা বিজনেস ক্লাস নেব।” যদি উভয় নির্দেশ কনটেক্সটে থাকে, এজেন্ট বিভ্রান্ত হতে পারে কোন পছন্দকে অগ্রাধিকার দিতে হবে।
সমাধান: কনটেক্সট ছাঁটাই প্রয়োগ করুন। যখন একটি নতুন নির্দেশ পুরনো নির্দেশের সাথে বিরোধ করে, পুরনো নির্দেশটি সরিয়ে ফেলা বা স্পষ্টভাবে ওভাররাইড করা উচিত কনটেক্সটে। বিকল্পভাবে, এজেন্ট একটি স্ক্র্যাচপ্যাড ব্যবহার করে বিরোধপূর্ণ পছন্দগুলো মিলিয়ে সিদ্ধান্ত নিতে পারে, নিশ্চিত করে যে কেবল চূড়ান্ত, সামঞ্জস্যপূর্ণ নির্দেশই এর কাজকে পরিচালিত করে।
Join the Microsoft Foundry Discord to meet with other learners, attend office hours and get your AI Agents questions answered.
অস্বীকৃতি: এই নথিটি AI অনুবাদ সেবা Co-op Translator (https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত করা হয়েছে। আমরা সঠিকতার চেষ্টা করি, তবুও অনুগ্রহ করে মনে রাখুন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্থানীয় ভাষায়ই প্রামাণিক উৎস হিসেবে গণ্য করা উচিত। গুরুত্বপূর্ণ তথ্যের ক্ষেত্রে পেশাদার মানব অনুবাদ করা উচিৎ। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা বুরুশ্চিত ব্যাখ্যার জন্য আমরা দায়ী নই।