יחידה 2 / 12

סקריפטים והשלמה אוטומטית

רווחים:

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

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

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

שני מצבי שימוש: השלמה מוטבעת וצ'אט

השלמה מוטבעת נכנסת לפעולה תוך כדי הקלדה בעורך; אתה מקליד חתימת פונקציה או שורת הערה והיא מציעה את השאר. זה מצוין למהירות, אבל יש לו הקשר צר: הוא רואה קוד רק בסביבה הקרובה. לכן זה עובד הכי טוב כשאתה כותב את כוונתך בצורה ברורה בהערה. לדוגמה, הדוא"ל //validate user, throw ValidationError if comment invalid משפר משמעותית את ההצעה למטה.

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

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

שלבים לתרגום כוונה לקוד

  1. הגדר חוזה. מהי התנהגות הקלט, הפלט והשגיאה של הפונקציה? כמו "קבל אימייל, נרמל אם חוקי, זרוק שגיאה אם ​​לא חוקי".
  2. ציין את האילוצים. לא משתמשים בתלות חיצונית? מדריך סגנון ספציפי? האם יש מגבלת ביצועים?
  3. תן דוגמה. צמד קלט-פלט ("ali@x.com → valid, ali@ → error") מעביר את הבנת הכוונה של המודל מחיזוי לדיוק.
  4. בקשו חתיכות קטנות. תפקיד אחד, אחריות אחת. לאחר מכן עברו לשלב הבא.
  5. קרא והפעל את הקוד שנוצר. קומפילציה + ניסיון ידני מהיר הוא שלב ההבטחה הזול ביותר.

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

מקרה 1 - ייצור מונחה הערות מגביר את הדיוק. מפתח ביקש לראשונה פונקציית ניתוח תאריכים עם גוף ריק וקיבל את התוצאה הנכונה ב-3 סיבובים. בניסיון השני, כשהגדרתי את הפונקציה עם הערה של 4 שורות (פורמטים מקובלים, כלל אזור זמן, מצב שגיאה) וביקשתי אותה, הגיע הקוד שעבד בסיבוב הראשון. אותו דגם, אותו יום; ההבדל היה רק ​​בהירות הכוונה.

מקרה 2 - אי ציון גרסה הוא יקר. צוות אחד נאבק עם ה-API המבוסס על callback מדור קודם המחליף את fs.promises בקוד שיוצר עבור Node.js. כשהשורה "Use Node 20, ESM, async/await" נוספה להנחיה, ההפקה עקבה אחרי הפרויקט בפעם הראשונה; הממוצע של 12 דקות שהושקעו בתיקון אופס.

מקרה 3 - רווח אמיתי בקוד ה-boilerplate. למיקרו-שירות נדרשו 6 DTO חדשים (Data Transfer Object - מחלקת נתונים פשוטה הנושאת נתונים בין שכבות) וכללי האימות שלהם. מה שהיה פעם בערך 90 דקות של עבודה ידנית הצטמצם ל-35 דקות כאשר הופק ונבדק על ידי AI; מכיוון שחזרת הקוד גבוהה והתבנית ברורה, AI עבדה באזור היעיל ביותר שלה כאן.

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

יצירת פונקציות מבוסס חוזה:

תפקיד: אתה מפתח {{שפה}} חרוץ. חוזה פונקציה:- שם: {{name}}- קלט: {{סוגים ומשמעותם}}- פלט: {{סוג ומשמעות}}- סטטוס שגיאה: {{מה נזרק/מוחזר כאשר}}אילוצים: {{אין תלות חיצונית / סגנון/ביצועים: {{ללא תלות חיצונית/סגנון /-}}{>דוגמאות {{output_1}}- {{entry_2}} -> {{error_2}}תן חתימה + תוכנית קצרה תחילה, ואז קוד. כתיבת מבחנים, רק לתפקד.

כדי להתאים את הסגנון הקיים (להתאים לבסיס הקוד):

להלן דוגמה לפונקציה מהפרויקט שלנו; למד שמות, טיפול בשגיאות וסגנון הערות כאן. כתוב פונקציה עבור {{new_task}} עם אותו סגנון. דוגמה: {{current_code}}

מהשלד למילוי (בדל → יישום):

מלא את שלד הפונקציות למטה לפי ה-TODOs בהערות. שנה את החתימה וסוג ההחזרה. אל תיצור פונקציית עוזר שלא קיימת; במידת הצורך, הודע לי "דרוש עוזר זה". {{skelet_kod}}

השוואת אפליקציות חלופיות:

תן 2 יישומים שונים עבור {{משימה}}: (א) תעדוף קריאות, (ב) תעדוף ביצועים. רשום משפט אחד "מתי עדיף" מתחת לכל אחד.

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

חלש: "כתוב לי פונקציית אימות דוא"ל."
Strong: "TypeScript 5, ספרייה סטנדרטית בלבד. כתוב isValidEmail(קלט: מחרוזת): בוליאנית. חתוך רווחים, הפוך אותו ללא רגישות לאותיות גדולות, a@b.co חוקי, a@, @b.co, מחרוזת ריקה אינה חוקית. אם אתה מתכוון להשתמש ב-Regex, אל תהיה מורכב מדי; הוסף 2 שורות של הערות."

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

גישה

מתי להשתמש

תשומת לב

השלמה מוטבעת

תוספות קטנות בזרימה

אל תקבל את ההצעה מבלי לקרוא אותה

ייצור מבוסס חוזה בצ'אט

פונקציה/כיתה חדשה

תן דוגמה ומקרה קצה

ייצור לפי מדגם סגנון

הוספה לקוד קיים

בחר קוד לדוגמה נוכחי

מלית שלד

חתימה קבועה, גוף ריק

שינוי החתימה

שכפול קוד ומלכודת התלות

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

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

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

  • לאחר שהחתימה נקבעת על ידי הדגם. אם לא תתקן את סוגי הקלט/פלט, חתימה אחרת מגיעה עם כל ייצור והשילוב נעשה קשה.
  • שלא לדבר על מקרי קצה. קלט ריק, null, מספר שלילי, ערך גדול מאוד - אם אתה לא מציין את אלה, המודל כותב את "הנתיב המאושר", תוך דילוג על קצוות.
  • שילוב ההצעה מבלי לבדוק אותה. קוד שנראה שעובד לא אומר שהוא עובד.
  • קבלת תלות מיותרת. הוספת ספרייה שלמה עבור one-liner יוצרת חוב טכני.
  • חוסר עקביות בסגנון. שמות וטיפול בשגיאות שונים משאר הפרוייקט הופכים את בסיס הקוד לחלק.

לסיכום

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

משימת יישום

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

רשימת בדיקה

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