SSD Nodes Learn 8GB RAM — $66/বছর
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-01

নিজের VPS-এ n8n AI এজেন্ট তৈরি করার নিয়ম

আপনার নিজস্ব VPS-এ n8n AI এজেন্ট তৈরির পূর্ণাঙ্গ গাইড। এতে AI Agent নোড, Claude মডেল ক্রেডেনশিয়াল, HTTP রিকোয়েস্ট টুল, মেমরি এবং খরচ নিয়ন্ত্রণের সঠিক সেটিংস দেওয়া হয়েছে।

n8n AI এজেন্ট কী এবং চেইনের সাথে এর পার্থক্য কোথায়

একটি n8n AI এজেন্ট হলো একটি একক AI Agent নোড, যার সাথে বিভিন্ন সাব-নোড যুক্ত থাকে: একটি চ্যাট মডেল, এক বা একাধিক টুল এবং ঐচ্ছিক মেমরি। আপনি সাধারণ ভাষায় একটি লক্ষ্য নির্ধারণ করেন এবং মডেলটি সিদ্ধান্ত নেয় যে কোন টুলগুলো এবং কোন ক্রমে ব্যবহার করতে হবে, যতক্ষণ না সেটি উত্তর দিতে পারে। এই ধারণার ওপর ভিত্তি করেই নিচের সমস্ত কনফিগারেশন তৈরি করা হয়েছে।

একটি চেইন ঠিক উল্টোভাবে কাজ করে। একটি Basic LLM Chain-এ আপনি ধাপগুলো নির্ধারণ করেন এবং মডেলটি কেবল টেক্সট পূরণ করে। এজেন্টের ক্ষেত্রে মডেল নিজেই ধাপগুলো ঠিক করে, তাই একই প্রশ্নের জন্য আজ হয়তো একটি মডেল কলের প্রয়োজন হতে পারে, কিন্তু আগামীকাল নয়টি কলের প্রয়োজন হতে পারে। এই একটি পার্থক্যই এই গাইডের প্রতিটি সেটিংসকে প্রভাবিত করে।

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

এখানে উল্লিখিত কোনো ফিল্ডের নামের ওপর আস্থা রাখার আগে আপনার ভার্সন চেক করে নিন, কারণ n8n প্রায়ই তাদের AI নোডগুলোতে পরিবর্তন আনে।

docker compose exec n8n n8n --version

এই গাইডে ব্যবহৃত নামগুলো জুলাই 2026 অনুযায়ী n8n-এর বর্তমান স্টেবল ভার্সনের সাথে সামঞ্জস্যপূর্ণ। 1.82.0 ভার্সন থেকে প্রতিটি AI Agent নোড Tools Agent হিসেবে চলে, তাই পুরনো এজেন্ট-টাইপ ড্রপডাউনটি আর নেই।

ধাপ 1: ট্রিগার নির্বাচন করুন

একটি কথোপকথনমূলক এজেন্টের জন্য, একটি Chat Trigger নোড যোগ করুন। আপনি যখন এটি তৈরি করছেন, তখন Make Chat Publicly Available অপশনটি বন্ধ রাখুন, যাতে শুধুমাত্র এডিটরের চ্যাট প্যানেল থেকে এটি অ্যাক্সেস করা যায়। এজেন্ট তৈরি সম্পন্ন হলে এবং আপনি প্রমাণীকরণ (authentication) পদ্ধতি নির্ধারণ করে ফেললে এটি চালু করুন।

Chat Trigger এজেন্টকে chatInput নামক একটি ফিল্ড প্রদান করে। ধাপ 3-এ এই নামটি গুরুত্বপূর্ণ এবং এটি ভুল করা নতুনদের ক্ষেত্রে সবচেয়ে সাধারণ ব্যর্থতার কারণ।

একটি আনঅ্যাটেন্ডেড (unattended) এজেন্টের জন্য, পরিবর্তে একটি Schedule Trigger অথবা একটি Webhook নোড ব্যবহার করুন। এগুলোর কোনোটিই chatInput তৈরি করে না, তাই আপনাকে প্রম্পটটি নিজে লিখতে হবে।

ধাপ 2: মডেল ক্রেডেনশিয়াল

ক্যানভাসে একটি AI Agent নোড ড্রপ করুন। n8n তাৎক্ষণিকভাবে এর নিচে একটি খালি Chat Model কানেক্টর প্রদর্শন করবে। সেখানে একটি Anthropic Chat Model সাব-নোড সংযুক্ত করুন।

Anthropic Console-এর platform.claude.com থেকে Settings এবং তারপর API Keys-এ গিয়ে ক্রেডেনশিয়াল তৈরি করুন। কি (key) টি একবারই দেখানো হয়। API-এর ব্যবহার প্রতি টোকেন হিসেবে বিল করা হয় এবং এটি যেকোনো Claude.ai সাবস্ক্রিপশন থেকে আলাদা, তাই প্রথমবার চালানোর আগেই অ্যাকাউন্টে বিলিং সেটআপ থাকা প্রয়োজন।

কোম্পানি অনুযায়ী নয়, বরং এজেন্ট অনুযায়ী মডেল নির্বাচন করুন। একটি ওয়ান-টুল এজেন্ট যা কিছু খুঁজে বের করে রিপোর্ট করে, তা Haiku-তে ভালোভাবে চলে। জুলাই 2026 অনুযায়ী, এর মূল্য প্রতি মিলিয়ন ইনপুট টোকেনে $1 এবং প্রতি মিলিয়ন আউটপুট টোকেনে $5। যখন এজেন্টের একাধিক টুল থাকে এবং সেগুলোকে ব্যবহার করে পরিকল্পনা করতে হয়, তখন Sonnet-এ চলে যান। আপনি যে ব্যর্থতা এড়াতে চাইছেন তা হলো একটি সস্তা মডেল যা ভুল টুল চারবার কল করে, যার খরচ একটি দামী মডেলের একবার সঠিক টুল কল করার চেয়ে বেশি।

সাব-নোডের অপশনগুলোতে Maximum Number of Tokens সেট করুন। এটি মডেলের প্রতিটি উত্তরের দৈর্ঘ্য সীমাবদ্ধ করে। বড় ডিফল্ট মান রেখে দিলে, একটি বিভ্রান্তিকর রান খুব দীর্ঘ উত্তর তৈরি করতে পারে এবং এর জন্য আপনাকে বিল দিতে হতে পারে।

n8n ডকুমেন্টেশন থেকে একটি সতর্কতা যা সবার ক্ষেত্রেই ঘটে: সাব-নোডের ভেতরের এক্সপ্রেশনগুলো সবসময় প্রথম ইনপুট আইটেমের বিপরীতে রেজলভ হয়, প্রতি আইটেমের বিপরীতে নয়। প্রতি-আইটেম এক্সপ্রেশনগুলো রুট নোডের প্রম্পট ফিল্ডে রাখুন।

ধাপ 3: এজেন্ট যে প্রম্পটটি গ্রহণ করে

AI Agent নোডটি খুলুন। Prompt প্যারামিটারটিতে দুটি সেটিংস রয়েছে।

  • Take from previous node automatically অপশনটি chatInput নামের একটি ইনকামিং ফিল্ড প্রত্যাশা করে। Chat Trigger-এর পেছনে এটিই সঠিক পছন্দ।
  • Define below অপশনটি একটি Prompt (User Message) ফিল্ড উন্মুক্ত করে, যেখানে আপনি স্ট্যাটিক টেক্সট বা এক্সপ্রেশন লিখতে পারেন। Schedule Trigger বা Webhook নোডের পেছনে এটিই সঠিক পছন্দ।

সামনে একটি Webhook নোড থাকলে, একটি POST বডি $json.body-এর অধীনে জমা হয়, তাই প্রম্পট ফিল্ডটি দেখতে এমন হয়।

Check the current status of {{ $json.body.service }} and tell me
whether it is up. If it is down, say for how long. No preamble.

ধাপ 4: এজেন্টকে একটি টুল প্রদান করুন

একটি AI Agent নোড যার কোনো টুল সাব-নোড নেই, তা চলতে অস্বীকার করে। একটি টুল দিয়ে শুরু করুন, কারণ চারটি অসম্পূর্ণ টুলের চেয়ে একটি কার্যকর টুল আপনাকে বেশি শেখাবে।

এজেন্টের Tool কানেক্টরের সাথে একটি HTTP Request নোড যুক্ত করুন। এটিকে ঠিক সেভাবেই কনফিগার করুন যেভাবে আপনি একটি সাধারণ HTTP Request নোড কনফিগার করতেন, তারপর প্রথমে একটি শেল থেকে সেই এন্ডপয়েন্টটি পরীক্ষা করুন।

curl -s -H 'Accept: application/json' \
  https://status.example.com/api/status/database | head -c 400

যদি সেই curl কমান্ডটি কোনো ত্রুটি বা একটি HTML লগইন পেজ প্রদান করে, তবে এজেন্টটিও ব্যর্থ হবে। এটি তখন মডেলের সমস্যা বলে মনে হতে পারে, কিন্তু আসলে এটি একটি URL বা অথেন্টিকেশন সংক্রান্ত সমস্যা। এটিকে নোডের ভেতরে নয়, বরং শেলের মাধ্যমে সমাধান করুন।

টুলের Description ফিল্ডটি আপনার সহকর্মীদের জন্য কোনো ডকুমেন্টেশন নয়। এই টুলটি প্রাসঙ্গিক কি না, তা সিদ্ধান্ত নেওয়ার সময় মডেল শুধুমাত্র এই অংশটুকুই পড়ে। এটিকে একটি সাধারণ বিবৃতি হিসেবে লিখুন যা বর্ণনা করে যে কী ফলাফল আসবে: "Returns the current up or down state and the downtime duration for one monitored service, as JSON."

মডেলকে রিকোয়েস্টের কিছু অংশ পূরণ করতে দেওয়ার জন্য $fromAI() এক্সপ্রেশনটি ব্যবহার করুন। এটি শুধুমাত্র AI Agent নোডের সাথে সংযুক্ত টুলগুলোতে কাজ করে এবং এটি Code টুলে কাজ করে না।

{{ $fromAI('service', 'The name of the service to look up', 'string') }}

এর আর্গুমেন্টগুলো হলো key, তারপর একটি ঐচ্ছিক description, type এবং defaultValue। কি (key) অবশ্যই 1 থেকে 64 অক্ষরের হতে হবে এবং এতে অক্ষর, সংখ্যা, আন্ডারস্কোর ও হাইফেন ব্যবহার করা যাবে। টাইপটি হলো string, number, boolean অথবা json এর মধ্যে যেকোনো একটি, এবং ডিফল্ট হিসেবে string থাকে। একটি পূর্ণাঙ্গ কল দেখতে অনেকটা এরকম হয়।

{{ $fromAI('limit', 'How many records to return', 'number', 20) }}

কি (key) হলো একটি ইঙ্গিত, বিদ্যমান ডেটার কোনো রেফারেন্স নয়। $fromAI('service') কোনো জায়গা থেকে service নামক কোনো ফিল্ড পড়ে না। এটি মডেলকে বলে "একটি মান তৈরি করো এবং একে service নাম দাও", এবং মডেল তখন কথোপকথন, ইনপুট ডেটা এবং অন্যান্য টুলের ফলাফলের মধ্যে খুঁজে দেখে যে কোনোটি উপযুক্ত। একটি চ্যাট ওয়ার্কফ্লোতে এটি সরাসরি ব্যবহারকারীকে জিজ্ঞাসা করতে পারে।

ধাপ 5: মেমরি এবং এজেন্ট কেন ভুলে যায়

মেমরি সাব-নোড ছাড়া, প্রতিটি মেসেজ শূন্য থেকে শুরু হয়। সাম্প্রতিক কথোপকথন ধরে রাখার জন্য একটি Simple Memory সাব-নোড যুক্ত করুন।

এটির দুটি প্যারামিটার আছে। Session Key নির্ধারণ করে এটি কোন কথোপকথন, তাই ভিন্ন ভিন্ন কি (key) ব্যবহারকারী দুজন ব্যবহারকারীর হিস্ট্রি আলাদা থাকে। Context Window Length হলো কতগুলো পূর্ববর্তী ইন্টারঅ্যাকশন প্রম্পটে পুনরায় পাঠানো হবে তার সংখ্যা।

Context Window Length গুণমানের পাশাপাশি খরচেরও একটি নিয়ন্ত্রক, কারণ প্রতিটি মনে রাখা টার্ন পরবর্তী প্রতিটি কলে ইনপুট টোকেন হিসেবে পুনরায় পাঠানো হয়। একটি চ্যাটি এজেন্টে 20-এর উইন্ডো মানে হলো আপনি একই শুরুর দিকের মেসেজগুলোর জন্য বিশবার মূল্য পরিশোধ করছেন।

n8n যখন কিউ মোডে (queue mode) চলে, তখন Simple Memory সক্রিয় প্রোডাকশন ওয়ার্কফ্লোতে কাজ করে না, কারণ হিস্ট্রি কোনো শেয়ারড স্টোরে না থেকে ওয়ার্কফ্লোর নিজস্ব ডেটাতে থাকে। কিউ-মোড ইনস্ট্যান্সে, পরিবর্তে Postgres Chat Memory সাব-নোড ব্যবহার করুন এবং সেটিকে এমন একটি ডেটাবেসের দিকে নির্দেশ করুন যেখানে মূল প্রসেস এবং ওয়ার্কার উভয়ই পৌঁছাতে পারে।

ধাপ 6: সিস্টেম মেসেজ

এজেন্টের Options খুলুন এবং একটি System Message যোগ করুন। এখানে কাজের বিবরণ (job description) লিখতে হয় এবং এটি ওয়ার্কফ্লোর সবচেয়ে গুরুত্বপূর্ণ টেক্সট।

You are an infrastructure status assistant. Always call the status
tool before answering a question about whether something is running.
Never guess. If the tool returns an error, say so and stop.

"Always call the status tool before answering" নির্দেশটি এখানে কার্যকর ভূমিকা পালন করে। এটি ছাড়া, মডেলটি যদি মনে করে যে সে উত্তরটি জানে, তবে সে টুলটি ব্যবহার না করেই স্মৃতি থেকে উত্তর দেবে। আপনার ইনফ্রাস্ট্রাকচারে কোনো পরিবর্তন আসার সাথে সাথেই এই উত্তরটি ভুল প্রমাণিত হবে।

কেন এজেন্ট লুপে পড়ে এবং কী তা থামায়

Options-এর অধীনে Max Iterations নামে একটি অপশন আছে, যার ডিফল্ট মান 10। একটি ইটারেশন বা পুনরাবৃত্তি মানে হলো একটি মডেল কল এবং তার সাথে একটি টুলের ফলাফল যা কনটেক্সটে ফেরত পাঠানো হয়। সুতরাং, একটি সিঙ্গেল এজেন্ট রান মানে একটি মাত্র API কল নয়, এটি সর্বোচ্চ দশটি কল পর্যন্ত হতে পারে এবং প্রতিটি কল ইনপুট হিসেবে পুরো ক্রমবর্ধমান কথোপকথনটিকে বহন করে।

এর মান কমিয়ে দিন। বেশিরভাগ সিঙ্গেল-টুল এজেন্ট দুটি ইটারেশনের মধ্যেই কাজ শেষ করে ফেলে। 3 বা 4-এর একটি লিমিট সেট করলে কোনো রানঅ্যাওয়ে লুপ সহজেই একটি পরিষ্কার ফেইলুরে পরিণত হয়, যা আপনি এক্সিকিউশন লিস্টে দেখতে পাবেন।

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

শেল থেকে রানটি পর্যবেক্ষণ করুন।

docker compose logs -f n8n

একটি আনঅ্যাটেন্ডেড এজেন্টকে নীরবে খরচ করা থেকে বিরত রাখা

একটি Chat Trigger-এর পেছনে থাকা এজেন্টে একজন মানুষ থাকেন এবং উত্তরের মান ভুল মনে হলে সেই মানুষটি তা থামিয়ে দেন। একটি Schedule Trigger-এর পেছনে থাকা এজেন্টের ওপর নজর রাখার মতো কেউ থাকে না। বিস্তারিত পদ্ধতি AI agent cost control on an always-on VPS-এ দেওয়া হয়েছে। চারটি সেটিংস এখানে মূল কাজগুলো করে।

  • মডেল সাব-নোডে Maximum Number of Tokens সীমাবদ্ধ করুন, যাতে কোনো একটি রেসপন্স খুব দীর্ঘ না হতে পারে।
  • Max Iterations-কে সর্বনিম্ন সংখ্যায় সেট করুন যা দিয়ে কাজটি সম্পন্ন করা সম্ভব।
  • টুলের রেসপন্স ছোট রাখুন। একটি টুল যদি 4,000 লাইনের JSON ব্লব রিটার্ন করে, তবে সেটি পরবর্তী প্রতিটি মডেল কলে যুক্ত হয় এবং একই রানের প্রতিটি পরবর্তী কলে তা ব্যবহৃত হতে থাকে।
  • এজেন্টটির আদৌ কোনো শিডিউলের প্রয়োজন আছে কি না তা যাচাই করুন। প্রতি পাঁচ মিনিটে একটি জব চললে তা দিনে 288 বার কার্যকর হয়। একটি রান সম্পন্ন করতে যে খরচ হয়, সেই সংখ্যাটি দিয়েই আপনাকে মোট খরচ গুণ করতে হবে।

কাজ করার সময় ওয়ার্কফ্লোটি ডিঅ্যাক্টিভেট রাখুন। একটি সক্রিয় ওয়ার্কফ্লো যার Schedule Trigger আছে, তা n8n-এ সেভ করা ভার্সনের ওপর ভিত্তি করে চলতে থাকে, যা সবসময় আপনার স্ক্রিনে থাকা ভার্সনটি নাও হতে পারে।

FAQ

আমার AI Agent নোড কেন কার্যকর হতে অস্বীকার করছে?

AI Agent নোডের জন্য একটি চ্যাট মডেল সাব-নোড এবং অন্তত একটি টুল সাব-নোড প্রয়োজন। কোনো নোডে মডেল থাকলেও টুল না থাকলে সেটি কোনো API কল করার আগেই ব্যর্থ হয়। একটি টুল যুক্ত করুন, এমনকি সেটি সাধারণ হলেও চলবে, এবং পুনরায় চালান।

এজেন্ট উত্তর দিচ্ছে, কিন্তু এটি আমার টুল কল করছে না। সমস্যা কোথায়?

প্রায় সবসময়ই সমস্যাটি টুলের Description ফিল্ডে থাকে। মডেল এই ডেসক্রিপশনগুলো পড়ে টুল নির্বাচন করে, তাই "HTTP Request"-এর মতো ডেসক্রিপশন টুলটি কখন ব্যবহার করতে হবে সে সম্পর্কে কোনো তথ্য দেয় না। এটি পুনরায় লিখুন যাতে বোঝা যায় কী ধরনের ডেটা ফেরত আসবে এবং কোন পরিস্থিতিতে এটি কার্যকর, এরপর System Message-এ একটি লাইন যোগ করুন যা এজেন্টকে উত্তর দেওয়ার আগে সেই টুলটি কল করার নির্দেশ দেবে।

একই প্রশ্নের জন্য প্রতিবার ভিন্ন খরচ হয় কেন?

কারণ মডেলটি কতগুলো ধাপ সম্পন্ন করবে তা নিজেই নির্ধারণ করে। প্রতিটি ইটারেশনে এখন পর্যন্ত হওয়া পুরো কথোপকথন পুনরায় পাঠানো হয়, যার মধ্যে পূর্ববর্তী টুলের আউটপুটও থাকে। তাই যে রানটি চারটি ইটারেশন নেয়, তার খরচ একটি সিঙ্গেল কলের চার গুণের চেয়ে অনেক বেশি হয়। Max Iterations হলো এর সর্বোচ্চ সীমা এবং Return Intermediate Steps আপনাকে দেখাবে একটি নির্দিষ্ট রান প্রকৃতপক্ষে কতগুলো ধাপ ব্যবহার করেছে।

আমার মেমোরি এডিটরে কাজ করে কিন্তু প্রোডাকশনে কাজ করে না। কী পরিবর্তন হয়েছে?

ইনস্ট্যান্সটি কিউ মোডে চলছে কি না তা পরীক্ষা করুন। Simple Memory ওয়ার্কফ্লোর নিজস্ব এক্সিকিউশন ডেটাতে হিস্ট্রি জমা রাখে, যা আলাদা ওয়ার্কার প্রসেসে হস্তান্তর করার সময় টিকে থাকে না, তাই একটি সক্রিয় প্রোডাকশন ওয়ার্কফ্লোতে এটি হারিয়ে যায়। এর পরিবর্তে Postgres Chat Memory সাব-নোড ব্যবহার করুন, যা সমস্ত ওয়ার্কারের শেয়ার করা ডেটাবেসে হিস্ট্রি সংরক্ষণ করে।