SSD Nodes Learn Hosting plans →
गाइड Matt Connorलेखक: Matt Connor · अपडेट किया गया: 2026-08-26

n8n AI agent कैसे बनाएं: VPS पर पूरी गाइड

अपने VPS पर n8n AI agent सेटअप करें। इस गाइड में AI Agent node, Claude credentials, HTTP Request tool और मेमोरी सेटिंग्स शामिल हैं। लागत नियंत्रित करने के तरीके जानें।

n8n AI agent क्या है, और यह chain से कैसे अलग है

n8n AI agent एक एकल AI Agent node है जिसके साथ sub-nodes जुड़े होते हैं: एक chat model, एक या अधिक tools, और एक वैकल्पिक memory। आप सामान्य भाषा में एक लक्ष्य निर्धारित करते हैं, और model यह तय करता है कि किन tools को और किस क्रम में call करना है, जब तक कि वह उत्तर न दे दे। नीचे दी गई हर चीज़ उसी एक विचार के इर्द-गिर्द configuration है।

एक chain इसके विपरीत काम करती है। एक Basic LLM Chain में आप steps तय करते हैं और model केवल text भरता है। एक agent में model steps तय करता है, इसलिए एक ही सवाल आज एक model call का खर्च ले सकता है और कल नौ का। यही एकमात्र अंतर इस guide की हर setting को प्रभावित करता है। यदि यह loop आपके लिए n8n feature के बजाय एक विचार के रूप में नया है, तो nodes से इसे assemble करने से पहले इसे एक बार हाथ से लिखना फायदेमंद है, क्योंकि node उस सटीक हिस्से को छिपा देता है जिसके बारे में आप इस guide के बाकी हिस्से में सोचेंगे।

यह माना गया है कि n8n पहले से ही आपके द्वारा नियंत्रित machine पर HTTPS के पीछे चल रहा है। यदि ऐसा नहीं है, तो Docker पर real certificate के साथ n8n को self-host करने से शुरुआत करें, क्योंकि जिस API key को आप store करने वाले हैं, उसे उस encryption-key backup की आवश्यकता है जिस पर वह guide जोर देती है। non-agent patterns, webhook summarizers और scheduled classifiers के लिए, Claude और n8n workflow patterns देखें।

यहाँ किसी भी field name पर भरोसा करने से पहले अपना version जाँच लें, क्योंकि n8n अक्सर AI nodes को बदलता रहता है।

docker compose exec n8n n8n --version

इस guide में दिए गए नाम जुलाई 2026 तक n8n के current stable version के अनुरूप हैं। version 1.82.0 के बाद से हर AI Agent node एक Tools Agent के रूप में चलता है, इसलिए पुराना agent-type dropdown अब मौजूद नहीं है।

चरण 1: ट्रिगर चुनें

Conversational agent के लिए, एक 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 सब-नोड अटैच करें।

platform.claude.com पर Anthropic Console में, Settings और फिर API Keys के अंतर्गत क्रेडेंशियल बनाएं। की (key) केवल एक बार दिखाई जाती है। API का उपयोग प्रति टोकन बिल किया जाता है और यह किसी भी Claude.ai सब्सक्रिप्शन से अलग है, इसलिए पहली बार चलाने से पहले अकाउंट में बिलिंग सेट अप करना आवश्यक है।

मॉडल का चुनाव कंपनी के आधार पर नहीं, बल्कि एजेंट के आधार पर करें। एक ऐसा एजेंट जिसमें केवल एक टूल हो और जो जानकारी खोजकर रिपोर्ट करता हो, वह Haiku पर ठीक से चलता है, जिसकी कीमत जुलाई 2026 तक $1 प्रति मिलियन इनपुट टोकन और $5 प्रति मिलियन आउटपुट टोकन है। जब एजेंट के पास कई टूल्स हों और उसे उनके बीच योजना बनानी हो, तो Sonnet पर स्विच करें। आप जिस विफलता से बच रहे हैं, वह एक सस्ता मॉडल है जो गलत टूल को चार बार कॉल करता है, जिसकी लागत महंगे मॉडल द्वारा सही टूल को एक बार कॉल करने से अधिक हो सकती है।

सब-नोड के विकल्पों में Maximum Number of Tokens सेट करें। यह मॉडल द्वारा उत्पन्न प्रत्येक प्रतिक्रिया की लंबाई को सीमित करता है। यदि इसे बड़े डिफ़ॉल्ट पर छोड़ दिया जाए, तो एक भ्रमित रन बहुत लंबा उत्तर दे सकता है और आपसे उसका शुल्क लिया जा सकता है।

n8n डॉक्स की एक चेतावनी जो सभी को प्रभावित करती है: सब-नोड के अंदर के एक्सप्रेशंस हमेशा पहले इनपुट आइटम के विरुद्ध रिजॉल्व होते हैं, कभी भी प्रति आइटम नहीं। प्रति-आइटम एक्सप्रेशंस को रूट नोड के प्रॉम्प्ट फील्ड्स में रखें।

Step 3: एजेंट को प्राप्त होने वाला प्रॉम्प्ट

AI Agent नोड को खोलें। Prompt पैरामीटर की दो सेटिंग्स होती हैं।

  • Take from previous node automatically एक आने वाले फील्ड की अपेक्षा करता है जिसका नाम chatInput है। Chat Trigger के पीछे यह सही विकल्प है।
  • Define below एक Prompt (User Message) फील्ड दिखाता है जहाँ आप static टेक्स्ट या expression लिख सकते हैं। 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 या प्रमाणीकरण (authentication) की समस्या होगी। इसे नोड में नहीं, शेल पर ठीक करें।

टूल का 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') }}

तर्क (arguments) key हैं, उसके बाद एक वैकल्पिक description, type और defaultValue। कुंजी (key) 1 से 64 वर्णों की होनी चाहिए, जिसमें अक्षर, अंक, अंडरस्कोर और हाइफ़न का उपयोग हो। प्रकार (type) string, number, boolean या json में से एक है, और डिफ़ॉल्ट रूप से string होता है। एक पूर्ण कॉल इस तरह दिखती है।

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

कुंजी एक संकेत है, मौजूदा डेटा का संदर्भ नहीं। $fromAI('service') कहीं से भी service नामक फ़ील्ड को नहीं पढ़ता है। यह मॉडल को बताता है "एक मान उत्पन्न करें और इसे service कहें", और मॉडल इसे खोजने के लिए बातचीत, इनपुट डेटा और अन्य टूल परिणामों को देखता है। चैट वर्कफ़्लो में यह बस उपयोगकर्ता से पूछ सकता है।

वेब सर्च आमतौर पर दूसरा टूल होता है, और चूंकि यह सिर्फ एक और HTTP एंडपॉइंट है, आप इस समान नोड को भुगतान किए गए सर्च API के बजाय अपने स्वयं के SearXNG इंस्टेंस पर पॉइंट कर सकते हैं, बशर्ते आप इसके द्वारा वापस लाए गए प्रत्येक पेज को अविश्वसनीय टेक्स्ट के रूप में मानें जो अब आपके प्रॉम्प्ट के अंदर है।

Step 5: मेमोरी, और एजेंट क्यों भूल जाता है

मेमोरी सब-नोड के बिना, हर मैसेज शून्य से शुरू होता है। हाल की बातचीत को सुरक्षित रखने के लिए एक Simple Memory सब-नोड जोड़ें।

इसके दो पैरामीटर होते हैं। Session Key यह तय करती है कि यह कौन सी बातचीत है, इसलिए अलग-अलग की (keys) वाले दो उपयोगकर्ताओं का इतिहास अलग-अलग रहता है। Context Window Length यह निर्धारित करती है कि पिछली कितनी बातचीत को प्रॉम्प्ट में दोबारा शामिल किया जाएगा।

Context Window Length गुणवत्ता के साथ-साथ लागत को भी नियंत्रित करती है, क्योंकि याद रखा गया हर टर्न बाद की हर कॉल में इनपुट टोकन के रूप में फिर से भेजा जाता है। एक बातूनी एजेंट पर 20 की विंडो का मतलब है कि आप शुरुआती मैसेज के लिए बीस बार भुगतान कर रहे हैं।

जब n8n queue mode में चलता है, तो Simple Memory सक्रिय प्रोडक्शन वर्कफ़्लो में काम नहीं करती है, क्योंकि इतिहास साझा स्टोर के बजाय वर्कफ़्लो के अपने डेटा में रहता है। queue-mode इंस्टेंस पर, इसके बजाय Postgres Chat Memory सब-नोड का उपयोग करें और इसे उस डेटाबेस से कनेक्ट करें जिसे मुख्य प्रोसेस और वर्कर्स दोनों एक्सेस कर सकें।

Step 6: System Message

Agent के Options खोलें और एक System Message जोड़ें। यहाँ job description लिखी जाती है, और यह workflow का सबसे प्रभावशाली हिस्सा है।

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" निर्देश यहाँ वास्तविक कार्य करता है। इसके बिना, एक model जो यह सोचता है कि उसे उत्तर पहले से पता है, वह tool को छोड़ देगा और अपनी memory से उत्तर देगा। जैसे ही आपका infrastructure बदलता है, यह उत्तर आत्मविश्वास के साथ गलत हो सकता है।

एजेंट लूप क्यों करता है, और इसे क्या रोकता है

Options के अंतर्गत Max Iterations भी होता है, जो डिफ़ॉल्ट रूप से 10 पर सेट रहता है। एक इटरेशन का अर्थ है एक मॉडल कॉल और उसके बाद कॉन्टेक्स्ट में वापस भेजा गया एक टूल रिजल्ट। इसलिए, एक सिंगल एजेंट रन केवल एक API कॉल नहीं है, बल्कि इसमें 10 तक कॉल हो सकते हैं, और प्रत्येक कॉल इनपुट के रूप में पूरी बढ़ती हुई बातचीत को साथ लेकर चलता है।

इसे कम करें। अधिकांश सिंगल-टूल एजेंट दो इटरेशन में पूरे हो जाते हैं, और 3 या 4 की सीमा एक रनअवे लूप को एक स्पष्ट विफलता (failure) में बदल देती है जिसे आप एक्जीक्यूशन लिस्ट में देख सकते हैं।

जब आप डीबगिंग कर रहे हों, तो Return Intermediate Steps को ऑन करें। इसके बाद अंतिम आउटपुट में वे टूल कॉल शामिल हो जाते हैं जो एजेंट ने प्रक्रिया के दौरान किए थे। इसी से आप यह पता लगा सकते हैं कि "मॉडल ने कभी टूल कॉल नहीं किया" और "टूल ने कुछ भी उपयोगी रिटर्न नहीं किया" के बीच क्या अंतर है। लाइव जाने से पहले इसे वापस ऑफ कर दें, क्योंकि एंड-यूज़र के लिए ये स्टेप्स अनावश्यक जानकारी (noise) होते हैं।

शेल से रन होते हुए देखें।

docker compose logs -f n8n

अनअटेंडेड एजेंट को चुपचाप खर्च करने से रोकना

Chat Trigger के पीछे चलने वाले agent पर एक व्यक्ति निगरानी रखता है और उत्तर गलत लगने पर उसे रोक देता है। Schedule Trigger के पीछे चलने वाले agent पर निगरानी रखने वाला कोई नहीं होता। यहां आप licence spend के बजाय model spend की निगरानी कर रहे हैं, क्योंकि agent, tool और memory nodes सभी free self-hosted edition में काम करते हैं, और जिन features के लिए paid key की जरूरत होती है, वे अधिकतर team और governance से जुड़े होते हैं। इसका पूरा विवरण हमेशा चालू VPS पर AI agent की cost control में दिया गया है। यहां अधिकतर काम चार settings से हो जाता है।

  • मॉडल सब-नोड पर Maximum Number of Tokens की सीमा तय करें, ताकि कोई भी एक रिस्पॉन्स बहुत लंबा न हो।
  • Max Iterations को उस न्यूनतम संख्या पर सेट करें जो अभी भी कार्य को पूरा कर सके।
  • टूल रिस्पॉन्स को छोटा रखें। एक टूल जो 4,000-लाइन का JSON blob लौटाता है, वह उस पूरे डेटा को अगली मॉडल कॉल में डाल देता है, और फिर उसी रन में उसके बाद की हर कॉल में भी।
  • यह पूछें कि क्या एजेंट को वास्तव में शेड्यूल की आवश्यकता है। हर पाँच मिनट में चलने वाला जॉब दिन में 288 बार चलता है। एक रन की जो भी लागत है, उसे ही आप गुणा करते हैं।

जब आप इटरेशन (iterate) कर रहे हों, तो वर्कफ़्लो को डीएक्टिवेट कर दें। Schedule Trigger वाला एक सक्रिय वर्कफ़्लो n8n द्वारा सेव किए गए वर्शन के आधार पर चलता रहता है, जो हमेशा आपकी स्क्रीन पर मौजूद वर्शन नहीं होता है।

FAQ

AI Agent node execute क्यों नहीं हो रहा है?

AI Agent node के लिए एक chat model sub-node और कम से कम एक tool sub-node की आवश्यकता होती है। यदि node में model तो है लेकिन कोई tool नहीं है, तो वह किसी भी API call से पहले ही fail हो जाएगा। एक tool जोड़ें, भले ही वह बहुत साधारण हो, और इसे दोबारा run करें।

Agent जवाब तो देता है, लेकिन वह मेरे tool को कभी call नहीं करता। क्या समस्या है?

इसका कारण लगभग हमेशा tool का Description field होता है। model इन descriptions को पढ़कर ही tool चुनता है, इसलिए "HTTP Request" जैसा description उसे यह नहीं बताता कि tool का उपयोग कब करना है। इसे फिर से लिखें ताकि यह स्पष्ट हो सके कि कौन सा data वापस आता है और यह किस स्थिति में उपयोगी है, फिर System Message में एक line जोड़ें जो agent को जवाब देने से पहले उस tool को call करने का निर्देश दे।

एक ही सवाल की लागत हर बार अलग क्यों होती है?

क्योंकि model steps की संख्या खुद चुनता है। हर iteration में अब तक की पूरी बातचीत दोबारा भेजी जाती है, जिसमें पिछले tool का output भी शामिल होता है, इसलिए चार iterations वाले run की लागत एक single call से चार गुना से कहीं अधिक हो सकती है। Max Iterations इसकी अधिकतम सीमा तय करता है, और Return Intermediate Steps आपको यह दिखाता है कि किसी विशेष run में वास्तव में कितने steps का उपयोग किया गया।

मेरी memory editor में काम करती है लेकिन production में नहीं। क्या बदला है?

जाँचें कि क्या instance queue mode में चल रहा है। Simple Memory इतिहास को workflow के अपने execution data में store करती है, जो एक अलग worker process को सौंपे जाने पर सुरक्षित नहीं रहता, इसलिए एक active production workflow इसे खो देता है। इसके बजाय Postgres Chat Memory sub-node का उपयोग करें, जो इतिहास को उस database में रखता है जिसे सभी workers share करते हैं।