פיתוח מערכת ניהול גרסאות לפרומפטים של LLM

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

ניהול גרסאות של פרומפטים: מה נשבר בלי בקרת גרסאות

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

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

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

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

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

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

מה נותן מאגר גרסאות: חזרה אחורה, יציבות, יכולת ניתוח

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

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

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

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

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

ניהול גרסאות של פרומפטים: השוואת גישות ומצבי עבודה

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

הפרקטיקה בתחום מרוכזת במדריך פתוח Prompt Engineering Guide — אנו נעזרים בו, אך מתאימים את הסכמה לסטאק ולתהליכים שלכם.

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

מצבי פרסום וסביבת בדיקות

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

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

הטמעה: מביקורת תבניות ועד תקנון פרסום

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

  1. ביקורת תבניות קיימות. אוספים פרומפטים מכל מקום: מהקוד, מהגדרות שירותים, מטבלאות ומהתכתבויות. מסירים כפילויות, מסמנים גרסאות שאף אחד כבר לא מתחזק, ובונים מפה — איזו תבנית נקראת היכן ומה יישבר בעת עריכתה.
  2. סכמת הסתעפות. מסכימים שעריכות ניסיוניות חיות בנפרד מענף העבודה, וכל שינוי מקבל תגית גרסה סמנטית. הכלל פשוט: עריכת ניסוח היא גרסה חדשה, ולא «תיקנו ישר בפרודקשן».
  3. הגדרת מאגר. פרומפטים נשמרים כקבצים לצד הקוד, יחד עם פרמטרי הקריאה והצמדה לגרסה מסוימת. אז אותה לוגיקה לא מתפזרת בין שלושה שירותים בארבע גרסאות.
  4. בדיקה על סט ייחוס. אוספים מקרים אמיתיים עם תשובות צפויות ומריצים את הגרסה החדשה מול הקודמת: שיעור ההתאמות, סירובים, התנהגות בבקשות נדירות. ההחלטה על שחרור מתקבלת לפי נתונים, ולא לפי תחושה ש«השתפר».
  5. תקנון פרסום. קובעים מי מוציא גרסה ומה חובה לשם כך: בדיקות, ביקורת שינויים, תגית ורישום ביומן. את התקנון משאירים קצר — תקנון ארוך עוקפים.
  6. תוכנית חזרה אחורה. המצביע לגרסה הפעילה מוחלף בלי בנייה מחדש, לכן החזרה לקודמת דורשת פעולה אחת. מתארים מראש את תנאי החזרה: ירידה במדדי איכות או עלייה בשיעור הסירובים.

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

מה מועבר לידיים שלכם: סכמות, מדיניות גישה, תקנונים

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

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

מקרה בוחן: פערים בין סביבות הוסרו, חזרה אחורה בדקות

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

מדידות בשבועיים שלפני תחילת העבודה: שיעור הפערים בין סביבת הבדיקות למסלול העבודה — כ-30%, חזרה לגרסה קודמת — 40 דקות של השוואה ידנית, עריכות שנויות במחלוקת — 8-10 בחודש.

מה שינו

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

מה קרה בסופו של דבר

שיעור הפערים בין סביבת הבדיקות למסלול העבודה ירד מתחת ל-3% — אלה מקרים בודדים שתופס השוואה אוטומטית לפני שחרור. חזרה לגרסה קודמת לוקחת כשתי דקות: הגרסה נבחרת מההיסטוריה ומיושמת בפקודה אחת, בלי שחזור ידני של טקסט.

עריכות שנויות במחלוקת נעלמו כסוג — לכל שינוי יש מחבר ונימוק, לכן השאלה «מי שינה את הניסוח» נסגרת בהפניה לרישום ביומן.

במה שונה שחרור מנוהל של תבניות מעריכות על מסלול חי

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

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

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

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

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

ספקות טכניים: שאלות נפוצות לפני התחלה

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

האם יהיה צורך לשכתב את קוד הקריאות?

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

מה לעשות עם היסטוריית השינויים שכבר הצטברה?

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

איך מספר צוותים עובדים במאגר אחד?

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

איזו אפשרות תבנית לבחור?

טקסט חופשי מהיר יותר בהתחלה, אבל לא בודק השמות. תבנית עם משתנים מאלצת לתאר שדות קלט, אבל פרמטר שהוחמץ נתפס לפני ההרצה. בפועל לוקחים שילוב: בקשות קצרות בטקסט, תרחישים קריטיים — בתבנית.

מהם הסיכונים בהטמעה?

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

נדון במשימה ונשלח הערכה עם תוכנית עבודה

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

לצורך ההערכה יידרש:

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

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

תארו את המשימה בצורה חופשית — נחזור עם הערכה ותוכנית עבודה.