יחידה 1 / 12

בינה מלאכותית עבור צוותי תוכנה: מודל עבודה ומגבלות

רווחים:

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

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

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

הערה: מודול זה הוא הדרכה כללית. בתוכנות קריטיות לאבטחה (עיבוד תשלומים, שירותי בריאות, אימות, תשתית קריטית) פלט AI אינו מהווה תחליף לבדיקה ואישור על ידי מהנדס מוסמך. AI הוא עוזר; החותם הוא המהנדס.

מה עושה עוזר קידוד בעצם?

רוב עוזרי הקידוד בנויים על מודל שפה גדול (LLM - בינה מלאכותית מאומנת על כמויות אדירות של טקסט וקוד שמנבא את ה"נתח" הבא בסבירות גבוהה). המודל לא "מבין" את הקוד כמו בן אדם; זה מייצר את ההמשך הסביר ביותר של ההקשר שאתה נותן לו, בהתבסס על הדפוסים שהוא לומד ממאגר עצום של דוגמאות. המנגנון הפשוט לכאורה הזה מניב תוצאות בקיאות באופן מפתיע בפועל - מכיוון שרוב התוכנות מורכבות מתבניות חוזרות: בקשת HTTP, לולאה, בדיקת null, דפוס בדיקה.

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

מפת החוזקות והחולשות

כדי לכוון את הבינה המלאכותית לעבודות הנכונות, יש צורך לדעת היכן היא זוהרת ואיפה היא מועדת. שינון המפה יגרום לך לתהות בכל משימה הבאה, "האם עלי לבצע מיקור חוץ של העבודה הזו ל-AI או לעשות זאת בעצמי?" זה מאפשר לך לענות על השאלה בשניות.

החוזקות שלו הן: יצירת קוד boilerplate, תרגום משפה אחת לאחרת, כתיבת ביטוי רגולרי (regex), תיאור פונקציה, יצירת שלד בדיקה, פירוש הודעת שגיאה, ניסוח תיעוד, הצעת שמות משתנים/פונקציות ושינויים קלים (שיפור מבנה הקוד מבלי לשנות את התנהגותו).

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

סוג משימה

תפקידה של AI

תפקידו של האדם

לייצר לוח/שלד

מייצר טיוטה

מסתגל, חוות דעת

תיאור הקוד

נותן סיכום מהיר

מאמת את החלק הקריטי בקוד

כתיבת מבחנים

קייס מציע

מאשרת כיסוי ודיוק

לוגיקה קריטית לאבטחה

רעיון מועיל

ההחלטה והאחריות מוטלות לחלוטין על בני האדם.

שימוש ב-API/ספרייה

יוצר מדגם

מאמת קיום וגרסה

החלטה אדריכלית

מיני אפשרויות

בוחר ומגן על ידיעת ההקשר

שלב אחר שלב: מחזור עבודה בסיסי

  1. הבהרת המשימה. אם אתה לא יכול לכתוב מה שאתה רוצה במשפט אחד, גם הדגם לא יכול. ככל שאי הוודאות מחלחלת לקלט מוקדם יותר, כך היא גדלה בתפוקה.
  2. תן הקשר. הוסף להודעה את הקוד הרלוונטי, הודעת השגיאה המלאה, גרסת השפה/מסגרת והאילוצים. אל תגיד "תקן את זה", אמור "Python 3.11, FastAPI 0.110; פונקציה זו נותנת שגיאה 500, היא מתפוצצת כאשר גוף הבקשה ריק".
  3. הטלת תפקיד ופורמט. מסגרת כמו "אתה מפתח Go בכיר; רק תן את הקוד ורציונל של שני משפטים" ממקדת את הפלט.
  4. תבקש קטן. חלקו אותו לשלבים ולא לבקשה אחת ענקית; אמת כל שלב בנפרד. שינויים גדולים הם מסוכנים מכיוון שקשה לאמת אותם ונוטים להסתיר שגיאות.
  5. לְאַמֵת. הפעל אותו, בדוק אותו, קרא אותו חזותית. קוד AI לא מאומת הוא "סקיצה", לא "פתרון". זהו השלב הכי לא ניתן למשא ומתן במחזור.

שלושה מיני מארזים

מקרה 1 - החיסכון בזמן הוא אמיתי אך צנוע. כאשר צוות יצר נקודות קצה חדשות של CRUD (צור-קרא-עדכן-מחק) עם AI, זמן הטיוטה הראשון ירד מכ-40 דקות ל-8 דקות. עם זאת, עם סקירה ובדיקה, הזמן הכולל היה 25 דקות; כך שהרווח האמיתי הוא מ-40 ל-25, כ-38%. שיעור זה, הנמדד במקום הציפייה של "האצנו פי 10", הוא רווח בר קיימא.

מקרה 2 - הזיה היא יקרה. מפתח השתמש ב-AI-suggested requests.get_json() הקריאה ללא אימות; לא הייתה שיטה כזו (דווקא response.json()). 20 דקות אבדו כאשר הקוד לא הידור. פשוט "האם השיטה הזו באמת קיימת?" אימות יאפס את ההפסד.

מקרה 3 - הקשר טוב מכפיל את הפלט. עבור אותו באג, מפתח אחד פשוט כתב "אני מקבל שגיאה" והשני הוסיף את מעקב הערימה המלא, הגרסה ודגימת הקלט. האחרון קיבל את הפתרון הנכון בניסיון הראשון; הראשון בילה שלושה סיבובים. ההבדל לא היה בדגם, אלא בקלט.

ארבע תבניות הניתנות להעתקה

הנחית הפעלה רבת עוצמה למטרות כלליות:

תפקיד: אתה מפתח {{language}} מנוסה. משימה: {{what_want}}הקשר:- מסגרת/גרסה: {{framework_and_version}}- אילוצים: {{ביצועים, סגנון, חוקי תלות}}כללים:- אל תשתמש בספרייה/פונקציה שאינה קיימת; אם אינך בטוח, סמן אותו כ"אמת". - ראשית, תן תוכנית קצרה, אחר כך הקוד, ואז 2 משפטי הצדקה. - הפקת קוד עובד הניתן לבדיקה.

כדי לסנן את אי הוודאות בחזרה לתוך המודל:

לפני שתפתור את המשימה למטה, רשום לפחות 3 נקודות שחסרות או לא ברורות לך כשאלות. אל תכתוב קוד לפני שאני מגיב. משימה: {{משימה}}

כדי לבצע בדיקה עצמית של הפלט:

הפקת את הקוד הבא. עכשיו שנה את התפקיד שלך ותבקר את הקוד הזה:- רשום 3 מקרים (מקרים קצה) שאולי לא יעבדו.- האם יש ממשקי API/פונקציות שיכולת להמציא? סימן.- תן גרסה מתוקנת.קוד:{{קוד}}

כדי לחלק החלטה לאפשרויות:

הצע 2-3 גישות פתרון עבור {{בעיה}}. לכל אחד: תיאור קצר, פלוס/מינוס, מתי לבחור. תן בצורת טבלה. אל תבחר עבורי; רק להבהיר את האופציה.

הנחיה חלשה / הנחיה חזקה

חלש: "תקן את הבאג בקוד הזה." (איזו שגיאה? איזו שפה? מהי ההתנהגות הצפויה?)
חזק: "Python 3.11 / FastAPI 0.110. נקודת הקצה הבאה מחזירה 500 עם KeyError כאשר גוף הבקשה מתרוקן; אני רוצה שהוא יחזיר הודעה 400 ומשמעותית בגוף ריק. ראשית הסבר את הסיבה, לאחר מכן תן את הפונקציה המתוקנת, ולאחר מכן כתוב מבחן לתרחיש זה. [קוד]"

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

טעויות נפוצות

  • נותן אמון ללא אימות. הטעות הנפוצה והיקרה ביותר. אל תגיד "פתור" עד שהקוד יודר ונבדק.
  • שואל שאלות ללא הקשר. התשובה ללא גרסה, טקסט שגיאה והגבלות היא כללית ולעתים קרובות שגויה.
  • בקשה אחת ענקית. אי היכולת לבקש ולבדוק ייצור של 300 שורות בבת אחת הופך את הטעויות לבלתי נראות.
  • בטעות בביטחון העצמי של הדוגמנית כהוכחה. AI יכול לומר בביטחון משהו לא בסדר; הטון אינו אינדיקטור לדיוק.
  • הדבקה אקראית של סוד החברה. אין להזין מפתחות פרטיים, נתוני לקוחות או קוד מקור פרטי לכלים לא מאושרים (נעמיק בנושא זה ביחידה 10).
טיפ: התייחס לכל פלט בינה מלאכותית כאל "זוהי טיוטה". ההרגל הנפשי היחיד הזה מכבה את רוב הסיכונים שתראו לאורך המודול.

לסיכום

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

משימת יישום

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

רשימת בדיקה

  • [ ] הבנתי ש-LLM מייצר דפוסים, לא "מבין" קוד.
  • [ ] אני יכול להסביר את המושגים של אסימון, חלון הקשר והנחיה במשפט אחד.
  • [ ] אני יכול להבחין בין סוגי משימות שבהן AI חזק וחלש.
  • [ ] אני יודע מהי הזיה והתרופה היחידה היא אימות.
  • [ ] התאמתי את מחזור "הצע, לייצר, לאמת" למשימה שלי.
  • [ ] אני יכול להראות את ההבדל בין הנחיה חזקה להנחיה חלשה בדוגמה קונקרטית.