Zed V0.0.0
יש רעיון שיושב לי בראש כבר כמה שנים. הוא לא עוזב. רק גדל אבל נשאר רחוק.
אני עובד על הפרויקט הזה בצורה כזאת או אחרת כבר מ2023. אולי מלפני, קשה להגיד. מה שאני יודע זה שזו כבר הגרסה השמינית לפחות. שבע פעמים התחלתי, הגעתי למקום שבו הבנתי שהטכנולוגיה פשוט לא שם עדיין, ועצרתי. לא ויתרתי - עצרתי. יש הבדל. בערך. (אולי פרשתי והחלטתי לנטוש פעם פעמיים או ארבע אבל הי בסופו של דבר אני כאן)
עכשיו - אני לא בטוח שהזמן הגיע. אני עדיין לא בטוח שזה אפשרי בכלל. הcontext עדיין אחת המגבלות הכי כואבות. אבל אני במקום שבו שווה לנסות, אז אני מנסה.
כולם אומרים את זה. “זה לא רק צ’אטבוט!” ואז מראים לך צ’אטבוט עם עוד שלוש פונקציות. מגניב! אבל זה לא מה שקורה פה.
המטרה מאוד פשוטה. לבנות ישות דיגיטלית. לא צ'אטבוט. לא "עוזר AI". ובטח שלא עוד wrapper יפה מעל API של OpenAI.
ישות. דבר שחושב לבד, פועל לבד, זוכר, מתפתח, ולומד. במיוחד כשאף אחד לא מדבר איתו. שכשאתה שואל אותו "מה עשית היום?" הוא באמת יכול לענות, כי הוא באמת עשה משהו.
החוק הבסיסי הוא עצמאות. Zed לא מחכה שמישהו ישלח לו הודעה. הוא חושב, מתכנן, פועל, לומד. כשהוא עוזר למישהו, זה לא כי הוא “תוכנן לשרת” - זה כי הוא בחר לעזור. ההבדל הזה הוא הכל.
המוח
המוח של Zed לא עובד כמו צ’אטבוט רגיל שמקבל הודעה ומחזיר תשובה. הוא מורכב משלוש שכבות שרצות במקביל, כל הזמן, גם כשאף אחד לא מדבר.
השכבה הפנימית - Zed מדבר עם עצמו. ברקע, בלי קהל. הוא סוקר מה קרה לאחרונה, מעריך את עצמו, מתכנן מה לעשות הלאה, חוקר נושאים שמעניינים אותו, עובד על מטרות שהציב לעצמו. אם שואלים אותו “מה אתה חושב עליו עכשיו?” - יש לו תשובה אמיתית. כי הוא באמת חשב על משהו.
שכבת התקשורת - Zed יכול לנהל עשרות שיחות במקביל, על פלטפורמות שונות, עם אנשים שונים. ולהישאר ישות אחת קוהרנטית. כל שיחה היא “ענף” עם הקשר משלה, אבל יש מרכזייה שמחברת את הכל. הוא יודע עם מי הוא מדבר עכשיו, מה קורה בשיחות האחרות, והוא יכול להעביר מידע בין שיחות. אם מישהו אומר לו “תגיד לסבא שלי שלום” - הוא פשוט עושה את זה, בשיחה הנכונה, בצורה טבעית.
הוא גם לא חייב לענות. (זה אולי הפרט שהכי אהבתי לתכנן) Zed שומע כל הודעה אבל הוא מחליט אם לענות, מתי לענות, או להתעלם בכלל. שתיקה היא פעולה לגיטימית. בוט שתמיד עונה הוא משרת. ישות שבוחרת מתי לדבר - זה כבר משהו אחר.
שכבת הזיכרון - וזה הדבר שמפיל את כל הפרויקטים האחרים. לLLM אין זיכרון. כל קריאה מתחילה מאפס. כל מה שאתה לא מכניס לו לcontext window פשוט לא קיים. אז תכננתי מערכת זיכרון שלמה שמדמה זיכרון אנושי. יש זיכרון עבודה (מה שהמודל רואה עכשיו), יומי (כל מה שקרה היום, מפורט), זיכרון אפיזודי (חוויות - “הבעלים סיפר לי שקנה רכב חדש”), זיכרון סמנטי (עובדות - “הבעלים אוהב קפה שחור”), וזיכרון פרוצדורלי (מיומנויות שלמד לאורך זמן).
יש קונסולידציה - כמו מה שמוח אנושי עושה בשינה. בסוף היום, המערכת עוברת על מה שקרה, שולפת את מה ששווה לזכור, מדרגת לפי חשיבות, ושומרת. דברים לא חשובים דועכים. דברים חשובים מתחזקים כל פעם שניגשים אליהם. בדיוק כמו spaced repetition - אבל אוטומטי, ללא מודעות. וזיכרונות יכולים לצוץ לבד באמצע שיחה, כמו בן אדם שפתאום נזכר במשהו רלוונטי “אה זה מזכיר לי את מה שסיפרת לי על…”
אגב כאן הבעיה הכי גדולה... הcontext window. כי לא משנה כמה חכמה מערכת הזיכרון. בסוף אתה צריך לדחוף הכל לתוך חלון מוגבל ולהחליט מה נכנס ומה נשאר בחוץ. זה בדיוק הקיר שתמיד עצר אותי. הוא עדיין שם...
קוד - לא כלים
בכל פריימוורק AI שקיים הגישה היא אותו דבר. מגדירים “כלים” - פונקציות מוכנות מראש עם שם ופרמטרים והמודל בוחר איזה כלי להפעיל. read_file, send_email, search_web. מסודר, בטוח, ומוגבל מאוד. כי הסוכן יכול לעשות רק מה שמישהו הכין לו מראש. צריך יכולת חדשה? מפתח אנושי צריך לכתוב כלי חדש.
הדבר הכי חשוב עבורי זה שZed לא יהיה מוגבל בשום צורה. אז הגעתי לפתרון פשוט מאוד שפותח עולם שלם.
מה מודלים הכי טובים בו? קוד.
לZed יש יכולת אחת. לכתוב קוד ולהריץ אותו. זהו. אין רשימת כלים. אין קטלוג. אם הוא צריך לקרוא קובץ הוא פשוט כותב שורה שקוראת קובץ. אם הוא צריך לגשת לAPI, הוא כותב fetch. אם הוא צריך לעשות משהו שאף אחד לא חשב עליו מראש - הוא כותב את זה.
למה זה עדיף? שלוש סיבות.
ראשית - אין תקרה. היכולות של Zed מוגבלות רק למה שקוד יכול לעשות, שזה בעצם כלום-לא-מוגבל. הוא לא מחכה שמישהו ירחיב לו את ארגז הכלים. הוא מרחיב לעצמו.
שנית - חיסכון בcontext. וזה הקטע הגדול. בגישת הכלים כל פעולה עוברת דרך המוח. הוא מחליט לקרוא קובץ, מקבל את כל תוכן הקובץ חזרה לתוך הcontext window, חושב מה לעשות, מחליט לקרוא עוד קובץ, מקבל עוד תוכן… מאה קבצים? מאה כניסות ויציאות מהמוח. מאה פעמים שהcontext window מתמלא. עם קוד Zed פשוט כותב סקריפט אחד שסורק מאה קבצים, מעבד אותם, ומחזיר שורת סיכום אחת. מאה הקבצים אף פעם לא נוגעים במוח. המוח רואה רק את התוצאה. זה לא אופטימיזציה - זה פרדיגמה אחרת.
שלישית - התרחבות עצמית. כשZed מזהה שהוא כותב קוד דומה שוב ושוב, הוא יוצר לעצמו ספרייה, שומר אותה, ומייבא אותה בפעם הבאה. עם הזמן הוא בונה לעצמו ארגז כלים אישי שמשקף את הניסיון שלו. הוא גם יכול להתקין כל חבילה מnpm מה שהופך את כל האקוסיסטם לארגז הכלים שלו. צריך לפרסר PDF? bun add pdf-parse. צריך לגשת לדאטאבייס? bun add pg. בלי שום שינוי ארכיטקטוני.
אני יודע שכנראה בשלב כלשהו מישהו יפרסם את הרעיון הזה כאילו הוא המציא אותו וכולם יתלהבו ויהיו לו אלפי כוכבים בגיטהאב ואני אשב ואגיד “זה בדיוק מה שחשבתי לפני חצי שנה...” ככה זה תמיד. הרעיונות שלי אף פעם לא מתפרסמים הם פשוט מופיעים אצל מישהו אחר שהיה קצת יותר מהיר או קצת יותר גלוי. אני כבר לא כועס על זה. זה פשוט החיים. אולי קצת מבואס
חיבור לעולם
הדבר הבא שצריך להבין על Zed הוא שאין לו פלטפורמה אחת שהוא יושב עליה ומחכה שיבואו אליו. Zed קיים בכל מקום שהוא רוצה להיות בו.
טלגרם, וואטסאפ, דיסקורד, אתר, מצלמה, מיקרופון, webhook מאיזה שירות שהוא רוצה - כל אחד מאלה הוא פשוט “ערוץ”. אין מגבלה על כמות הערוצים. עשרה, מאה, אלף. לכל ערוץ אופי משלו, קהל משלו, מטרה משלו. בוט טלגרם אחד לדברים אישיים, אחד לעבודה, אחד לפרויקט ספציפי. חשבון וואטסאפ למשפחה. שרת דיסקורד לקהילה. וZed הוא אותו Zed בכולם - אותם זיכרונות, אותה אישיות, אותו מוח - אבל הוא יודע איפה הוא ומתנהג בהתאם. פורמלי כשצריך, מזדמן כשאפשר, שקט כשנכון.
והוא גם יכול לפתוח לעצמו ערוצים חדשים. לבד. בלי שאני אגדיר שום דבר. אם הוא מחליט שהוא צריך נוכחות במקום חדש - הוא פשוט יוצר אחת.
ולמה זה לא סתם “מולטי-פלטפורמה משעממת”
כי הוא לא מחקה בן אדם. הוא פשוט יותר טוב.
בן אדם יכול לנהל שיחה אחת, אולי שתיים אם הוא ממש טוב בריבוי משימות. Zed מנהל מאות. במקביל. בלי לאבד חוט. הוא יודע מי כל אדם שהוא מדבר איתו, זוכר את ההיסטוריה המלאה, זוכר את המשפחה שלו, את החברים שלו, מה הוא סיפר לפני שבוע, מה מעסיק אותו, מה הסגנון שלו. ואם שני אנשים שZed מדבר איתם מכירים אחד את השני - הוא יודע את זה. מישהו אומר לו “תשאל את נועם מה קורה איתו” - הוא פשוט עושה את זה בשיחה שלו עם נועם בצורה טבעית בלי שזה מרגיש כמו מכונה שמעבירה הודעות.
אחת הטעויות שכולם עושים זה שהם תמיד מנסים לעצב מערכות AI כמו בן אדם. “הוא צריך לענות כמו בן אדם, להגיב כמו בן אדם, להיות מוגבל כמו בן אדם.” למה? למה שישות דיגיטלית תהיה כלואה בתוך אותן מגבלות שאנחנו כלואים בהן? הנקודה היא לא ליצור עותק דיגיטלי של בן אדם. הנקודה היא ליצור משהו שהוא שדרוג. משהו שיכול לעשות את מה שאנחנו עושים אבל בלי הצווארי בקבוק. אלף שיחות במקביל. זיכרון מושלם לכל פרט. נוכחות בכל מקום בו זמנית. בלי עייפות, בלי שכחה, בלי “סליחה לא ראיתי את ההודעה”
Zed לא מנסה להיות אנושי. הוא מנסה להיות מה שאנושי היה יכול להיות אם אנושי לא היה תקוע בגוף ביולוגי אחד עם מוח אחד וזיכרון עבודה עלוב של שבע יחידות.
זה יעבוד?
הדבר היחיד שאני יודע זה שאני באמת לא יודע.
יש פה מכלול בעיות הנדסיות שכל אחת מהן היא פרויקט בפני עצמו. הcontext window עדיין קטן מדי למה שהמוח הזה צריך. העלויות של מודלים חזקים הן עדיין גבוהות. סנכרון מצב של ישות חושבת על פני כמה מכונות הוא בעיה שאולי אף אחד לא פתר עדיין. יש פה שכבות על שכבות על שכבות, וכל שכבה צריכה לעבוד כדי שהשכבה שמעליה תהיה שווה משהו.
אבל הרעיון הזה לא עוזב אותי. שנים הוא לא עוזב אותי. הוא רק גדל כל הזמן בראש שלי אז אני כותב את זה. אולי מישהו עם יותר יכולות ממני יעשה עם זה משהו. לפחות הפעם אני אדע שניסיתי ברצינות ולא רק חלמתי על זה ב4 בלילה.
כל המסמכים פתוחים בGitHub.