הרעיון: תכנות, לא כתיבת-פרומפטים
DSPy היא מסגרת-קוד-פתוחה שמציעה גישה שונה-באופן-יסודי לבניית אפליקציות מבוססות-מודל-שפה: במקום לכתוב פרומפט כמחרוזת-טקסט קבועה ולכוונן אותו ידנית בניסוי-וטעייה עד שהוא "עובד", DSPy מבקשת מהמפתח לכתוב קוד-פייתון רגיל שמתאר מה הוא רוצה להשיג — ואז "לאמן" את הצינור עצמו לבחור את הפרומפטים והדוגמאות-המנחות הטובות-ביותר, אוטומטית, מול מדד-הצלחה שהמפתח מגדיר. הפרויקט מתאר את עצמו כ"המסגרת לתכנות — ולא לכתיבת-פרומפטים — של מודלי-שפה", ומדגיש שהמטרה היא לאפשר "לכתוב קוד פייתון קומפוזיציוני ולהשתמש ב-DSPy כדי ללמד את מודל-השפה לספק תוצרים איכותיים" — במקום להסתמך על ניסוח-פרומפט שביר שעלול להפסיק "לעבוד" ברגע שמחליפים מודל. הבעיה שהגישה הזאת פותרת מוכרת לכל מי שעבד עם מודלי-שפה בפועל: פרומפט שכוונן בקפידה ועבד היטב מול מודל אחד מתחיל, לעיתים קרובות, להתנהג אחרת ברגע שמחליפים אותו בגרסה חדשה של אותו מודל, או במודל של ספק אחר — ואז צריך לכוונן הכול מחדש, ידנית, מהתחלה. DSPy מנסה להפוך את תהליך-הכוונון-מחדש הזה לאוטומטי.
מקור: סטנפורד, אוקטובר 2023
המסגרת הוצגה במאמר אקדמי בשם "DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines", שהוגש לפרסום ב-5 באוקטובר 2023 בידי צוות חוקרים מקבוצת-ה-NLP באוניברסיטת סטנפורד, בהובלת עומר ח'טאב (Omar Khattab) ועם השתתפות כריסטופר פוטס (Christopher Potts) ומתיי זהריה (Matei Zaharia, ממייסדי Databricks). מאגר-הקוד הרשמי, שנמצא בבעלות ארגון stanfordnlp בגיטהאב, מופץ ברישיון MIT וצבר עד ספטמבר 2026 כ-38,200 כוכבים — מספר גבוה יחסית עבור פרויקט שמקורו במחקר אקדמי טהור, ולא בחברה מסחרית. שם-המאמר עצמו — "מהדר" (Compiling) — רומז לאנלוגיה המרכזית שהחוקרים בחרו: בדיוק כמו שמהדר-תוכנה הופך קוד ברמה-גבוהה וקריאה-לאדם לקוד-מכונה יעיל, כך "מהדר-DSPy" הופך תיאור דקלרטיבי של מה שרוצים להשיג לפרומפטים ולדוגמאות-מנחות אופטימליים, בלי שהמפתח יראה בכלל את הפרומפט הסופי שנשלח בפועל למודל.
שלושת יסודות-הליבה: Signatures, Modules, Optimizers
לפי התיעוד הרשמי, DSPy בנויה סביב שלושה מושגי-יסוד. "חתימה" (Signature) היא תיאור דקלרטיבי של מה שצעד מסוים אמור לקבל ולהחזיר (למשל "שאלה בעברית -> תשובה קצרה ומקור") בלי לפרט איך בדיוק לנסח את זה כפרומפט. "מודול" (Module) הוא רכיב מוכן-מראש שמיישם דפוס-חשיבה נפוץ מעל חתימה — Predict לתשובה ישירה, ChainOfThought לחשיבה-שלב-אחר-שלב (ראו הערך שרשרת-מחשבה), או ReAct לתבנית סוכן שמשלבת חשיבה ושימוש-בכלים לסירוגין. וה"אופטימייזר" (Optimizer, שנקרא בעבר גם Teleprompter) הוא האלגוריתם שמריץ את הצינור שוב ושוב מול דוגמאות ומדד-הצלחה, ומכוונן אוטומטית את הפרומפטים, הדוגמאות-לדוגמה, ולעיתים אף את משקלי-המודל עצמו — כדי לשפר את הביצועים בלי שאף אחד יכתוב ידנית "נסה לנסח את זה יותר טוב".
"חתימה" בדוגמה פשוטה
כדי להמחיש איך חתימה נראית בפועל, אפשר לתאר משימת-סיווג פשוטה: מפתח שרוצה לסווג פניות-לקוח לקטגוריות ("תלונה", "שאלה", "בקשת-שירות") יכתוב חתימה שמתארת "טקסט-פנייה -> קטגוריה", בלי לפרט אילו מילים-בדיוק להשתמש בפרומפט, אילו דוגמאות לצרף, או איך לנסח את הבקשה למודל. DSPy לוקחת את החתימה הזאת, עוטפת אותה במודול מתאים (Predict, אם רוצים תשובה ישירה, או ChainOfThought אם רוצים שהמודל "יחשוב בקול" לפני שהוא מכריע), ומריצה עליה אופטימייזר מול קבוצת-דוגמאות-מתויגות שהמפתח סיפק. התוצר הסופי — לא קוד שהמפתח כתב בעצמו, אלא פרומפט שנוצר אוטומטית ונבדק אמפירית — הוא זה שרץ בפועל בסביבת-הייצור. הגישה הזאת הופכת את "איכות-הפרומפט" לתוצר-בדיק ומדיד, ולא לכישרון-אמנותי שתלוי במפתח-ספציפי שכתב אותו.
למה זה שונה ממסגרת-תזמור כמו לאנגצ'יין או קרו-איי-איי
ההבדל הזה מהותי לעומת מסגרות-תזמור כמו לאנגצ'יין או קרו-איי-איי (ראו הערכים הנפרדים): מסגרות-תזמור עוסקות בעיקר בשאלה "איך מחברים בין כמה צעדים וכלים" — מי פועל מתי, ואיך המידע עובר ביניהם — כאשר תוכן-הפרומפט של כל צעד עדיין נכתב ומכוונן ידנית בידי המפתח. DSPy עוסקת בשאלה שונה: "איך הופכים כל צעד בודד כזה לטוב-יותר, אוטומטית, בלי מגע-יד אנושי חוזר-ונשנה". בפועל, שתי הגישות משלימות זו את זו ולא מתחרות: אפשר לבנות תזמור-רב-שלבי במסגרת כמו לאנגגרף, ולהגדיר כל שלב בודד בתוכו כמודול-DSPy שמתכוונן בעצמו. הבדל-הגישה הזה הוא שהפך את DSPy למסגרת-ייחוס בתחום מצומצם-יותר אך משפיע: אופטימיזציה-אוטומטית של פרומפטים, שהופכת יותר ויותר לחלק סטנדרטי מתהליך-הפיתוח, ולא רק לניסוי-מחקרי.
אימוץ ומגבלות
מכיוון ש-DSPy מיועדת בעיקר למפתחים ולצוותי-מחקר-יישומי, ופחות לקהל-רחב של "מפתח-אפליקציות בממשק-נוחות", אימוצה נמדד בעיקר דרך מדדים טכניים כמו כוכבי-GitHub ופרסומים אקדמיים שמשתמשים בה כבסיס-השוואה — למשל, dspy.Databricks ו-dspy.DatabricksRM, אינטגרציות רשמיות שמאפשרות להריץ אותה מול מודלים ומאחזרי-מידע שמתארחים בפלטפורמת Databricks — ופחות דרך לוגואים של לקוחות-ארגוניים כפי שמפרסמות מסגרות-תזמור מסחריות. המגבלה המרכזית שלה נובעת ישירות מהחוזק שלה: תהליך-האופטימיזציה דורש מדד-הצלחה מדיד ומערך-דוגמאות לאימון — כלומר, היא פחות מתאימה למשימות שקשה להגדיר להן "ציון-הצלחה" ברור, ודורשת השקעה מוקדמת בהכנת-דוגמאות שמסגרות-תזמור פשוטות-יותר לא דורשות.
המחקר סביב הרעיון הזה ממשיך גם היום, לא רק אצל מפתחי-DSPy המקוריים: במאמר GEPA — "Reflective Prompt Evolution Can Outperform Reinforcement Learning", שפורסם ביולי 2025 — הוצג אופטימייזר חדש שמשתמש ברפלקציה-עצמית של מודל-השפה עצמו כדי לשפר פרומפטים בהדרגה, ומדגים תוצאות שעולות, לפי המאמר, על שיטות מבוססות-למידת-חיזוק (Reinforcement Learning) במשימות מסוימות. ההבדל בין אופטימייזר "קלאסי" לאופטימייזר מבוסס-רפלקציה כמו GEPA ממחיש כיוון-התפתחות: אופטימייזרים מוקדמים חיפשו בעיקר איזו קומבינציה של דוגמאות-הדגמה קיימות עובדת הכי טוב, בעוד גישות חדשות יותר משתמשות במודל-השפה עצמו כדי "לבקר" את הפלט שלו ולהציע ניסוחים חדשים — כלומר המודל לא רק מבצע את המשימה אלא גם משתתף בתהליך-השיפור שלה.
רישיון, ממשל-פרויקט, וקהילה
DSPy מופצת ברישיון MIT — רישיון-קוד-פתוח פרמיסיבי, שמאפשר שימוש מסחרי חופשי כמעט-לחלוטין — ונמצאת בבעלות ארגון stanfordnlp בגיטהאב, שממשיך לנהל את הפיתוח כפרויקט-קהילתי-אקדמי, לא כמוצר של חברה מסחרית. עובדה זו מייחדת אותה מרוב שאר המסגרות בסקירה הזאת (קרו-איי-איי, לאנגגרף, Pydantic AI, וטמפורל, למשל, כולן מגובות בחברות-הזנק עם מנגנון-מימון-הוני), ומסבירה חלקית למה DSPy אינה מציעה שכבת-מוצר-מסחרי או שירות-מנוהל משלה: אין בעלים מסחרי-בודד שמעוניין למכור שירות סביבה. במקום זאת, ההרחבה של DSPy לעולם-הייצור מתבצעת בעיקר דרך שיתופי-פעולה עם חברות אחרות — כמו האינטגרציה עם Databricks שתוארה למעלה — ולא דרך מוצר-בשר-ודם שהפרויקט עצמו מוכר.
כשמחליפים מודל: הבדיקה המעשית של הגישה
הדוגמה שממחישה הכי-טוב את ההבטחה המרכזית של DSPy נוגעת בדיוק לרגע שבו מחליפים מודל. אם פרומפט נכתב ונוסח-בעבודת-יד עבור מודל מסוים, ואז מחליפים אותו במודל אחר — אפילו מודל "חזק יותר" באופן כללי — התוצאה עלולה להיות דווקא ירידה באיכות, כי הפרומפט המקורי נוסח בדיוק כדי להתאים לתכונות-ספציפיות (ולפעמים אף לחולשות-ספציפיות) של המודל הישן. עם DSPy, מעבר-מודל אמור להפעיל מחדש את שלב-האופטימיזציה: אותה "חתימה" ואותו "מודול" נשארים ללא-שינוי, אך האופטימייזר מריץ שוב את תהליך-הכוונון מול המודל החדש, ומייצר פרומפטים ודוגמאות-מנחות שמתאימים ספציפית אליו. המאמר המקורי הדגים בדיוק את הדפוס הזה: אותו קוד-DSPy הצליח "לגרום ל-GPT-3.5 ול-llama2-13b-chat, שני מודלים שונים-לגמרי בגודלם וביכולתם, לבנות לעצמם באופן-עצמאי צינורות שמנצחים הנחיה-מבוססת-דוגמאות-רגילה" (Few-Shot Prompting) — בלי שאף אחד כתב פרומפט נפרד לכל אחד מהשניים.
מדוע DSPy נחשבת בכל-זאת שייכת לתחום-הסוכנים
מכיוון שהאתר מסווג DSPy תחת קטגוריית "כלים וסוכנים", ולא, למשל, תחת קטגוריה נפרדת של "הנדסת-פרומפטים", ראוי להסביר במפורש למה: DSPy אינה עוסקת רק בניסוח-מילים בודד, אלא בהגדרת האופן שבו מערכת-AI שלמה — לרוב סוכן, לא שאילתה בודדת — פועלת ומקבלת החלטות לאורך זמן. המודול ReAct שהוזכר למעלה הוא בעצמו תבנית-סוכן מלאה (מחשבה, פעולה, תצפית, ושוב מחשבה — ראו גם הערך שרשרת-מחשבה), ו-DSPy מאפשרת לא רק להריץ תבנית כזו, אלא לשפר אותה אוטומטית לאורך זמן על סמך תוצאות-בפועל. במילים אחרות: היא לא מתחרה בשאלה "איך בונים סוכן", היא עונה על שאלה משלימה — "איך גורמים לסוכן שכבר בנוי להשתפר" — שהיא באותה מידה שאלה של ארכיטקטורת-מערכת, לא רק של ניסוח-טקסט.