SSD Nodes Learn 8GB RAM — $66/שנה
מדריכים Matt Connorמאת Matt Connor · עודכן 2026-08-01

איך לבנות סוכן AI של n8n בשרת VPS פרטי

מדריך מעשי לבניית סוכן AI עובד ב-n8n: צומת AI Agent, הרשאת Claude, כלי HTTP Request, זיכרון, טריגר והגדרות שמגבילות את העלות.

מהו סוכן AI של n8n ובמה הוא שונה משרשרת

סוכן AI של n8n הוא צומת AI Agent יחיד שמחוברים אליו צמתי משנה: מודל צ'אט אחד, כלי אחד או יותר וזיכרון אופציונלי. מגדירים יעד בשפה טבעית, והמודל מחליט לאילו כלים לקרוא ובאיזה סדר, עד שהוא יכול להשיב. כל מה שמופיע בהמשך הוא ההגדרה שסביב רעיון יחיד זה.

שרשרת פועלת בכיוון ההפוך. ב-Basic LLM Chain אתם קובעים את השלבים, והמודל רק משלים את הטקסט. בסוכן המודל קובע את השלבים, ולכן אותה שאלה עשויה לעלות קריאה אחת למודל היום ותשע קריאות מחר. ההבדל היחיד הזה קובע כל הגדרה במדריך זה.

ההנחה היא ש- n8n כבר פועל מאחורי HTTPS במחשב שבשליטתכם. אם לא, התחילו במדריך אירוח עצמי של n8n באמצעות Docker עם אישור אמיתי, משום שמפתח ה-API שאתם עומדים לשמור דורש את גיבוי מפתח ההצפנה שעליו המדריך מתעקש. לדפוסים שאינם מבוססי סוכנים, כגון מסכמי webhook ומסווגים מתוזמנים, ראו דפוסי תהליכי עבודה עם Claude ו-n8n.

בדקו את הגרסה שלכם לפני שאתם מסתמכים על שמות השדות המופיעים כאן, משום ש-n8n משנה לעיתים קרובות את צומתי ה-AI.

docker compose exec n8n n8n --version

השמות במדריך זה תואמים לגרסה היציבה הנוכחית של n8n נכון ליולי 2026. החל מגרסה 1.82.0, כל צומת AI Agent פועל כ-Tools Agent, ולכן תפריט הבחירה הישן של סוג הסוכן כבר אינו קיים.

שלב 1: בחירת הטריגר

לסוכן שיחה, הוסף צומת Chat Trigger. השאר את האפשרות Make Chat Publicly Available כבויה במהלך הבנייה, כדי שרק חלונית השיחה של העורך תוכל לגשת אליו. הפעל אותה לאחר שהסוכן מוכן ולאחר שהחלטת על שיטת האימות.

הצומת Chat Trigger מוסר לסוכן שדה בשם chatInput. השם הזה חשוב בשלב 3, ושגיאה בשם השדה היא הכשל הנפוץ ביותר בניסיון הראשון.

לסוכן שפועל ללא השגחה, השתמש בצומת Schedule Trigger או Webhook. אף אחד מהם אינו יוצר את chatInput, ולכן עליך לכתוב את ההנחיה בעצמך.

שלב 2: פרטי הכניסה למודל

גררו צומת AI Agent אל משטח העבודה. n8n יציג מיד מחבר Chat Model ריק מתחת לצומת. חברו אליו תת-צומת Anthropic Chat Model.

צרו את פרטי הכניסה במסוף Anthropic בכתובת platform.claude.com, תחת Settings ולאחר מכן API Keys. המפתח מוצג פעם אחת בלבד. השימוש ב-API מחויב לפי מספר האסימונים ונפרד מכל מינוי Claude.ai, לכן יש להגדיר חיוב בחשבון לפני ההרצה הראשונה.

בחרו את המודל עבור כל סוכן, ולא עבור החברה כולה. סוכן בעל כלי אחד, שמחפש מידע ומדווח עליו, פועל היטב עם Haiku, שמחירו, נכון ל-July 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 ללא תת-צומת של כלי מסרב לפעול. התחילו בכלי אחד, משום שכלי יחיד שפועל מלמד אתכם יותר מארבעה כלים שהוגדרו חלקית.

חברו צומת HTTP Request למחבר Tool של הסוכן. הגדירו אותו בדיוק כפי שהייתם מגדירים צומת HTTP Request רגיל, ולאחר מכן בדקו תחילה את נקודת הקצה מ־shell.

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

אם פקודת curl זו מחזירה שגיאה או דף התחברות מסוג HTML, גם הסוכן ייכשל. הודעת הכשל תיראה כמו בעיה במודל, אף שבפועל מדובר בבעיה בכתובת URL או באימות. תקנו את הבעיה ב־shell, ולא בצומת.

השדה Description של הכלי אינו תיעוד עבור עמיתיכם. זהו המידע היחיד שהמודל קורא כאשר הוא מחליט אם הכלי רלוונטי. כתבו בו תיאור פשוט של הפלט המתקבל: "מחזיר את המצב הנוכחי — פעיל או מושבת — ואת משך זמן ההשבתה של שירות מנוטר אחד, בפורמט JSON."

כדי לאפשר למודל למלא חלק מהבקשה, השתמשו בביטוי $fromAI(). הוא פועל רק בכלים המחוברים לצומת AI Agent, ואינו פועל בכלי Code.

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

הארגומנטים הם key, ולאחר מכן description, type ו־defaultValue האופציונליים. המפתח חייב להכיל בין 1 ל־64 תווים, הכוללים אותיות, ספרות, קווים תחתונים ומקפים. הסוג הוא אחד מ־string, number, boolean או json, וברירת המחדל שלו היא string. קריאה מלאה יותר נראית כך.

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

המפתח הוא רמז, ולא הפניה לנתונים קיימים. $fromAI('service') אינו קורא משום מקום שדה בשם service. הוא אומר למודל: "הפק ערך וקרא לו service", והמודל מחפש ערך מתאים בשיחה, בנתוני הקלט ובתוצאות של כלים אחרים. בזרימת עבודה של צ'אט הוא עשוי פשוט לבקש אותו מהמשתמש.

שלב 5: זיכרון ומדוע הסוכן שוכח

ללא תת-צומת זיכרון, כל הודעה מתחילה ללא הקשר. חברו תת-צומת Simple Memory כדי לשמור את השיחה האחרונה.

לתת-הצומת יש שני פרמטרים. Session Key קובע לאיזו שיחה ההודעה שייכת, ולכן שני משתמשים עם מפתחות שונים מקבלים היסטוריות נפרדות. Context Window Length קובע כמה אינטראקציות קודמות יוזנו מחדש להנחיה.

Context Window Length הוא מדד לעלות לא פחות משהוא מדד לאיכות, משום שכל תור שנשמר נשלח מחדש כטוקני קלט בכל קריאה מאוחרת. חלון בגודל 20 בסוכן שמנהל שיחות רבות גורם לכך שתשלמו על אותן הודעות מוקדמות עשרים פעמים.

Simple Memory אינו פועל ב-workflow ייצור פעיל כאשר n8n פועל במצב תור, משום שההיסטוריה נשמרת בנתונים של ה-workflow עצמו ולא במאגר משותף. במופע שפועל במצב תור, השתמשו במקום זאת בתת-הצומת Postgres Chat Memory והגדירו אותו כך שיפנה למסד נתונים שגם התהליך הראשי וגם ה-workers יכולים לגשת אליו.

שלב 6: הודעת המערכת

פתחו את Options של הסוכן והוסיפו System Message. כאן מציבים את תיאור התפקיד, וזהו הטקסט בעל ההשפעה הגדולה ביותר בתהליך העבודה.

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 אחת, אלא עד 10 קריאות, ובכל אחת מהן נשלחת כל השיחה שהולכת וגדלה כקלט.

הפחיתו את הערך. רוב הסוכנים המשתמשים בכלי יחיד מסיימים בתוך שתי איטרציות, והגבלה של 3 או 4 תורות הופכת לולאה שאינה מסתיימת לכשל ברור שניתן לראות ברשימת ההרצות.

בזמן איתור תקלות, הפעילו את Return Intermediate Steps. הפלט הסופי יכלול את קריאות הכלים שהסוכן ביצע לאורך הדרך. כך ניתן להבדיל בין מצב שבו המודל כלל לא קרא לכלי לבין מצב שבו הכלי החזיר תוצאה שאינה מועילה. השביתו אפשרות זו לפני העברת המערכת לסביבת ייצור, משום שהשלבים האלה הם רעש מיותר עבור משתמש הקצה.

עקבו אחר הרצה מתוך ה-shell.

docker compose logs -f n8n

מניעת הוצאה שקטה של משאבים על-ידי סוכן שאינו מפוקח

בסוכן שמאחורי Chat Trigger יש אדם, והוא עוצר אותו כאשר התשובה נראית שגויה. בסוכן שמאחורי Schedule Trigger אין איש שמפקח עליו. הטיפול המלא מופיע ב-בקרת עלויות של סוכן AI ב-VPS שפועל תמיד. ארבע הגדרות מבצעות כאן את רוב העבודה.

  • הגבילו את Maximum Number of Tokens בתת-הצומת של המודל, כדי שאף תשובה יחידה לא תימשך זמן רב.
  • הגדירו את Max Iterations למספר הקטן ביותר שעדיין משלים את המשימה.
  • שמרו על תגובות כלים קטנות. כלי שמחזיר אובייקט JSON בן 4,000 שורות מכניס את כולו לקריאת המודל הבאה, ולאחר מכן לכל קריאה נוספת באותה הרצה.
  • בדקו אם הסוכן בכלל זקוק לתזמון. משימה שפועלת מדי חמש דקות מופעלת 288 פעמים ביום. יהיו עלויות ההרצה היחידה אשר יהיו, זהו המספר שיש להכפיל בו.

השביתו את ה-workflow במהלך האיטרציות. workflow פעיל עם Schedule Trigger ממשיך לפעול מול הגרסה ש-n8n שמר, וזו אינה תמיד הגרסה שמוצגת על המסך.

FAQ

מדוע צומת AI Agent שלי מסרב לבצע?

צומת AI Agent דורש צומת-משנה של מודל שיחה ולפחות צומת-משנה אחד של כלי. צומת עם מודל אך ללא כלי נכשל לפני שהוא מבצע קריאת API כלשהי. חברו כלי אחד, אפילו כלי פשוט, והפעילו אותו שוב.

הסוכן משיב, אך אינו קורא לכלי שלי. מה הבעיה?

כמעט תמיד הבעיה נמצאת בשדה Description של הכלי. המודל בוחר כלים לפי קריאת התיאורים שלהם, ולכן תיאור כגון "HTTP Request" אינו מסביר לו מתי יש להשתמש בכלי. נסחו מחדש את התיאור כך שיסביר אילו נתונים מתקבלים ובאיזה מצב הכלי שימושי, ולאחר מכן הוסיפו שורה ל-System Message שמורה לסוכן לקרוא לכלי הזה לפני שהוא משיב.

מדוע אותה שאלה עולה סכום שונה בכל הפעלה?

מפני שהמודל קובע את מספר השלבים. בכל איטרציה נשלחת מחדש כל השיחה עד לאותו שלב, כולל הפלטים הקודמים של הכלים. לכן הפעלה שנמשכת ארבע איטרציות עולה הרבה יותר מפי ארבעה מעלות של קריאה יחידה. Max Iterations מגדיר את התקרה למספר זה, ו-Return Intermediate Steps מציג כמה שלבים ההפעלה השתמשה בהם בפועל.

הזיכרון שלי פועל בעורך אך לא בסביבת הייצור. מה השתנה?

בדקו אם המופע פועל במצב תור. Simple Memory שומר היסטוריה בנתוני ההרצה של תהליך העבודה עצמו. נתונים אלה אינם נשמרים כאשר תהליך העבודה מועבר לתהליך worker נפרד, ולכן תהליך עבודה פעיל בסביבת הייצור מאבד את ההיסטוריה. החליפו אותו בצומת-המשנה Postgres Chat Memory, ששומר את ההיסטוריה במסד הנתונים המשותף לכל תהליכי ה-worker.