AI Agent বনাম চেনা Automation টুল (Zapier/Make) — আসল পার্থক্য কোথায়

AI Agent বনাম চেনা Automation টুল (Zapier/Make) — আসল পার্থক্য কোথায়

Z
জাহিদ হাসান তন্ময়
৫ অক্টোবর, ২০২৬
9 মিনিটের পড়া
🇬🇧 Read in English
|
0 views
অডিও ওভারভিউ ও পডকাস্ট
~১ মিনিট কুইক ওভারভিউ
0%

AI Agent বনাম চেনা Automation টুল (Zapier/Make) — আসল পার্থক্য কোথায়
AI Agent বনাম চেনা Automation টুল (Zapier/Make) — আসল পার্থক্য কোথায়

আগের পোস্টে এজেন্টকে কী করতে হবে তা বলে দেওয়া system prompt নিয়ে লিখেছিলাম। এরকম কিছু লেখার পরপরই প্রায় সবার কাছ থেকে একটাই প্রশ্ন আসে: “এটা তো আমি Zapier দিয়েই বানিয়ে ফেলেছি — তাহলে এত কিছুর দরকার কী?”

এক বছর আগে এর সৎ উত্তর ছিল সহজ: Zapier আর Make চলত স্থির, trigger-থেকে-action সিকোয়েন্সে, কোনো মডেল কিছু সিদ্ধান্ত নিত না, এটুকুই। এটা আর সত্যি না, আর সত্যি ধরে নিয়ে তুলনা করলে পুরোটাই একটা কাল্পনিক প্রতিপক্ষের সাথে লড়াই হয়ে যাবে। Zapier নিজেদের Agents প্রোডাক্ট এনেছে, আর ২০২৬-এর জুলাইতে একটা AI Orchestration স্তর, যেটা স্পষ্টভাবেই সরল if-this-then-then automation-এর বাইরে যাওয়ার জন্য বানানো। Make একই বছরের শুরুর দিকে তাদের scenario canvas-এর ভেতরেই AI Agents এনেছে। “কোথাও কোনো মডেল সিদ্ধান্ত নিচ্ছে কিনা” — এটা আর তফাত বোঝার রেখা না। কোথায় সেই সিদ্ধান্তটা নেওয়া হচ্ছে, আর পুরো এজেন্টের ওপর আপনার আসলে কতটা নিয়ন্ত্রণ আছে — এখনও এটাই আসল তফাত।

দুটোই এখন “এআই এজেন্ট” শোনাতে পারে

২০২৬-এর এই ফিচারগুলো নিয়ে লেখা review-গুলো একসাথে দেখলে একটা জিনিস বারবার আসে: সিদ্ধান্ত নেওয়ার কাজটা হয় platform-এর আগে থেকে বানানো action-এর একটা সীমিত তালিকার ভেতরেই, আর একে সাধারণত বলা হয় semi-autonomous, পুরোপুরি autonomous না। এটা কোনো দোষ না — কোনো no-code platform ইচ্ছাকৃতভাবেই এই trade-off মেনে নেয়, আর অনেক কাজের জন্য এটাই ঠিক সিদ্ধান্ত। তবে এর মানে হলো, সৎ তুলনাটা আর “no-code tool, কোনো চিন্তা নেই” বনাম “নিজের কোড, আসল চিন্তা আছে” — এভাবে হয় না। বরং এভাবে হয়: platform-এর নিজের action library-র ভেতরে একটা মডেল সিদ্ধান্ত নিচ্ছে, বনাম নিজের ডিজাইন করা tool, memory আর সীমার ভেতরে একটা মডেল সিদ্ধান্ত নিচ্ছে — এই সিরিজের প্রতিটা পোস্ট যেভাবে raw SDK থেকে শুরু করে একটা করে বানিয়ে এসেছে।

বাস্তবে এটা দেখতে এমন: একটা visual canvas-এ একটা node এখন “মডেলকে সিদ্ধান্ত নিতে দাও” হয়ে গেছে, বাকি সব ধাপের মতোই একই drag-and-drop builder-এর ভেতরে বসে — মডেল সেই scenario-তে আগে থেকে জুড়ে দেওয়া action-গুলোর মধ্য থেকেই বেছে নেয়, আপনার নিজের বানানো খোলা একটা tool-এর সেট থেকে না।

ঠিক যেন একজন বাবুর্চিকে একটা নির্দিষ্ট মেনুর ভেতর থেকে আজ কোন পদটা রান্না হবে তা বেছে নেওয়ার স্বাধীনতা দেওয়া — তিনি সিদ্ধান্ত নিচ্ছেন ঠিকই, কিন্তু মেনুটা আগে থেকেই ঠিক করা। এজেন্ট বানানো মানে নিজের রান্নাঘর, নিজের উপকরণ আর নিজের রেসিপি বইও নিজেই লেখা।

আসল তফাতের রেখা: কে পথ ঠিক করে, আর কখন

একটা trigger-action platform, AI যোগ হোক বা না হোক, তার কেন্দ্রে একটাই গঠন থাকে: কিছু ঘটে, একটা workflow চলে, শেষ হয়ে যায়। সেই workflow-এর একটা ধাপে এখন ভেতরে মডেল বসানো থাকলেও, workflow-এর পুরো গঠনটা — কোন app জড়িত, মোটামুটি কোন ক্রমে কাজ হবে — আগে থেকেই একজন মানুষ builder-এ এঁকে রেখেছেন।

চারটা অংশ নিয়ে পোস্টে যেভাবে বলা হয়েছিল — Brain, Memory, Tools, Loop — সেভাবে বানানো একটা এজেন্টের কোনো আগে-আঁকা গঠনই থাকে না। মডেল আসল মেসেজটা পড়ে প্রতিটা ধাপে নিজে ঠিক করে কোন tool প্রযোজ্য, কোন ক্রমে, আর কখন কাজ শেষ। পথের কোনো অংশই আগে থেকে স্থির না; পুরোটাই tool design আর prompt design-এর ব্যাপার, এই সিরিজের গত কয়েকটা পোস্ট আসলে যা নিয়েই লেখা।

এটাকে এভাবে ভাবুন: কোনো অনুরোধ আসার আগেই আঁকা একটা flowchart, বনাম এমন একজন মানুষ যে প্রতিটা অনুরোধ নতুন করে পড়ে ঠিক করেন কী করবেন। সেই flowchart-এ একটা সিদ্ধান্তের বাক্স থাকতে পারে, এখন হয়তো সেই বাক্সটাও একটা মডেল পূরণ করে — কিন্তু বাক্সটা, আর তার থেকে বেরোনো পথগুলো, আগে থেকেই একজন মানুষ বসিয়ে রেখেছেন। এজেন্ট কোনো আঁকা গঠন থেকেই শুরু করে না; গঠনটা তা-ই হয়ে যায় মডেল যা দরকার মনে করে, এই মেসেজের জন্য, এই মুহূর্তে।

📊 Architecture DiagramArchitecture Flow
Interactive diagram rendering...
flowchart TD
    subgraph "স্থির automation"
        F0[যেকোনো trigger] --> F1[ধাপ A, সবসময়] --> F2[ধাপ B, সবসময়]
    end
    subgraph "Agent"
        A0[যেকোনো মেসেজ] --> AD{মডেল পড়ে}
        AD -->|শুধু A প্রযোজ্য| A1[ধাপ A]
        AD -->|শুধু B প্রযোজ্য| A2[ধাপ B]
        AD -->|দুটোই প্রযোজ্য| A3[ধাপ A আর B]
        AD -->|কোনোটাই না| A4[কোনো tool না, শুধু উত্তর]
    end
System architecture specification and node flow: flowchart TD subgraph "স্থির automation" F0[যেকোনো trigger] --> F1[ধাপ A, সবসময়] --> F2[ধাপ B, সবসময়] end subgraph "Agent" A0[যেকোনো মেসেজ] --> AD{মডেল পড়ে} AD -->|শুধু A প্রযোজ্য| A1[ধাপ A] AD -->|শুধু B প্রযোজ্য| A2[ধাপ B] AD -->|দুটোই প্রযোজ্য| A3[ধাপ A আর B] AD -->|কোনোটাই না| A4[কোনো tool না, শুধু উত্তর] end

Flow-এর সারসংক্ষেপ: একটা স্থির automation যা-ই trigger করুক না কেন, প্রতিবার একই ধাপ চালায়। এজেন্টের মডেল আগে আসল মেসেজটা পড়ে, তারপর ঠিক করে কোন ধাপ, থাকলে, প্রযোজ্য — একই দুটো tool বিষয়বস্তু অনুযায়ী চারটা আলাদা ফলাফল দিতে পারে, প্রতিবার একই ফলাফল না।

একটা শক্ত কাচের নল, একটাই স্থির, অপরিবর্তনীয় আঁকাবাঁকা গঠনে বাঁকানো
একটা শক্ত কাচের নল, একটাই স্থির, অপরিবর্তনীয় আঁকাবাঁকা গঠনে বাঁকানো

তফাতটা কোডে দেখা

npm install @anthropic-ai/sdk দিয়ে SDK ইনস্টল করুন, ANTHROPIC_API_KEY সেট করুন, ফাইলটা agent/fixed-vs-agent.ts নামে সেভ করে npx tsx agent/fixed-vs-agent.ts চালান।

ts
// agent/fixed-vs-agent.ts
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic();

const expenses: { item: string; amount: number }[] = [];
const log: string[] = [];

function addExpense(item: string, amount: number) {
  expenses.push({ item, amount });
  return { ok: true, recorded: expenses.length };
}

function getTotal() {
  return { total: expenses.reduce((sum, e) => sum + e.amount, 0) };
}

function notify(message: string) {
  log.push(message);
  return { sent: true };
}

// ---- A fixed automation: every run executes the same two steps,
// in the same order, no matter what the incoming text says.
function runFixedAutomation(item: string, amount: number) {
  const step1 = addExpense(item, amount);
  const step2 = notify(`Recorded: ${item} (${amount})`);
  return { step1, step2 };
}

// ---- An agent: the model reads the message and decides which
// tool, if any, applies — nothing is pre-wired.
const tools: Anthropic.Tool[] = [
  {
    name: 'add_expense',
    description: 'Record one expense. Use it whenever the user says they spent money.',
    input_schema: {
      type: 'object',
      properties: { item: { type: 'string' }, amount: { type: 'number' } },
      required: ['item', 'amount'],
    },
  },
  {
    name: 'get_total',
    description:
      "Return the exact sum of every expense recorded so far. Use this whenever the user asks for a total, a sum, or how much they've spent overall.",
    input_schema: { type: 'object', properties: {} },
  },
  {
    name: 'notify',
    description: 'Send the user a short notification. Use this only when the user explicitly asks to be notified or reminded.',
    input_schema: {
      type: 'object',
      properties: { message: { type: 'string' } },
      required: ['message'],
    },
  },
];

function execute(name: string, input: Record<string, unknown>): unknown {
  if (name === 'add_expense') return addExpense(String(input.item), Number(input.amount));
  if (name === 'get_total') return getTotal();
  if (name === 'notify') return notify(String(input.message));
  return { error: 'unknown tool' };
}

async function runAgent(userText: string): Promise<string> {
  const messages: Anthropic.MessageParam[] = [{ role: 'user', content: userText }];

  for (let step = 0; step < 4; step++) {
    const response = await client.messages.create({
      model: 'claude-sonnet-5',
      max_tokens: 300,
      tools,
      messages,
    });

    messages.push({ role: 'assistant', content: response.content });

    if (response.stop_reason !== 'tool_use') {
      const block = response.content.find((b): b is Anthropic.TextBlock => b.type === 'text');
      return block?.text ?? '';
    }

    const results: Anthropic.ToolResultBlockParam[] = [];
    for (const block of response.content) {
      if (block.type === 'tool_use') {
        results.push({
          type: 'tool_result',
          tool_use_id: block.id,
          content: JSON.stringify(execute(block.name, block.input as Record<string, unknown>)),
        });
      }
    }
    messages.push({ role: 'user', content: results });
  }

  return 'Stopped: step limit reached';
}

runAgent('I spent 500 on lunch.').then(console.log);

runFixedAutomation হলো trigger-action-এর গঠনটাই ছোট করে দেখানো: যেকোনো খরচের জন্য ডাকুন, এটা সবসময় addExpense আর notify দুটোই চালায়, একই ক্রমে, কোনো notification আদৌ চাওয়া হয়েছিল কিনা তা না দেখেই — কারণ এই ফাংশনের ভেতরে সিদ্ধান্ত নেওয়ার জন্য বিষয়বস্তু পড়ার মতো কিছুই নেই। runAgent-এর হাতে একই তিনটা tool থাকলেও, যা আসলে বলা হয়েছে তার ওপর ভিত্তি করে সে আলাদাভাবে কাজ করে: “৫০০ টাকা দুপুরের খাবারে খরচ হয়েছে” বললে শুধু add_expense ডাকে; “এখন পর্যন্ত আমার মোট কত” জিজ্ঞেস করলে শুধু get_total ডাকে; “চায়ে ২০০ টাকা খরচ হয়েছে, আর আমাকে জানিয়ে দাও” বললে দুটোই ডাকে। তিনটা আলাদা মেসেজ, তিনটা আলাদা পথ, প্রতিবার মডেল ঠিক করে, কোনো ফাংশনের ভেতরে আগে থেকে লেখা না।

একটা কাচের কোর থেকে চারটা পথ ছড়িয়ে আছে, একটা input আসার পর শুধু একটাই জ্বলছে
একটা কাচের কোর থেকে চারটা পথ ছড়িয়ে আছে, একটা input আসার পর শুধু একটাই জ্বলছে

এই পোস্ট লিখতে গিয়ে প্রায় যে ভুলটা করে ফেলছিলাম

এই পোস্টের প্রথম খসড়ায় পুরোনো যুক্তিটাই লেখা ছিল — no-code tool চিন্তা করতে পারে না, এজেন্ট পারে, ব্যাস। প্রকাশ করার আগে Zapier আর Make এখন আসলে কেমন দেখতে, সেটা যাচাই করতে গিয়ে দেখা গেল Zapier-এর AI Orchestration আর Make-এর AI Agents ফিচার, দুটোই এই বছরের শুরুর দিকের। পুরোনো যুক্তিটা প্রকাশ হওয়ার মুহূর্তেই ভুল হয়ে যেত। সমাধানটা ছোট কোনো শব্দ বদল ছিল না; পুরো তুলনাটাই নতুন করে সাজাতে হলো, কী এখনও সত্যি — সিদ্ধান্তটা কোথায় নেওয়া হয় আর tool-এর সেটের ওপর কার নিয়ন্ত্রণ — তার ওপর ভিত্তি করে, কোথাও মডেল জড়িত আছে কিনা সেই প্রশ্নের ওপর না। এই সিরিজের প্রতিটা পোস্টেই কোড আসলে চালিয়ে যাচাই করি বলে এই ভুলটা লেখার আগেই ধরা পড়ল — মতামত হিসেবে না রেখে, সত্যিই কী বদলেছে তা যাচাই করতে গিয়েই।

দুটো তুলনা করতে গিয়ে সাধারণ ভুল

  • “no-code automation platform” মানে এখনও “কোনো মডেল চিন্তা করছে না” ধরে নেওয়া। আপনি শেষবার দেখেছিলেন তখন কী ছিল তা না, এখন platform-টা আসলে কী দেয় তা দেখুন; এই জায়গাটা দ্রুত বদলায়।
  • “platform-এর AI Agent ফিচার ব্যবহার করেছি”-কে নিজে একটা এজেন্ট বানানোর সমান ধরে নেওয়া। নিজের tool, memory আর system prompt ডিজাইন করা আলাদা, অনেক বেশি নিয়ন্ত্রণযোগ্য একটা কাজ, অন্য কারো সীমিত action library-র ভেতরে একটা ফিচার সাজানোর চেয়ে।
  • Platform-এর library-তেই যা হয়ে যায়, সেটার জন্য নিজে কোড লেখা। একটা বাক্যে বলা যায় এমন কাজ, দুটো আগে থেকে থাকা app জোড়া লাগানো, সাধারণত ঠিক এই কাজের জন্য বানানো একটা platform-এ অনেক দ্রুত আর সস্তায় হয়ে যায়।
  • উল্টো ভুলটাও আছে: জটিল, state ধরে রাখতে হয় এমন একটা কাজকে জোর করে platform-এর সীমিত action-এর মধ্যে ঢোকানো। Platform-এর নেই এমন কোনো tool, নিজের প্রোডাক্টের জন্য গড়া memory, বা নিখুঁতভাবে টিউন করা একটা prompt লাগলেই এটা বানানোর সময়, শুধু সাজানোর না।

এরপর

স্থির workflow আর সিদ্ধান্ত নেওয়া পথের আসল তফাতটা জানা থাকলে পরের প্রশ্নটা নিজে থেকেই আসে: এজেন্টকে কতটা নিজে সিদ্ধান্ত নিতে দেওয়া উচিত, আর কোথায় সেই স্বাধীনতার একটা সীমা দরকার? এটা নিয়ে আলাদা একটা পোস্ট লেখার মতো যথেষ্ট আছে।

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)

Zapier আর Make কি এখন “আসল” এআই এজেন্ট হিসেবে গণ্য হয়?

তাদের নিজস্ব agent ফিচারে মডেল সত্যিই সিদ্ধান্ত নেয়, তাই “no-code tool চিন্তা করে না” — এই সরল পরীক্ষা আর খাটে না। যা এখনও আলাদা তা হলো পরিধি: সেই সিদ্ধান্তগুলো নেওয়া হয় platform-এর আগে থেকে বানানো, সীমিত action-এর ভেতরে, নিজের ডিজাইন করা tool, memory সিস্টেম আর prompt-এর ভেতরে না।

কখন শুধু Zapier বা Make ব্যবহার করব, এজেন্ট না বানিয়ে?

কাজটা এক বাক্যে বলা গেলে — কিছু ঘটলে app A-কে app B-এর সাথে জোড়া — আর কোনো কাস্টম tool, নিজের memory সিস্টেম, বা পুরোপুরি নিজের নিয়ন্ত্রণে থাকা মডেল না লাগলে। Platform-এর সীমিত action library আর per-task pricing তখন কোড না লেখার, না রক্ষণাবেক্ষণ করার একটা ন্যায্য বিনিময়।

কখন নিজে একটা কাস্টম এজেন্ট বানানো যুক্তিসঙ্গত?

Platform যে tool দেয় না সেটা লাগলে, নিজের প্রোডাক্টের জন্য গড়া memory লাগলে, নিখুঁতভাবে টিউন করা একটা system prompt লাগলে, বা per-task স্কেল করে না এমন একটা খরচের গঠন লাগলে — এই সিরিজের গত কয়েকটা পোস্ট আসলে এসবই বানিয়ে দেখিয়েছে।

🟢 ফ্রিল্যান্স ও কনট্রাক্ট প্রজেক্টের জন্য উন্মুক্ত

কাস্টম ওয়েব অ্যাপ বা এআই অটোমেশন বানাতে চান?

আমি স্টার্টআপ ও আধুনিক ব্যবসার জন্য স্কেলেবল ফুল-স্ট্যাক ওয়েব অ্যাপ্লিকেশন (Next.js, React, Node, PostgreSQL) এবং ইন্টেলিজেন্ট এআই এজেন্ট সলিউশন তৈরি করি। আপনার প্রজেক্টের আইডিয়া নিয়ে কথা বলা যাক!

ফুল-স্ট্যাক এমভিপি (MVP) ডেভেলপমেন্ট
অটোনোমাস এআই এজেন্ট ও এলএলএম ইন্টিগ্রেশন
পারফেক্ট এসইও ও সর্বোচ্চ পারফরম্যান্স
ক্লিন কোড ও মডার্ন আর্কিটেকচার

আর্টিকেলটি কি আপনার ভালো লেগেছে?

তন্ময়ের কাজকে সাপোর্ট করতে তালি (Clap) দিয়ে উৎসাহিত করুন!

0 views
Z

জাহিদ হাসান তন্ময়

সফটওয়্যার ডেভেলপার

MERN ফুল-স্ট্যাক ডেভেলপার এবং AI এজেন্ট ডেভেলপার, ঢাকা, বাংলাদেশ। ওয়েব ডেভেলপমেন্ট, রিঅ্যাক্ট, লারাভেল এবং আমার লার্নিং জার্নি নিয়ে লিখছি।

Related Articles

Stay Updated

Subscribe to get insights on full-stack architecture, AI agent engineering, and web development.