Github Copilot Advanced – מעבדה מתקדמת

תוכן עניינים

תרגול זה מרחיב את היכולות שלכם לעבוד עם GitHub Copilot וכלים דומים, ומתמקד בטכניקות של הנדסת פרומפטים (Prompt Engineering). נלמד כיצד לנסח הנחיות מדויקות יותר כדי לקבל תוצאות טובות יותר, וכיצד להתאים אישית את ההתנהגות של Copilot באמצעות הוראות מערכת.
 
הבנה של טכניקות אלו תאפשר לכם להפוך את ה-AI משותף פסיבי לכלי אקטיבי שמבין את ההקשר, חושב על בעיות מראש, ומספק קוד איכותי יותר שתואם את סגנון העבודה שלכם. התרגול אינו דורש ידע מוקדם בהנדסת פרומפטים, רק היכרות בסיסית עם סביבת VS Code ו-Copilot.
 
הדוגמאות בתרגול הזה מופיעות ב-Python, אך הן אגנוסטיות לחלוטין לשפת הפיתוח. אם אתם מעדיפים לעבוד בשפה אחרת – ניתן להשתמש ב Chat Ask (או כל Chat app חיצוני) על מנת לתרגם כל קטע קוד בקלות לשפת הנדרשת.

 

שימו לב – תרגול זה מובנה מאוד והוא מהווה בסיס למחקר וללימוד דרך ״לכלוך הידיים״ בהמשך הדרך. חשוב להכיר את החלקים השונים בתרגול ובמערכת. עם זאת – בכל פרק וסעיף, הרגישו חופשי לחקור יותר לעומק ולסקור גם מושגים שונים ואפשרויות שונות שלא הוזכרו במפורש. נתקעתם? לא נורא – חזרו להוראות המקוריות, ותמיד אפשר להתחיל פרויקט חדש ונקי, ולהתנסות מראש הפרק הנוכחי.

 

בהצלחה!


1. תרגול AiDD Prompt Engineering

טכניקות של הנדסת פרומפטים עוזרות למנוע תשובות גנריות ולהגדיל דיוק. בפרק זה נכתוב פרומפטים לא טובים ונשפר אותם.

 

  • תרגיל 1 – פרומפט גנרי:
    • פתחו Chat Ask וכתבו:
      Create code that calculates an employee's salary.

       

    • Copilot כנראה ישאל באיזו שפה מדובר, וינחש פיתרון פשוט.
    • כעת נשפר:
      • תנו הקשר: "אפליקציית קונסולה" או "שפת Python" (או אם אתם על פרויקט פתוח – הוסיפו הקשר מובנה או משתתפים @workspace)
      • הגדירו מטרה ברורה: ״פונקציה שמקבלת שעות עבודה ושכר לשעה ומחזירה את השכר הכולל.״
      • פורמט התשובה: בקשו רק קוד בלי הסברים.שיפור הפרומפט: כעת נסחו מחדש על פי הכללים הבאים:
      • לדוגמא נסחו:
        Python console function that takes the number of hours and hourly wage, calculates the total salary, and returns the value. Return code only, no explanation.
    • השוו את הקוד שקיבלתם לקוד מהפרומפט המקורי.
  • תרגיל 2 – פירוק משימות:
    • בקשו מ-Copilot משימה גדולה באחת השפות:
      Build a system that manages a list of students, calculates averages, and prints outstanding students.

       

    • התוצאה תהיה כללית. עכשיו חלקו את המשימה:
      • תכננו מבנה מחלקות לרשימת תלמידים ולממוצעים.
      • כתבו פונקציה שמוסיפה תלמיד עם שם וציון.
      • כתבו פונקציה שמחשבת ממוצע וציון מקסימום.
      • כתבו פונקציה שמחזירה רשימה של תלמידים שמעל ציון מסוים.

       

    • עבדו על כל חלק בנפרד והתרשמו מרמת הדיוק.
  • תרגיל 3 – שימוש בשפה פשוטה:
    • כתבו תחילה:
      Implement an augmented array with a bidirectional logical list.

       

    • Copilot ייתקע או יחזיר משהו לא רלוונטי. עכשיו כתבו:
      Build a class that stores data in a list and provides functions to add, remove, and search for items.

       

    • Copilot יחזור עם קוד ברור יותר.
  • תרגיל 4 – בקשת פורמט:
    • בקשו:
      Explain what bubble sort is.

       

    • תקבלו הסבר כללי. עכשיו בקשו:
      Explain what bubble sort is and show the algorithm as a function in C# only.

       

    • Copilot יחזור עם דוגמת קוד בהתאם.

2. טכניקות מתקדמות להנדסת פרומפטים (Prompt Engineering)

בפרק זה נתנסה בארבע טכניקות מרכזיות לשיפור איכות התשובות שנקבל מ-Copilot Chat.

שימו לב – הטכניקות אינן ייחודיות ל-Copilot ויכולות לשמש אתכם בעבודה עם כל מודל שפה גדול (LLM). חשוב מאוד להתרגל ולהכיר טכניקות בתקשורת עם מודלי שפה, בעיקר בהמשך – בגיוס והכשרה של סוכני Ai.

 

  • תרגיל 1 – Reflection (רפלקציה)

    • בטכניקה זו, אנו גורמים למודל לבקר את הקוד שהוא עצמו יצר.
    • פתחו את חלונית הצ'אט של Copilot ובקשו ממנו לכתוב פונקציה למשימה שעלולות להיות בה בעיות נסתרות, למשל, קריאת קובץ גדול. השתמשו בפרומפט הבא:
      Write a Python function that takes a file path as input and returns the longest line in that file.

       

    • בחנו את הקוד שהתקבל. סביר להניח שהפונקציה הראשונית תקרא את כל הקובץ לזיכרון (למשל, באמצעות file.readlines()), מה שיכול לגרום לקריסה בקבצים גדולים מאוד.
    • כעת, באותו הצ'אט, בקשו מהמודל לבצע רפלקציה על הקוד שהוא עצמו כתב:
      Please review the function you just wrote. Critically analyze it for potential issues like performance, memory , security, etc. especially with very large files, and for error handling (e.g., if the file doesn't exist). Then, provide a more robust and memory-efficient version.

       

    • שימו לב כיצד המודל מזהה את חולשות הקוד של עצמו – הוא יציין את בעיית הזיכרון ויציע גרסה משופרת שקוראת את הקובץ שורה אחר שורה (איטרטיבית), ומוסיף טיפול בשגיאות כמו קובץ שלא נמצא (FileNotFoundError).
  • תרגיל 2 – Pre-Debugging (חשיבה על באגים מראש)

    • נשתמש באותה חלונית צ'אט.
    • המטרה שלנו היא לבקש מהמודל לכתוב פונקציה, אך לפני כן – נבקש ממנו לחשוב על הבעיות שעלולות לצוץ.
    • השתמשו בפרומפט הבא, המנחה את המודל לחשוב על מקרי קצה לפני כתיבת הקוד:
      Before you write the code, please list potential edge cases for a Python function that finds the second largest number in a list. After listing them, provide the code for the function that handles these cases.

       

    • נתחו את התשובה: שימו לב שהמודל פרט מקרים כמו רשימה ריקה, רשימה עם אלמנט אחד, או רשימה עם אלמנטים כפולים, ורק לאחר מכן סיפק קוד שמתמודד איתם.
  • תרגיל 3 – Chain of Thought (שרשרת מחשבה)

    • טכניקה זו שימושית במיוחד לבעיות מורכבות. אנו מבקשים מהמודל "לחשוב בקול רם" צעד אחר צעד.
    • העלו תרחיש מורכב יחסית. לדוגמא, נרצה לכתוב פונקציה שמקבלת מחרוזת, מוודאת שהיא פלינדרום, ומתעלמת מסימני פיסוק וגודל אותיות.
    • השתמשו בפרומפט הבא:
      I need a Python function to check if a string is a palindrome, ignoring case and punctuation. Please think step-by-step to outline your logic before writing the final function.

       

    • שימו לב שהתשובה מחולקת לשני חלקים: תחילה, תיאור שלבי החשיבה (להמיר לאותיות קטנות, להסיר תווים לא רצויים, להשוות למחרוזת ההפוכה), ורק אז הקוד עצמו.
  • תרגיל 4 – Role Prompting (הנחיית תפקיד)

    • בטכניקה זו, אנו מעניקים ל-Copilot "אישיות" או תפקיד של מומחה בתחום מסוים.
    • פתחו קובץ JavaScript והדביקו את הקוד הבא, המכיל פרצת אבטחה מסוג XSS (Cross-Site Scripting):
      
      function displayComment(userComment) {
        const commentDiv = document.getElementById('comment-section');
        commentDiv.innerHTML = userComment;
      }
                      
    • בצ'אט, בקשו מ-Copilot לגלם דמות של מומחה אבטחת סייבר ולסרוק את הקוד:
      Act as a senior cybersecurity analyst. Review the following JavaScript code snippet for security vulnerabilities, especially XSS, and explain why it is vulnerable. Then, provide a secure version of the code.

       

    • ראו כיצד המודל מסביר את הסכנה בשימוש ב-innerHTML ומציע חלופה בטוחה יותר באמצעות textContent.

  • 3. התאמה אישית עם Custom Instructions

    בפרק זה נלמד כיצד להגדיר "הוראות מערכת" (Custom Instructions) עבור GitHub Copilot Chat כדי להתאים את התגובות שלו לסגנון, לטכנולוגיות ולדרישות הספציפיות שלכם.

     

    1. תרגיל 1 – עבודה ללא הוראות מותאמות

      • הכנה: ודאו שההוראות המותאמות שלכם ריקות – בדקו שהפרוייקט שלכם לא מכיל קובץ בשם copilot-instructions.md וכן שאין הפניה לinstructions בחלון הצ׳אט.
      • בצ'אט של Copilot, בקשו ממנו ליצור פונקציה פשוטה:
        Write a JavaScript function that takes an array of objects and a property name, and returns an array containing only the values of that property.

         

      • שימו לב לסגנון הקוד שהתקבל (למשל, האם זו פונקציה רגילה או פונקציית חץ? האם יש תיעוד?).
      • כעת, בקשו ממנו להוסיף תיעוד:
        Add JSDoc comments to the previous function.

         

      • שמרו את התוצאה בצד להשוואה.
    2. תרגיל 2 – הגדרת Custom Instructions ובדיקה חוזרת

      • כעת בהגדרות ה לCopilot (גלגל השיניים בראש חלונית הצ׳אט) בחרו ב instructions.
      • מתפריט הבחירה – בחרו ב New Instructions File
      • כאשר תישאלו על שם הקובץ – הכניסו: copilot-instructions.md
      • שימו לב שנוצר לכם קובץ כזה תחת תיקיית משנה .github/instructions בפרויקט. הוא עשוי כבר לכלול טקסט ראשוני – מחקו אותו.
      • הדביקו בתיבת הטקסט את ההוראות הבאות:
        
        1. Always write JavaScript code using ES6 arrow function syntax.
        2. All functions must include JSDoc comments explaining the parameters, what the function does, and the return value.
        3. Prioritize functional programming concepts like map, filter, and reduce over traditional loops where appropriate.
        4. Keep the code clean, readable, and concise.
                        
      • שמרו את ההוראות.
      • פתחו צ'אט חדש (כדי להתחיל סשן נקי) וחזרו על הבקשה המקורית מהתרגיל הקודם:
        Write a JavaScript function that takes an array of objects and a property name, and returns an array containing only the values of that property.

         

      • השוו את התוצאה החדשה לתוצאה הקודמת. שימו לב שהפעם הפונקציה נכתבה כפונקציית חץ, משתמשת במתודת map, והתיעוד מסוג JSDoc נכלל אוטומטית, ללא צורך בבקשה נוספת.

4. תרגול פתוח

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

 

  1. שילוב טכניקות: נסו לשלב שתי טכניקות או יותר בפרומפט אחד. לדוגמה, בקשו מ-Copilot לגלם דמות (Role Prompting) ולחשוב צעד-אחר-צעד (Chain of Thought) כדי לפתור בעיה מורכבת בתחום המומחיות שהגדרתם לו.
  2. בניית "פרסונה" מורכבת: כתבו Custom Instructions מפורטות לפרויקט אמיתי שלכם. הגדירו את שם הפרויקט, הטכנולוגיות המרכזיות (למשל, "React עם TypeScript ו-Tailwind CSS"), סגנון כתיבת קוד (למשל, "השתמש תמיד ב-async/await במקום ב-Promises"), וכלל אצבע כמו "לעולם אל תשתמש במשתני var". ראו כיצד זה משפיע על איכות ההצעות.
  3. רפלקציה על קוד קיים: קחו קטע קוד שאתם כתבתם לאחרונה. השתמשו בטכניקת ה-Reflection ובקשו מ-Copilot למצוא בו באגים, להציע שיפורי ביצועים, או דרכים להפוך אותו לקריא יותר.
  4. אתגרו את המודל: נסו לתת ל-Copilot משימות שאתם יודעים שיש להן מקרי קצה בעייתיים (למשל, עבודה עם אזורי זמן, טיפול במטבעות שונים, ניתוח קלט לא צפוי ממשתמש). השתמשו בטכניקת Pre-Debugging כדי לראות אם הוא מזהה את הבעיות מראש.

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