מעבדת n8n – שכבת Ai (בלוק LLM Chain)

תוכן עניינים

הערה: תרגול זה ממשיך את ה-Workflow הקודם שבניתם (כולל איחוד הקלט מ-Chat Trigger ומ-Telegram Trigger).
 
אם טרם הקמתם את תהליך האוטומציה הראשוני וחיברתם אותו לבוט טלגרם – תוכלו לעשות זאת כאן.
 
כמו״כ, מעבדה זו דורשת חשבון מפתח לשימוש במודל שפה של OpenAI. אם טרם פתחתם חשבון מפתח וקיבלתם API Key, תוכלו לעשות זאת כאן.
 
כעת, נשדרג את הליבה העסקית של הסוכן על ידי הוספת יכולות AI מתקדמות לחילוץ מידע קשיח מקלט משתנה וליצירת תוכן מנוסח ומותאם אישית.


1. הוספת AI – חילוץ דאטה מקלט משתנה

עד כה, השתמשנו בבלוק Code כדי לפרק את קלט המשתמש (עיר ומייל) שהופרד באמצעות פסיק. בשיטה זו יש שתי מגבלות עיקריות: היא דורשת שהקלט יהיה מובנה בצורה מדויקת, ושינויים קלים בניסוח מצד המשתמש יובילו לשגיאה. כעת נחליף את הבלוק Code בבלוק Basic LLM Chain כדי לאפשר גמישות רבה יותר בזיהוי הכוונות והנתונים מהמשתמש.

 

  1. משימה 1 – הסרת הבלוק הקוד והחלפתו ב-AI
     

    • נתקו את החיבור מהבלוק 'Raw Input' אל בלוק ה Code.
    • במקומו, חברו את הבלוק 'Raw Input' אל בלוק חדש מסוג Basic LLM Chain (תחת קטגוריית AI).
    • ב-Basic LLM Chain, תחת Model, בחרו מודל מסוג OpenAI והגדירו אותו עם Credential מתאים תוך שימוש ב API Key שקיבלתם מ OpenAI.
    • בתוך הגדרות המודל, תחת שדה Model בחרו באפשרות gpt-4.1-mini.
    • הגדרת הפרומפט והפלט המובנה:
       

      • חזרו לטופס הגדרות הבלוק Basic LLM Chain, ותחת שדה Source for Prompt (User Message) בחרו באפשרות Define below.
      • בפרומפט (Prompt), הניחו את הנתון הדינמי query מהצעד הקודם בשרשרת.
      • הפעילו את האפשרות Require Specific Output Format. בתחתית חלון ההגדרות נוספה כניסת פרמטר חדשה בשם 'Output Parser'. הקליקו עליה ובחרו להוסיף ״מאפיין פלט״ (Parser) מסוג Structured Output Parser.
      • בהגדרות הפארסר – בחרו Schema TypeGenerate from JSON Example ובשדה JSON Example שנפתח, הכניסו:
         

        
        {
        	"city": "Jerusalem",
        	"email": ["my.email@gmail.com", "another.email@gmail.com"]
        }
                        

         
        זה מלמד את מודל השפה על מבנה הפלט הדרוש.

      • צאו מהגדרות ה Parser וחזרו להגדרות בלוק ה Basic LLM Chain.
      • תחת Chat Messages לחצו על Add prompt. זו הדרך להוסיף הוראות מערכת למודל. ודאו שסוג הפרומפט הוא System והכניסו את ההודעה הבאה לשדה Message (שימו אותו במצב Expression):
        
        extract 'city' and 'email' from the user prompt and output that as a structured JSON format.
        
        Make sure the city name is always English regardless of the input language.
        
    • חברו את הפלט של ה – Basic LLM Chain אל הבלוק 'Structured Input' (No Operation) שהיה מחובר לבלוק ה – Code הקודם.
    • בדיקה: נתקו זמנית את הבלוק 'Structured Input' מיתר ה-Workflow (על ידי לחיצה על החיבור) והריצו את ה-Workflow עם קלט מגוון דרך הצ'אט או טלגרם, לדוגמא:
       

      היי, תבדוק מה מזג האוויר בחיפה, המייל שלי הוא myname@example.com

      ודאו שהפלט מה-LLM Chain הוא JSON תקין ומחובר כעת ל-'Structured Input'.


2. עיצוב התשובה באמצעות AI – תוכנית הטיול

כעת נשתמש ב-AI כדי לאגד את כל הנתונים שקיבלנו (מזג אוויר וחיפוש Tavily) ולעצב מהם תוכנית טיול קוהרנטית ומנוסחת היטב, המותאמת למזג האוויר.

 

  1. משימה 2 – איסוף הנתונים ל-AI (בלוק Info Aggregator)
     

    • נתקו את החיבור מהבלוק Tavily אל הבלוק 'Build Answer'.
    • חברו את הפלט התקין של Tavily אל בלוק חדש מסוג Set. קראו לו Info Aggregator.
    • בשדה Mode בחרו JSON. זה מאשר לכם להגדיר את כל מבנה הפלט ע״י שימוש בתבנית JSON משלכם.
    • בשדה JSON הכניסו את המבנה הבא, שיאסוף ויכול את כל המידע הדרוש לעיצוב תוכניות-טיול קוהרנטית, ע״י מודל השפה:
      
      {
        "current_weather": {{ $('OpenWeatherMap').item.json }},
        "web_search_results": {{ $json.results }},
        "initial_recommendations": "{{ $json.answer }}"
      }
                      

       
      * התאימו את שמות הבלוקים בביטויים השונים (Expressions) בהתאם לצורך.

    • הערה: בשדות current_weather ו-web_search_results אנו משתמשים באובייקטים המלאים כשדות ב – JSON, לעיתים הגרירה לא מתאפשרת לאובייקט הראשי ונדרש לכתוב את הביטוי בעצמנו.
       
      פרט לכך – שימו לב שבשדה initial_recommendations, אנו מוסיפים גרשיים (""). זה מכיוון שהנתון בו השתמשנו (Answer) הוא מסוג טקסט (String), ולא אוביקט JSON.
  2.  

     

  3. משימה 3 – יצירת תוכנית הטיול המנוסחת (LLM Chain)
     

    • חברו את הבלוק Info Aggregator אל בלוק חדש מסוג Basic LLM Chain.
    • בחרו מודל חזק יותר, כגון gpt-4o (או מקביל), כדי לקבל יכולות ניסוח והסקה גבוהות יותר בהתאמת הטיול למזג האוויר.
    • הגדרת System Prompt מפורט: כדי להגדיר את תפקיד הסוכן ואת כללי הניסוח, הוסיפו לבלוק Prompt מסוג System, ותחת Message הכניסו את הטקסט הבא:
      
      #Role
      You are a tourism agent, specializing in crafting best one-day-trip plans.
      
      #Goal
      Your goal is to craft a trip plan according to the provided information that include: info about the destination, web search results and current weather info.
      
      #Instructions:
      - Keep short and concise
      - Always adapt the activities to the current weather
      - Never suggest activities that are not correlate with the weather
      - Craft your response as a short paragraph with a short list of activities and timing as a summary.
                      

      * פרומפט זה משתמש במבנה של 'Role / Goa l /Instructions' המקובל ב – Prompt Engineering כדי להבטיח תוצאה עקבית.

    • חברו את הבלוק LLM Chain אל בלוק חדש מסוג Set, ומפו בו את שדה הפלט text מהבלוק הקודם, לשדה חדש בשם output. שלב זה נדרש כדי שהתשובה תופיע באופן תקין בממשך הצ׳אט הפנימי של n8n.
    • חברו את הבלוק שיצרתם כעת, אל הבלוק 'Final Answer' (No Operation) שהוספתם בתרגיל הקודם.
    • בדיקה סופית: הריצו את ה-Workflow עם קלט בטקסט חופשי המכיל מידע על יעד הטיול (עיר), וכתובת/ות מייל לשליחה. ודאו כי התשובה המלאה המוצגת בצ'אט היא תוכנית טיול מנוסחת היטב, המשתמשת בפורמט Markdown (כגון כותרות, בולטים) ושולחת את אותה תוכנית במייל.

3. תרגול פתוח ואתגר הרחבה

התהליך שיצרתם מתמודד עם קלט בשפה חופשית, ומנסח הודעת תגובה ומייל כתוכנית-טיול באנגלית, אך אינו תומך בשפות אחרות. כעת, עליכם "ללכלך את הידיים" ולחקור את המערכת על ידי התמודדות עם אתגרים מורכבים יותר:

 

  1. המשימה היא לזהות בתחילת התהליך את שפת הקלט, ולנסח תוכנית טיול באותה שפה, תו״כ שהנתונים הנשלחים ל OpenWeatherMap ול Tavily, נשארים באנגלית.
     
    לצורך כך, עדכנו את הוראות המערכת, ומבנה התשובה של בלוק ה LLM Chain הראשון שבתהליך, והשתמשו בנתון השפה בבלוק ה LLM Chain האחרון, שמנסח את התשובה הסופית.
  2. האתגר השני הוא ליצור תוכנית טיול המותאמת יותר לדרישות המשתמש. נכון לעכשיו השתמשנו במודל השפה כדי לחלץ רק את יעד הטיול, וכתובות המייל למשלוח, אבל הפרומפט המקורי יכול להכיל הרבה יותר מידע על העדפות, גילאים ותחומי עניין.
     
    שנו את התהליך כך שגם המידע החשוב הזה ייכלל בקלט ליצירת התוכנית הסופית. לצורך כך – עבדו עם בלוק ה Basic LLM Chain הראשון והוסיפו שדה נוסף – preferences.

 
בהצלחה!


סיימתם לשדרג את סוכן התיירות שלכם עם יכולות AI מתקדמות. ה-Workflow שלכם כעת גמיש יותר בקבלת קלט מהמשתמש (באמצעות LLM Chain לחילוץ דאטה), והוא מסוגל לייצר פלט עשיר ומותאם אישית על בסיס נתונים חיים (באמצעות LLM Chain שני לעיצוב התשובה).