לרוב סוכני ה-AI יש יכולת שליפה (recall) מצוינת אך שיקול דעת גרוע לגבי מה ראוי להישלף. הם יכולים לעכל אלפי דפים, אך טובעים בהקשר (context) שלהם כי אף אחד לא לימד אותם לשכוח חלקים לא רלוונטיים. Knowledge and Memory Management גרסה 0.0.2 נבנתה בדיוק כדי לפתור את זה. זה לא תיקון קטן. זה מחשב מחדש את האופן שבו סוכן מאחסן, מעביר ומתעדף את מה שהוא יודע.
בעיית הזיכרון
סוכנים מתייחסים באופן שגרתי לכל פיסת טקסט כאל דבר קדוש. דף אינטרנט גולמי נשפך לאחסון לצד תפריטי הניווט, באנרים של עוגיות (cookies) וקישורי פוטר. תמלול וידאו מגיע עם כל "אממ", חותמת זמן ופרסומת של ספונסר כשהם שלמים. מאמר עשוי להכיל יותר סימני עיצוב (markup) של פרסומות מאשר תובנות אמיתיות. כשמתבצעת שליפה (retrieval), המערכת מסננת את כל הרעש הזה כדי למצוא את האות (signal). הבזבוז הזה בא לידי ביטוי בשני מקומות: חלון ההקשר (context window) שלכם מצטמצם בגלל זבל, וחשבון התשתית שלכם גדל כי אתם משלמים על עיבוד והטמעה (embedding) של טקסט חסר משמעות.
בעיית ההתרחבות (scaling) מתסכלת באותה מידה. רוב הסוכנים בשלבים המוקדמים קשורים למכונה אחת באמצעות נתיבים קשיחים (hardcoded paths). העבירו את הפרויקט מהלפטופ לשרת, או מ-VPS אחד לאחר, ותבלו אחר צהריים בחיפוש (grepping) בקובצי קונפיגורציה כדי לתקן הפניות שבורות. הסוכן מפסיק להיות תוכנה ומתחיל להיות מיצג אמנות שביר שיכול להתקיים רק בחדר אחד.
מה השתנה ב-V0.0.2
גרסה זו מטפלת בשתי הבעיות בגישה ישירה. היא מציגה סכימת נתיבים ניידת (portable pathing scheme) וצינור עיבוד (pipeline) מאוחד לסיכום שמנקה את הידע לפני שהוא מגיע לזיכרון. התוצאה היא סוכן שקל יותר להעביר וזול יותר להפעלה.
אתם מפסיקים להילחם בתשתית שלכם. אתם מפסיקים לדחוס מסמכים נפוחים לתוך הקשר מוגבל. הסוכן פשוט זוכר טוב יותר.
ניידות מובנית עם $AGENT_HOME
השינוי הפרקטי ביותר הוא הכנסת משתנה הסביבה $AGENT_HOME. כל נתיב שהמערכת נוגעת בו — מאגרי ידע, זיכרון עבודה, סיכומים שמורים (cached), יומני סשן (session logs) — נפתר ביחס לשורש (root) הזה. זה אומר שאתם יכולים להעביר את כל ספריית הסוכן שלכם לכל מקום מבלי לגעת בשורת קוד אחת.
חשבו על הגירה (migration) טיפוסית. אתמול הסוכן שלכם חי ב-DigitalOcean droplet בכתובת /srv/ai-agent. היום אתם רוצים להריץ אותו מקומית או להעביר אותו לחבר לצוות. בעבר, הייתם מגלים נתיבים מוחלטים קשיחים המפוזרים בין קונפיגורציות JSON, סקריפטים של Python ועטיפות shell. הייתם משתמשים ב-sed כדי לעבור על תריסר קבצים, מצמידים אצבעות ומקווים שתפסתם כל הפניה. עם גרסה 0.0.2, אתם מדלגים על זה לגמרי. אתם מעתיקים את התיקייה, מגדירים export AGENT_HOME=/your/path, ומריצים. סקריפטי ההזנה (ingestion), אינדקס הזיכרון ושכבת השליפה מתואמים כולם באופן אוטומטי, כי הם שואלים את מערכת ההפעלה איפה הבית במקום להניח שהם כבר יודעים.
הניידות הזו חשובה מעבר לנוחות. היא הופכת את ההגדרה (setup) שלכם לניתנת לשחזור (reproducible). אתם יכולים לעקוב אחר ספריית הידע שלכם בבקרת גרסאות מבלי לזהם את המאגר (repository) בנתיבים שיש להם היגיון רק במכונה שלכם. חבר לצוות עושה clone למאגר, מכוון את $AGENT_HOME למערכת הקבצים שלו, ומזין את הנתונים שלו. צינור ה-CI שלכם יכול להריץ סוכן חדש, להגדיר משתנה אחד, ולאמת את ההתנהגות מבלי לכתוב מחדש קונפיגורציות עבור כל סביבה.
אם אתם מריצים את הסוכן כשירות systemd, הוסיפו את המשתנה ליחידת השירות (service unit). אם אתם מכניסים אותו למכולה (containerize), העבירו אותו ב-Dockerfile או בקובץ ה-compose שלכם. אם אתם עובדים עם מספר shells, הכניסו אותו ל-.bashrc או ל-.zshrc כדי שהוא יישמר. ההגדרה היא משעממת בכוונה, כי תשתית צריכה להיות משעממת.
שלושה מקורות, צינור ניקוי אחד
המערכת אוצבת ידע משלושה ערוצים ספציפיים:
- דפי אינטרנט. הם מגיעים עטופים ב-HTML boilerplate. התוכן האמיתי עשוי להיות שלוש מאות מילים שמסתתרות בתוך שלושת אלפים מילים של markup, ניווט וסעיפי תגובות.
- תמלולי וידאו. פלט של speech-to-text ידוע כפטפטן (verbose). מילות מילוי, חזרות, חותמות זמן ושיחות לא רלוונטיות יוצרים זרם בעל צפיפות נמוכה שצורך tokens מבלי לספק תובנות.
- מאמרים. הפורמטים משתנים מאוד. חלקם מפרסמים טקסט נקי. אחרים שוברים את חוויית הקריאה עם פרסומות, תיבות הרשמה לניוזלטר והטמעות (embeds) של רשתות חברתיות.
גרסה 0.0.2 אינה מתייחסת אליהם כאל סילוסים (silos) נפרדים שצריך לנהל בזהירות. במקום זאת, היא מעבירה את שלושתם דרך שכבת סיכום (summarization layer) אחת לפני שהם נכנסים לזיכרון העבודה. השכבה מחלצת טענות, פרוצדורות, נקודות נתונים ומערכות יחסים. היא מסירה את הרעש שבני אדם היו מדלגים עליו באופן טבעי.
מדוע סיכום הוא אסטרטגיית סקיילביליות
קיימת נטייה לראות בסיכום תכונה יוקרתית, משהו נחמד שיש, אך לא חיוני. זה שגוי. עבור סוכן מבוסס מודל שפה (language-model agent), סיכום הוא דרישת סקיילביליות.
לחלונות הקשר (Context windows) יש מגבלות. לתקציבי שליפה (Retrieval budgets) יש עלויות. כל טוקן (token) שמוצא על באנר עוגיות או על קריאת חסות בסרטון הוא טוקן שלא תוכל להשקיע בחשיבה (reasoning). כשהסוכן שלך מכין תגובה, הוא לא הופך לחכם יותר על ידי כך שיש סביבו יותר טקסט. הוא הופך לחכם יותר על ידי כך שיש סביבו את הטקסט הנכון.
על ידי הסרת רעש בזמן הקליטה (ingestion), המערכת דוחסת את האות (signal). הסוכן שלך יכול להתייעץ עם סט רחב יותר של מקורות במסגרת אותו תקציב הקשר. עשרה מסמכים מזוקקים נכנסים במקום שבו שני מסמכים גולמיים התקשו בעבר. הצפיפות הזו היא שמאפשרת לסוכן לצמוח מפורוטייפ צעצוע שמנהל חמישה מקורות למערכת ייצור (production system) שמנהלת מאות. טביעת הרגל בזיכרון נשארת ניתנת לניהול. איכות השליפה משתפרת מכיוון שחפיפות לא רלוונטיות נעלמות. עלות הטוקנים יורדת כי הפסקת לשלם על הטמעת (embed) ושאילת טקסטים גנריים (boilerplate).
לא מדובר בדחיסה אגרסיבית עם איבוד מידע (lossy compression) שזורקת את הניואנסים. מדובר בשיקול דעת עריכתי המוטמע בתוך הצינור (pipeline). הסיכום שומר על פרטים טכניים, ישויות בעלות שם (named entities), קשרים סיבתיים ושלבי הוראה. הוא מסיר שאריות עיצוב ומילוי שיחתי מיותר.
מתחילים
ההגדרה היא מינימליסטית במכוון, מכיוון שהמערכת נועדה לא לעכב אותך.
פתח את הטרמינל שלך והגדר את נתיב השורש (root path):
export AGENT_HOME=/your/path
הפוך זאת לקבוע על ידי הוספת השורה לפרופיל ה-shell שלך, או הכנס אותה לכל שכבת אורקסטרציה (orchestration layer) שמריצה את הסוכן שלך. שמור על מבנה תיקיות עקבי מתחת לכך. הסוכן מצפה שהתיקיות שלו — בין אם תקרא להן knowledge/, memory/, summaries/ או משהו אחר — יהיו יחסיות לנתיב השורש הזה. ברגע שהמשתנה פעיל, כוון את הסוכן לדפי האינטרנט, התמלולים והמאמרים שלך. צינור הקליטה והסיכום מטפל בשאר.
אם אתה עובר מגרסה מוקדמת יותר, התהליך פשוט באותה מידה. העבר את הנתונים הקיימים שלך להיררכיית $AGENT_HOME החדשה, עדכן את המשתנה וודא שהסוכן פותר נתיבים (resolves paths) בצורה נכונה. ללא סקריפטים של מיגרציה. ללא שינויים בסכימת מסד הנתונים. פשוט מקור אמת יחיד למקום שבו הסוכן נמצא בדיסק.
השורה התחתונה
ניהול זיכרון טוב יותר אינו עוסק באגירת יותר נתונים. הוא עוסק בסידור (curating) הנתונים שכבר יש לך. גרסה 0.0.2 מתייחסת לניידות ולסיכום כנושאים מרכזיים (first-class concerns) ולא כאל מחשבה מאוחרת. אתה מקבל את החופש להעביר את הסוכן שלך בין מכונות מבלי לשבור דבר, ואתה מקבל את היעילות של חלון הקשר שמכיל באמת הקשר.
הגדר את ספריית הבית שלך. הזן לסוכן מקורות אמיתיים. תן למערכת להסיר את הזבל. אתה תשקיע פחות זמן בתיקון שגיאות נתיבים ופחות כסף בעיבוד רעש, ויותר זמן בשימוש במה שהסוכן למד באמת.
מקור: https://dev.to/mage0535/thinking-1-analyze-the-request-12go
קהילה: https://t.me/GyaanSetuAi
