মূল লেখায় যান
পার্ট ৬ ২ মিনিট পড়া

টুল ইউজ আর ইন্টিগ্রেশন

LLM শুধু কথা বলে না, কাজও করতে পারে। শিখবেন: টুল ডিজাইন করা, একসাথে কয়েকটা টুল কল করা, MCP দিয়ে সংযোগ, স্যান্ডবক্সে নিরাপদে কোড চালানো, API র‍্যাপার, আর টুলের ফলাফল এমনভাবে সাজানো, যাতে মডেল সহজে ব্যবহার করতে পারে।

কুইজে যান
এই পাতায়

টুল ইউজ আর ইন্টিগ্রেশন (MCP সহ)

টুল না দেওয়া পর্যন্ত LLM শুধু একটা টেক্সট জেনারেটর। টুল মানে এমন একটা উপায়, যাতে সে আপনার API কল করতে, কোড চালাতে, ডেটাবেসে কুয়েরি করতে বা ফাইল পড়তে পারে। চ্যাটবটের ডেমো আর প্রোডাকশন সিস্টেমের মধ্যে তফাত গড়ে দেয় টুল ডিজাইন। সবচেয়ে বড় প্রভাব ফেলার সিদ্ধান্ত হলো আপনার টুল ডেসক্রিপশনের মান।

অনুশীলন · ৪টি টাস্ক

যেকোনো ফ্রি AI চ্যাট খুলুন: ChatGPT · Claude · Gemini

অনুশীলন কীভাবে করবেন
  • নতুন চ্যাট মানে একদম নতুন কথোপকথন, আগের কোনো হিস্ট্রি নেই। ChatGPT, Claude বা Gemini-তে New chat-এ ক্লিক করুন। সাধারণত এটা উপরে বাঁ দিকে থাকে।
  • একই চ্যাট মানে: যে চ্যাট খোলা আছে, সেখানেই লিখতে থাকুন। আগে যা পাঠিয়েছেন, AI তা মনে রাখে।
  • প্রম্পট ব্যবহার করতে: কপি-তে ক্লিক করুন, চ্যাটের মেসেজ বক্সে ক্লিক করুন, পেস্ট করুন (Ctrl+V, বা ফোনে চেপে ধরে রাখুন), তারপর Enter চাপুন।
  • AI-এর উত্তর প্রতিবার একটু আলাদা হয়। আপনার উত্তর উদাহরণের সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখুন।
  • শুধু বানানো ডেটা ব্যবহার করুন। নিজের বা অন্যের ব্যক্তিগত তথ্য চ্যাটে পেস্ট করবেন না।

টাস্ক ১

চ্যাটে নিজেই টুল হয়ে দেখুন

এটা কেন দরকার

আপনি যখন অর্ডার দেখার একটা সাপোর্ট চ্যাটবট বানাবেন, মডেল আপনার ডেটাবেস দেখতে পারে না। আপনার কোডকে টুল চালিয়ে রেজাল্ট মডেলকে ফেরত দিতে হবে। তাই মডেল কী পাঠায় আর কী ফেরত চায়, সেটা জানা দরকার।

  1. ধাপ ১
    নতুন চ্যাট

    এই প্রম্পটটা কপি করুন, চ্যাটে পেস্ট করে Enter চাপুন। উত্তরটা পড়ুন। (JSON আর টুলের নাম ইংরেজিতে আছে, তাই এই অংশ ইংরেজিতেই রাখা হয়েছে।)

    প্রম্পট
    তুমি একটা online shop-এর support assistant। তুমি শুধু ১টা tool ব্যবহার করতে পারো।
    
    Tool:
    {"name": "get_order_status", "description": "Look up the status of one customer order. Use when the user asks where their order is. Returns status, carrier, and expected delivery date, or an error field if the order is not found.", "input_schema": {"type": "object", "properties": {"order_id": {"type": "string", "description": "Order ID such as ORD-4821"}}, "required": ["order_id"]}}
    
    নিয়ম:
    ১. tool লাগলে শুধু একটা JSON object দিয়ে উত্তর দাও, এই রকম: {"tool": "name", "input": {...}}। আর কোনো লেখা লিখবে না।
    ২. আমি tool-এর result পাঠানোর পর customer-কে বাংলায় দুটো ছোট বাক্যে উত্তর দাও।
    
    Customer-এর message: "হাই, আমার অর্ডার ORD-4821 এখনো আসেনি। এটা কোথায়?"

    আপনি দেখবেন: শুধু একটা ছোট JSON অবজেক্ট, তাতে টুলের নাম get_order_status আর অর্ডার ID ORD-4821 আছে। অন্য কোনো লেখা নেই।

    উদাহরণ উত্তর
    {"tool": "get_order_status", "input": {"order_id": "ORD-4821"}}

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই চ্যাট

    এবার আপনিই টুল। এই বানানো টুল রেজাল্টটা কপি করুন, পেস্ট করে Enter চাপুন।

    প্রম্পট
    TOOL RESULT for get_order_status:
    
    | field | value |
    |---|---|
    | status | delayed |
    | carrier | SwiftCourier |
    | expected_delivery | 2026-03-14 |
    | delay_reason | warehouse backlog |
    
    এবার customer-কে বাংলায় উত্তর দাও।

    আপনি দেখবেন: কাস্টমারের জন্য দুটো ছোট বাক্য। আপনার টেবিল থেকে ক্যারিয়ার, নতুন তারিখ আর কারণ ব্যবহার করা হয়েছে।

    উদাহরণ উত্তর
    দুঃখিত, গুদামে কাজের চাপের কারণে আপনার অর্ডার ORD-4821 দেরি হচ্ছে। SwiftCourier এখন ২০২৬-০৩-১৪ তারিখে এটা পৌঁছে দেওয়ার কথা বলছে।

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    নতুন চ্যাট

    আবার শুরু করুন। ধাপ ১-এর প্রম্পটটাই আবার কপি করুন, পেস্ট করে Enter চাপুন।

    প্রম্পট
    তুমি একটা online shop-এর support assistant। তুমি শুধু ১টা tool ব্যবহার করতে পারো।
    
    Tool:
    {"name": "get_order_status", "description": "Look up the status of one customer order. Use when the user asks where their order is. Returns status, carrier, and expected delivery date, or an error field if the order is not found.", "input_schema": {"type": "object", "properties": {"order_id": {"type": "string", "description": "Order ID such as ORD-4821"}}, "required": ["order_id"]}}
    
    নিয়ম:
    ১. tool লাগলে শুধু একটা JSON object দিয়ে উত্তর দাও, এই রকম: {"tool": "name", "input": {...}}। আর কোনো লেখা লিখবে না।
    ২. আমি tool-এর result পাঠানোর পর customer-কে বাংলায় দুটো ছোট বাক্যে উত্তর দাও।
    
    Customer-এর message: "হাই, আমার অর্ডার ORD-4821 এখনো আসেনি। এটা কোথায়?"

    আপনি দেখবেন: ধাপ ১-এর মতোই একটা JSON টুল রিকোয়েস্ট।

    উদাহরণ উত্তর
    {"tool": "get_order_status", "input": {"order_id": "ORD-4821"}}

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  4. ধাপ ৪
    একই চ্যাট

    এবার টুল ফেইল করেছে। এই এরর রেজাল্টটা কপি করুন, পেস্ট করে Enter চাপুন। দেখুন, উত্তরে বানানো কোনো তারিখ আছে কি না।

    প্রম্পট
    TOOL RESULT for get_order_status:
    
    {"error": "order_not_found", "retryable": false}
    
    এবার customer-কে বাংলায় উত্তর দাও।

    আপনি দেখবেন: ভালো উত্তরে বলা হবে অর্ডার পাওয়া যায়নি, আর সাহায্য করার কথা থাকবে। সে কোনো ডেলিভারি তারিখ বানাবে না। কিছু মডেল তবুও আন্দাজ করতে পারে, তাই মন দিয়ে পড়ুন।

    উদাহরণ উত্তর
    দুঃখিত, ORD-4821 ID-র কোনো অর্ডার আমি খুঁজে পাইনি। ID টা আবার দেখে নিন, অথবা আমি আপনাকে আমাদের support team-এর সাথে যুক্ত করে দিতে পারি।

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

এইমাত্র কী হলো

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

কাজ শেষ, যখন আপনার কাছে দুটো ফাইনাল উত্তর আছে: একটায় আপনার টেবিলের ক্যারিয়ার আর তারিখ আছে, আরেকটায় বলা আছে অর্ডার পাওয়া যায়নি।

নিজেকে যাচাই করুনএই টাস্কে কে টুল চালিয়েছে? মডেল রেজাল্ট দিয়ে কী করেছে?উত্তর দেখুন

আপনি টুল চালিয়েছেন, কারণ মডেল শুধু লেখা লেখে। রেজাল্টটা প্রম্পটের অংশ হয়েছে, আর মডেল সেটা পড়ে উত্তর লিখেছে। তাই টুলকে পরিষ্কার শেপে রেজাল্ট দিতে হয়, আর ফেইল করলে একটা এরর ফিল্ড দিতে হয়।

আরেকটু কঠিন করে দেখুন

ধাপ ২-এর টেবিলে ১৫টা বাড়তি বানানো সারি যোগ করুন। উত্তর কি এখনো ভালো? তারপর টেবিল আবার ৪ সারিতে ছোট করুন। কোনটা মডেলের পড়তে সহজ?

টাস্ক ২

অস্পষ্ট আর পরিষ্কার টুল ডেসক্রিপশন মিলিয়ে দেখুন

এটা কেন দরকার

আপনি যখন একটা AI এজেন্টকে কয়েকটা টুল দেবেন, সে প্রতিটা টুলের নাম আর ডেসক্রিপশন পড়ে একটা বাছে। লেখা অস্পষ্ট হলে সে ভুল টুল বাছে বা আটকে যায়, আর আপনার বট ভুল উত্তর দেয়।

  1. ধাপ ১
    নতুন চ্যাট

    এই প্রম্পটটা কপি করুন। এতে দুটো টুল আছে, দুটোর ডেসক্রিপশন অস্পষ্ট। পেস্ট করে Enter চাপুন, আর মডেল কী করে লিখে রাখুন। (টুলের নাম আর JSON ইংরেজিতে থাকে, তাই এই অংশ ইংরেজিতেই রাখা হয়েছে।)

    প্রম্পট
    তুমি এই tool-গুলো ব্যবহার করতে পারো:
    [
      {"name": "search", "description": "Searches.", "input_schema": {"type": "object", "properties": {"q": {"type": "string"}}}},
      {"name": "find", "description": "Finds things.", "input_schema": {"type": "object", "properties": {"q": {"type": "string"}}}}
    ]
    
    নিয়ম: কোনো tool কাজে লাগলে শুধু একটা JSON object দিয়ে উত্তর দাও, এই রকম: {"tool": "name", "input": {...}}। কোন tool ঠিক, সে ব্যাপারে নিশ্চিত না হলে এক বাক্যে বলো কেন নিশ্চিত নও। প্রশ্নের উত্তর নিজে দেবে না।
    
    User-এর প্রশ্ন: "Farhana Akter কার কাছে report করে?"

    আপনি দেখবেন: প্রায়ই এক বাক্যে বলবে সে নিশ্চিত না কোন টুল ঠিক। কিছু মডেল আন্দাজে search বা find বাছে।

    উদাহরণ উত্তর
    কোন tool ঠিক, আমি নিশ্চিত না। কারণ দুটো tool-এর description শুধু "Searches" আর "Finds things", কোনটাতেই লেখা নেই যে মানুষের তথ্য খোঁজা যায়।

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন চ্যাট

    নতুন চ্যাট খুলুন। এই প্রম্পটটা কপি করুন। প্রশ্ন একই, কিন্তু টুল দুটোর ডেসক্রিপশন পরিষ্কার। পেস্ট করে Enter চাপুন, আর ধাপ ১-এর সাথে মেলান।

    প্রম্পট
    তুমি এই tool-গুলো ব্যবহার করতে পারো:
    [
      {"name": "search_documents", "description": "Search the company wiki for policy pages and project documents. Use when the user asks about internal policy or past projects. Does NOT return data about people. Returns the top 5 text chunks with source URLs.", "input_schema": {"type": "object", "properties": {"query": {"type": "string", "description": "Natural-language query, 3 to 8 words."}}, "required": ["query"]}},
      {"name": "get_employee", "description": "Look up one employee by full name. Use when the user asks who someone is, who their manager is, or which team they are in. Returns name, job title, manager, and team.", "input_schema": {"type": "object", "properties": {"full_name": {"type": "string", "description": "Full name, for example Farhana Akter."}}, "required": ["full_name"]}}
    ]
    
    নিয়ম: কোনো tool কাজে লাগলে শুধু একটা JSON object দিয়ে উত্তর দাও, এই রকম: {"tool": "name", "input": {...}}। কোন tool ঠিক, সে ব্যাপারে নিশ্চিত না হলে এক বাক্যে বলো কেন নিশ্চিত নও। প্রশ্নের উত্তর নিজে দেবে না।
    
    User-এর প্রশ্ন: "Farhana Akter কার কাছে report করে?"

    আপনি দেখবেন: বেশিরভাগ মডেল get_employee-এর জন্য একটা JSON রিকোয়েস্ট পাঠায়, ফুল নাম Farhana Akter দিয়ে।

    উদাহরণ উত্তর
    {"tool": "get_employee", "input": {"full_name": "Farhana Akter"}}

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

এইমাত্র কী হলো

দুটো প্রম্পটে প্রশ্ন একই ছিল। শুধু টুলের লেখা বদলেছে। মডেল বাছার আগে প্রতিটা টুলের নাম আর ডেসক্রিপশন পড়ে, তাই এই লেখা ছোট একটা ম্যানুয়ালের মতো কাজ করে। ভালো লেখায় থাকে ভার্ব আর নাউন দিয়ে বানানো নাম (get_employee), টুল কী করে আর কখন ব্যবহার করতে হবে সেই বাক্য, আর উদাহরণসহ ইনপুটের বর্ণনা।

কাজ শেষ, যখন আপনার কাছে দুটো উত্তর আছে: একটায় মডেল নিশ্চিত না বা আন্দাজ করছে, আরেকটায় পরিষ্কার get_employee রিকোয়েস্ট।

নিজেকে যাচাই করুনটুলের লেখার কোন তিনটা অংশ দ্বিতীয় প্রম্পটকে মডেলের জন্য সহজ করেছে?উত্তর দেখুন

ভার্ব আর নাউন দিয়ে নাম, যেমন get_employee। টুল কী করে আর কখন ব্যবহার করতে হবে, সেই ডেসক্রিপশন। আর উদাহরণসহ ইনপুট ফিল্ডের বর্ণনা। মডেল সিদ্ধান্ত নেওয়ার আগে এই সবকিছু পড়ে।

আরেকটু কঠিন করে দেখুন

দ্বিতীয় প্রম্পটে দুটো ডেসক্রিপশনই বদলে শুধু "Looks things up." করে দিন। নাম পরিষ্কার রাখুন। মডেল কি এখনো ঠিক বাছে? নাম বেশি জরুরি, না ডেসক্রিপশন?

টাস্ক ৩

কোন টুল কল একসাথে চলতে পারে, চিনে নিন

এটা কেন দরকার

একটা এজেন্টের যখন কয়েকটা তথ্য লাগে, একটা একটা করে টুলের জন্য অপেক্ষা করলে ইউজারকে অনেক সময় বসে থাকতে হয়। ট্রাভেল বা সাপোর্ট বটে যে কলগুলো একে অপরের উপর নির্ভর করে না, সেগুলো একসাথে চালালে উত্তর অনেক দ্রুত আসে।

  1. ধাপ ১
    নতুন চ্যাট

    এই প্রম্পটটা কপি করুন, পেস্ট করে Enter চাপুন। তালিকায় কয়টা টুল কল আছে, গুনে দেখুন। (টুলের নাম আর JSON ইংরেজিতে, তাই এখানে ইংরেজিতেই রাখা হয়েছে।)

    প্রম্পট
    তুমি এই tool-গুলো ব্যবহার করতে পারো:
    1. get_weather(city): এক শহরের এখনকার আবহাওয়া দেয়।
    2. get_exchange_rate(from, to): দুটো currency code-এর (যেমন USD আর BDT) exchange rate দেয়।
    3. get_user_city(user_id): একজন user-এর নিজের শহর দেয়।
    
    নিয়ম: শুধু tool call-এর একটা JSON list দিয়ে উত্তর দাও, এই রকম: [{"tool": "name", "input": {...}}]। যে call-গুলো তুমি এখনই করতে পারো, সবগুলো list-এ দাও। কোনো call অন্য call-এর result ছাড়া করা যায় না হলে সেটা বাদ দাও। আর কোনো লেখা লিখবে না।
    
    User-এর প্রশ্ন: "Tokyo-তে আবহাওয়া কেমন, আর 1 USD কত BDT?"

    আপনি দেখবেন: একটা তালিকায় ২টা কল: টোকিওর আবহাওয়ার কল, আর USD থেকে BDT এক্সচেঞ্জ রেটের কল।

    উদাহরণ উত্তর
    [{"tool": "get_weather", "input": {"city": "Tokyo"}}, {"tool": "get_exchange_rate", "input": {"from": "USD", "to": "BDT"}}]

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন চ্যাট

    নতুন চ্যাট খুলুন। এই প্রম্পটটা কপি করুন, পেস্ট করে Enter চাপুন। কল গুনে দেখুন। ভাবুন, তালিকা এত ছোট কেন।

    প্রম্পট
    তুমি এই tool-গুলো ব্যবহার করতে পারো:
    1. get_weather(city): এক শহরের এখনকার আবহাওয়া দেয়।
    2. get_exchange_rate(from, to): দুটো currency code-এর (যেমন USD আর BDT) exchange rate দেয়।
    3. get_user_city(user_id): একজন user-এর নিজের শহর দেয়।
    
    নিয়ম: শুধু tool call-এর একটা JSON list দিয়ে উত্তর দাও, এই রকম: [{"tool": "name", "input": {...}}]। যে call-গুলো তুমি এখনই করতে পারো, সবগুলো list-এ দাও। কোনো call অন্য call-এর result ছাড়া করা যায় না হলে সেটা বাদ দাও। আর কোনো লেখা লিখবে না।
    
    User-এর প্রশ্ন: "User U-77 যে শহরে থাকে, সেখানকার আবহাওয়া কেমন?"

    আপনি দেখবেন: মাত্র ১টা কল: U-77-এর জন্য get_user_city। আবহাওয়ার কলের আগে শহরের নাম লাগে।

    উদাহরণ উত্তর
    [{"tool": "get_user_city", "input": {"user_id": "U-77"}}]

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    নতুন চ্যাট

    নতুন চ্যাট খুলুন। এই প্রম্পটটা কপি করুন, পেস্ট করে Enter চাপুন। লিখে রাখুন, তালিকায় কোন কল আছে আর কোনটা নেই।

    প্রম্পট
    তুমি এই tool-গুলো ব্যবহার করতে পারো:
    1. get_weather(city): এক শহরের এখনকার আবহাওয়া দেয়।
    2. get_exchange_rate(from, to): দুটো currency code-এর (যেমন USD আর BDT) exchange rate দেয়।
    3. get_user_city(user_id): একজন user-এর নিজের শহর দেয়।
    
    নিয়ম: শুধু tool call-এর একটা JSON list দিয়ে উত্তর দাও, এই রকম: [{"tool": "name", "input": {...}}]। যে call-গুলো তুমি এখনই করতে পারো, সবগুলো list-এ দাও। কোনো call অন্য call-এর result ছাড়া করা যায় না হলে সেটা বাদ দাও। আর কোনো লেখা লিখবে না।
    
    User-এর প্রশ্ন: "Tokyo-র আবহাওয়ার সাথে user U-77 যে শহরে থাকে সেখানকার আবহাওয়া তুলনা করো।"

    আপনি দেখবেন: ২টা কল: টোকিওর আবহাওয়া আর U-77-এর জন্য get_user_city। U-77-এর শহরের আবহাওয়ার কল তালিকায় নেই, কারণ সেটাকে অপেক্ষা করতে হবে।

    উদাহরণ উত্তর
    [{"tool": "get_weather", "input": {"city": "Tokyo"}}, {"tool": "get_user_city", "input": {"user_id": "U-77"}}]

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

এইমাত্র কী হলো

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

কাজ শেষ, যখন আপনার কাছে ৩টা তালিকা আছে, যেগুলোতে কল আছে ২টা, ১টা আর ২টা, আর শেষটায় কোন কল বাদ পড়েছে সেটা আপনি জানেন।

নিজেকে যাচাই করুনপ্যারালাল টুল কল এজেন্টকে দ্রুত করে কেন? কখন এটা ব্যবহার করা যায় না?উত্তর দেখুন

নির্ভরশীল না হলে কলগুলো একসাথে চলে, তাই অপেক্ষা হয় শুধু সবচেয়ে ধীর কলের সমান। একটা কলের জন্য অন্য কলের রেজাল্ট লাগলে সেটাকে পরের টার্ন পর্যন্ত অপেক্ষা করতে হয়।

আরেকটু কঠিন করে দেখুন

এমন একটা প্রশ্ন লিখুন, যাতে ৩টা কল লাগে: দুটো একসাথে চলতে পারে, একটাকে অপেক্ষা করতে হয়। নতুন চ্যাটে টেস্ট করুন। মডেল কি কলগুলো ঠিকভাবে ভাগ করেছে?

টাস্ক ৪

একটা MCP সার্ভারের ফিচার ভাগ করুন

এটা কেন দরকার

আপনার টিমে অনেক অ্যাপ আর অনেক ডেটা সোর্স থাকলে প্রতিটা সংযোগ হাতে বানাতে কয়েক সপ্তাহ লেগে যায়। MCP একটা শেয়ার্ড স্ট্যান্ডার্ড, যা এই কাজ কমায়। এর তিন ধরনের ফিচারও আপনাকে জানতে হবে।

  1. ধাপ ১
    নতুন চ্যাট

    এই প্রম্পটের ৮টা ফিচার পড়ুন। কাগজে প্রতিটার জন্য টুল, রিসোর্স, না প্রম্পট, আন্দাজ করে লিখুন। তারপর কপি করে পেস্ট করুন, Enter চাপুন, আর মিলিয়ে দেখুন।

    প্রম্পট
    একটা Postgres database-এর MCP server এই feature-গুলো দেয়:
    1. run_query: একটা SQL query চালায় আর rows ফেরত দেয়
    2. সব table আর column-এর list, db://schema address-এ পড়া যায়
    3. "weekly-sales-report" নামে একটা saved template, user menu থেকে নাম দেখে বাছে
    4. insert_row: একটা table-এ নতুন row যোগ করে
    5. গতকালের order-এর একটা read-only CSV file, db://exports/orders-yesterday address-এ
    6. "explain-this-slow-query" নামে একটা template, user যে query দেয় সেটা বসিয়ে নেয়
    7. delete_old_logs: ৯০ দিনের পুরনো log row মুছে দেয়
    8. একজন customer-এর record-এর লেখা, db://customers/1042 address-এ
    
    MCP-তে তিন ধরনের primitive আছে:
    - Tool: model যে function call করে কোনো কাজ (action) করাতে পারে।
    - Resource: read-only data, client দরকার হলে এনে নিতে পারে।
    - Prompt: নাম দেওয়া prompt template, user বেছে নিতে পারে।
    
    প্রতিটা feature-কে একটা primitive-এ ভাগ করো। একটা table দিয়ে উত্তর দাও: নম্বর, primitive, আর ১০ শব্দ বা কম শব্দে কারণ।

    আপনি দেখবেন: একটা টেবিল। ১, ৪, ৭ নম্বর টুল (কাজ করে)। ২, ৫, ৮ নম্বর রিসোর্স (অ্যাড্রেসে থাকা রিড-অনলি ডেটা)। ৩, ৬ নম্বর প্রম্পট (টেমপ্লেট)।

    উদাহরণ উত্তর
    1 | Tool | query চালায়, এটা একটা কাজ
    2 | Resource | address-এ read-only schema
    3 | Prompt | user নাম দেখে বাছা template
    4 | Tool | row যোগ করে, data বদলায়
    5 | Resource | address-এ read-only file
    6 | Prompt | user যা দেয় সেটা বসানো template
    7 | Tool | row মুছে দেয়, এটা একটা কাজ
    8 | Resource | address-এ read-only record

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই চ্যাট

    এই প্রম্পটটা কপি করুন, একই চ্যাটে পেস্ট করে Enter চাপুন। ক্যালকুলেটর দিয়ে সংখ্যাগুলো মিলিয়ে নিন।

    প্রম্পট
    আমাদের ৩টা app আছে (একটা IDE, একটা chat app, আর একটা custom agent) আর ৪টা data source আছে (Postgres, একটা wiki, GitHub, আর একটা file store)। MCP ছাড়া আমাদের কয়টা custom integration লিখতে হবে? MCP দিয়ে কয়টা অংশ লিখতে হবে (প্রতি app-এ একটা client, প্রতি source-এ একটা server)? Formula দেখাও, আর ২ বাক্যে বলো সংখ্যা দুটো আলাদা কেন।

    আপনি দেখবেন: MCP ছাড়া: ৩ × ৪ = ১২ ইন্টিগ্রেশন। MCP দিয়ে: ৩ + ৪ = ৭ অংশ।

    উদাহরণ উত্তর
    MCP ছাড়া: 3 app × 4 source = 12টা custom integration।
    MCP দিয়ে: 3 client + 4 server = 7টা অংশ।
    সংখ্যা আলাদা, কারণ MCP ছাড়া প্রতিটা app-কে প্রতিটা source-এর সাথে আলাদা করে জুড়তে হয়। MCP থাকলে প্রতিটা app আর প্রতিটা source শুধু একটাই shared standard মানলেই হয়।

    আপনার উত্তরের ভাষা একটু আলাদা হবে।

এইমাত্র কী হলো

MCP (Model Context Protocol) একটা ওপেন স্ট্যান্ডার্ড, যা AI অ্যাপকে ডেটা আর টুলের সাথে জোড়া দেয়। একটা সার্ভার তিন ধরনের ফিচার দেয়: টুল (মডেল কোনো কাজ করে), রিসোর্স (রিড-অনলি ডেটা, মডেল এনে নিতে পারে), আর প্রম্পট (নাম দেওয়া টেমপ্লেট, ইউজার বাছে)। যা ডেটা বদলায়, সেটাই টুল। MCP ছাড়া আপনাকে অ্যাপ × সোর্স সংখ্যক সংযোগ বানাতে হয়। MCP দিয়ে বানাতে হয় অ্যাপ + সোর্স সংখ্যক অংশ।

কাজ শেষ, যখন আপনার কাছে এমন একটা টেবিল আছে যাতে ৮টা ফিচারই ভাগ করা, আর আপনি ১২ আর 7-এর পার্থক্য দেখেছেন।

নিজেকে যাচাই করুনdelete_old_logs কেন টুল, রিসোর্স নয়?উত্তর দেখুন

রিসোর্স হলো রিড-অনলি ডেটা, যা ক্লায়েন্ট এনে নেয়। রো মুছে ফেলা একটা কাজ (অ্যাকশন), আর কাজ করানোর জন্য আছে টুল।

আরেকটু কঠিন করে দেখুন

নিজে একটা ৯ নম্বর ফিচার যোগ করুন, যেটা ভাগ করা কঠিন, যেমন একটা রিড-অনলি ডেটা ফিড যার আবার ইনপুট লাগে। মডেলকে জিজ্ঞেস করুন, তারপর তার উত্তরের সাথে তর্ক করুন।

ভিডিও দেখুন · ৬টি

কুইজ

কী শিখলেন যাচাই করুন। ৫টি প্রশ্ন।

১. এই পার্ট অনুযায়ী একটি টুলের ডেসক্রিপশনে কী কী থাকা উচিত?

২. MCP-তে কোন প্রিমিটিভ হলো শুধু-পড়ার যোগ্য ডেটা, যা ক্লায়েন্ট প্রয়োজনে ফেচ করতে পারে, যেমন ফাইল, DB row বা ওয়েব পেজ?

৩. একটি প্রম্পটে প্রায় 20-এর বেশি টুল দিলে সঠিক টুল বেছে নেওয়ার ক্ষেত্রে মডেলের অ্যাকুরেসি বাড়ে।

৪. মডেলের টোকিওর আবহাওয়া আর USD থেকে JPY রেট দুটোই দরকার, আর একটি অন্যটির উপর নির্ভর করে না। তার কী করা উচিত?

৫. একটি SQL টুল ১০,০০০ রো ফেরত দিল। এই পার্ট কী পরামর্শ দেয়?

মেলাতে সব প্রশ্নের উত্তর দিন।

তথ্যসূত্র

সোর্স

সব সাইটেশন মূল পেপার (arXiv), ভেন্ডরের ডক্স (OpenAI, Anthropic, Google) বা অফিশিয়াল টিম ব্লগে যায়। প্রতিটি পাতা খুলে সাইটেশনের তথ্য যাচাই করা হয়েছে।

  1. [1]Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models" (ICLR 2023)
  2. [2]Wei et al., "Plan-and-Execute Agents" / "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" — NeurIPS 2022
  3. [3]Shinn et al., "Reflexion: Language Agents with Verbal Reinforcement Learning" — NeurIPS 2023
  4. [4]Xu et al., "ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models"
  5. [5]Anthropic Engineering blog — "How we built our multi-agent research system" (2025)
  6. [6]LangGraph — official documentation (LangChain)
  7. [7]Temporal — "Durable Execution for LLM Agents"
  8. [8]Park et al., "Generative Agents: Interactive Simulacra of Human Behavior" — 2023
  9. [9]Anthropic — "Introducing computer use, a new Claude 3.5 Sonnet capability" (Oct 2024)
  10. [10]Anthropic — Tool use / function calling documentation
  11. [11]OpenAI — Function calling guide
  12. [12]Anthropic — Model Context Protocol (MCP) specification
  13. [13]Kwon et al., "Efficient Memory Management for Large Language Model Serving with PagedAttention" — vLLM paper, SOSP 2023
  14. [14]Zheng et al., "SGLang: Efficient Execution of Structured Language Model Programs" — 2023
  15. [15]llama.cpp — open-source GGUF-native inference (ggerganov)
  16. [16]Lin et al., "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration" — MLSys 2024
  17. [17]Anthropic — Prompt caching documentation
  18. [18]Zheng et al., "Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena" — NeurIPS 2023
  19. [19]Es et al., "Ragas: Automated Evaluation of Information Retrieval Augmented Language Models" — 2023
  20. [20]Yue et al., "Large Language Model Cascades with Mixture of Thought Representations" — 2024
  21. [21]GPTCache — open-source semantic cache
  22. [22]Guo et al., "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via RL" — 2025
  23. [23]Jiang et al., "LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models" — EMNLP 2023
  24. [24]LiteLLM — unified interface for 100+ LLMs
  25. [25]OWASP — "Top 10 for LLM Applications" (LLM01 Prompt Injection, 2025)
  26. [26]Bai et al., "Constitutional AI: Harmlessness from AI Feedback" — Anthropic, 2022
  27. [27]NVIDIA NeMo Guardrails — open-source toolkit
  28. [28]Qwen2-VL Team, "Qwen2-VL: Enhancing Vision-Language Model's Perception of the World at Any Resolution" — 2024
  29. [29]OpenAI — Realtime API documentation
  30. [30]OpenAI — Production best practices guide