זיכרון עמיד
לסוכני Triggerfish יש זיכרון עמיד חוצה-סשנים. הסוכן יכול לשמור עובדות, העדפות והקשר ששורדים בין שיחות, אתחולים מחדש ואפילו התעוררויות טריגר. הזיכרון נשלט על ידי שערי סיווג -- הסוכן אינו יכול לקרוא מעל זיהום הסשן שלו או לכתוב מתחתיו.
כלים
memory_save
שמירת עובדה או פיסת מידע לזיכרון עמיד.
| פרמטר | סוג | נדרש | תיאור |
|---|---|---|---|
key | string | כן | מזהה ייחודי (למשל user-name, project-deadline) |
content | string | כן | התוכן לזכור |
tags | array | לא | תגיות לסיווג (למשל ["personal", "preference"]) |
הסיווג מוגדר אוטומטית לרמת הזיהום הנוכחית של הסשן. הסוכן אינו יכול לבחור באיזו רמה זיכרון מאוחסן.
memory_get
אחזור זיכרון ספציפי לפי מפתח.
| פרמטר | סוג | נדרש | תיאור |
|---|---|---|---|
key | string | כן | מפתח הזיכרון לאחזור |
מחזיר את תוכן הזיכרון אם קיים ונגיש ברמת האבטחה הנוכחית. גרסאות בסיווג גבוה יותר מצלילות על נמוכות יותר.
memory_search
חיפוש בכל הזיכרונות הנגישים באמצעות שפה טבעית.
| פרמטר | סוג | נדרש | תיאור |
|---|---|---|---|
query | string | כן | שאילתת חיפוש בשפה טבעית |
max_results | number | לא | מקסימום תוצאות (ברירת מחדל: 10) |
משתמש בחיפוש טקסט מלא SQLite FTS5 עם stemming. תוצאות מסוננות לפי רמת האבטחה הנוכחית של הסשן.
memory_list
רשימת כל הזיכרונות הנגישים, עם סינון אופציונלי לפי תגית.
| פרמטר | סוג | נדרש | תיאור |
|---|---|---|---|
tag | string | לא | תגית לסינון לפיה |
memory_delete
מחיקת זיכרון לפי מפתח. הרשומה נמחקת רכות (מוסתרת אך נשמרת לביקורת).
| פרמטר | סוג | נדרש | תיאור |
|---|---|---|---|
key | string | כן | מפתח הזיכרון למחיקה |
ניתן למחוק רק זיכרונות ברמת האבטחה הנוכחית של הסשן.
כיצד זיכרון עובד
חילוץ אוטומטי
הסוכן שומר באופן יזום עובדות חשובות שהמשתמש חולק -- פרטים אישיים, הקשר פרויקט, העדפות -- באמצעות מפתחות תיאוריים. זו התנהגות ברמת prompt מונחית על ידי SPINE.md. ה-LLM בוחר מה לשמור; שכבת המדיניות כופה באיזו רמה.
שערי סיווג
כל רשומת זיכרון נושאת רמת סיווג השווה לזיהום הסשן בזמן שנשמרה:
- זיכרון שנשמר במהלך סשן
CONFIDENTIALמסווגCONFIDENTIAL - סשן
PUBLICאינו יכול לקרוא זיכרונותCONFIDENTIAL - סשן
CONFIDENTIALיכול לקרוא הן זיכרונותCONFIDENTIALוהןPUBLIC
זה נאכף על ידי בדיקות canFlowTo בכל פעולת קריאה. ה-LLM אינו יכול לעקוף זאת.
הצללת זיכרון
כאשר אותו מפתח קיים במספר רמות סיווג, רק הגרסה בסיווג הגבוה ביותר הנראית לסשן הנוכחי מוחזרת. זה מונע דליפת מידע בין גבולות סיווג.
דוגמה: אם user-name קיים הן ב-PUBLIC (הוגדר במהלך צ'אט ציבורי) והן ב-INTERNAL (עודכן במהלך סשן פרטי), סשן INTERNAL רואה את גרסת ה-INTERNAL, בעוד סשן PUBLIC רואה רק את גרסת ה-PUBLIC.
אחסון
זיכרונות מאוחסנים דרך ממשק StorageProvider (אותה הפשטה המשמשת לסשנים, משימות cron ו-todos). חיפוש טקסט מלא משתמש ב-SQLite FTS5 לשאילתות שפה טבעית מהירות עם stemming.
אבטחה
- סיווג תמיד נכפה ל-
session.taintבווPRE_TOOL_CALL-- ה-LLM אינו יכול לבחור סיווג נמוך יותר - כל הקריאות מסוננות לפי
canFlowTo-- שום זיכרון מעל זיהום הסשן לעולם אינו מוחזר - מחיקות הן מחיקות רכות -- הרשומה מוסתרת אך נשמרת לביקורת
- הסוכן אינו יכול להעלות סיווג זיכרון על ידי קריאת נתונים בסיווג גבוה ושמירתם מחדש ברמה נמוכה יותר (מניעת כתיבה-למטה חלה)
אבטחה ה-LLM לעולם אינו בוחר סיווג זיכרון. הוא תמיד נכפה
לרמת הזיהום הנוכחית של הסשן על ידי שכבת המדיניות. זהו גבול קשיח שאינו ניתן להגדרה אחרת. :::
