Skip to content

סשנים ו-Taint

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

מודל Taint של סשן

כיצד Taint עובד

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

  1. לפי שיחה: לכל סשן יש רמת Taint עצמאית משלו
  2. הסלמה בלבד: Taint יכול לעלות, לעולם לא לרדת בתוך סשן
  3. איפוס מלא מנקה הכול: Taint והיסטוריית שיחה נמחקים יחד
הסלמת Taint: PUBLIC → INTERNAL → CONFIDENTIAL → RESTRICTED. Taint יכול רק לעלות, לעולם לא לרדת.

אבטחה Taint לעולם לא יכול להיות מופחת באופן סלקטיבי. אין מנגנון

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

למה Taint לא יכול לרדת

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

סוגי סשנים

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

סוג סשןתיאורTaint התחלתימתמיד בין הפעלות מחדש
ראשישיחה ישירה ראשית עם הבעליםPUBLICכן
ערוץאחד לכל ערוץ מחובר (Telegram, Slack וכו')PUBLICכן
רקענוצר למשימות אוטונומיות (cron, webhooks)PUBLICלמשך המשימה
סוכןסשנים לכל סוכן לניתוב רב-סוכניPUBLICכן
קבוצהסשני צ'אט קבוצתיPUBLICכן

סשני רקע תמיד מתחילים עם Taint PUBLIC, ללא קשר לרמת ה-Taint של סשן

ההורה. זה בכוונה -- משימות cron ומשימות שהופעלו על ידי webhook לא צריכות לרשת את ה-Taint של סשן כלשהו שיצר אותן. :::

דוגמת הסלמת Taint

להלן זרימה מלאה המציגה הסלמת Taint וחסימת המדיניות הנובעת:

דוגמת הסלמת Taint: סשן מתחיל PUBLIC, עולה ל-CONFIDENTIAL לאחר גישה ל-Salesforce, ואז חוסם פלט לערוץ WhatsApp ציבורי

מנגנון איפוס מלא

איפוס סשן הוא הדרך היחידה להוריד Taint. זו פעולה מכוונת והרסנית:

  1. ארכוב רשומות שושלת -- כל נתוני השושלת מהסשן נשמרים באחסון הביקורת
  2. ניקוי היסטוריית שיחה -- כל חלון ההקשר נמחק
  3. איפוס Taint ל-PUBLIC -- הסשן מתחיל מחדש
  4. דרישת אישור משתמש -- ה-Hook SESSION_RESET דורש אישור מפורש לפני הביצוע

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

תקשורת בין סשנים

כאשר סוכן שולח נתונים בין סשנים באמצעות sessions_send, אותם כללי אי-כתיבה למטה חלים:

Taint סשן מקורערוץ סשן יעדהחלטה
PUBLICערוץ PUBLICמותר
CONFIDENTIALערוץ CONFIDENTIALמותר
CONFIDENTIALערוץ PUBLICחסום
RESTRICTEDערוץ CONFIDENTIALחסום

כלי סשנים הזמינים לסוכן:

כליתיאורהשפעת Taint
sessions_listרישום סשנים פעילים עם מסנניםללא שינוי Taint
sessions_historyאחזור תמליל לסשןTaint יורש מהסשן המופנה
sessions_sendשליחת הודעה לסשן אחרכפוף לבדיקת אי-כתיבה למטה
sessions_spawnיצירת סשן משימת רקעסשן חדש מתחיל ב-PUBLIC
session_statusבדיקת מצב סשן נוכחי ומטא-נתוניםללא שינוי Taint

שושלת נתונים

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

מבנה רשומת שושלת

json
{
  "lineage_id": "lin_789xyz",
  "content_hash": "sha256:a1b2c3d4...",
  "origin": {
    "source_type": "integration",
    "source_name": "salesforce",
    "record_id": "opp_00123ABC",
    "record_type": "Opportunity",
    "accessed_at": "2025-01-29T10:23:45Z",
    "accessed_by": "user_456",
    "access_method": "plugin_query"
  },
  "classification": {
    "level": "CONFIDENTIAL",
    "reason": "source_system_default",
    "assigned_at": "2025-01-29T10:23:45Z",
    "can_be_downgraded": false
  },
  "transformations": [
    {
      "type": "extraction",
      "description": "Selected fields: name, amount, stage",
      "timestamp": "2025-01-29T10:23:46Z",
      "agent_id": "agent_123"
    },
    {
      "type": "summarization",
      "description": "LLM summarized 3 records into pipeline overview",
      "timestamp": "2025-01-29T10:23:47Z",
      "input_lineage_ids": ["lin_789xyz", "lin_790xyz", "lin_791xyz"],
      "agent_id": "agent_123"
    }
  ],
  "current_location": {
    "session_id": "sess_456",
    "context_position": "assistant_response_3"
  }
}

כללי מעקב שושלת

אירועפעולת שושלת
קריאת נתונים מאינטגרציהיצירת רשומת שושלת עם מקור
הטמעת נתונים על ידי LLMהוספת טרנספורמציה, קישור שושלות קלט
צבירת נתונים ממקורות מרוביםמיזוג שושלת, סיווג = max(inputs)
שליחת נתונים לערוץתיעוד יעד, אימות סיווג
איפוס סשןארכוב רשומות שושלת, ניקוי מהקשר

סיווג צבירה

כאשר נתונים ממקורות מרובים משולבים (למשל, סיכום LLM של רשומות מאינטגרציות שונות), התוצאה המצטברת יורשת את הסיווג המקסימלי של כל הקלטים:

קלט 1: INTERNAL    (ויקי פנימי)
קלט 2: CONFIDENTIAL (רשומת Salesforce)
קלט 3: PUBLIC      (API מזג אוויר)

סיווג פלט מצטבר: CONFIDENTIAL (מקסימום של הקלטים)

פריסות ארגוניות יכולות להגדיר כללי הורדת דרגה אופציונליים לצבירות

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

יכולות ביקורת

שושלת מאפשרת ארבע קטגוריות של שאילתות ביקורת:

  • מעקב קדימה: "מה קרה לנתונים מרשומת Salesforce X?" -- עוקב אחר נתונים קדימה ממוצא לכל היעדים
  • מעקב אחורה: "אילו מקורות תרמו לפלט הזה?" -- עוקב אחר פלט אחורה לכל רשומות המקור שלו
  • הצדקת סיווג: "למה זה מסומן CONFIDENTIAL?" -- מציג את שרשרת סיבת הסיווג
  • ייצוא ציות: שרשרת אחסון מלאה לסקירה משפטית או רגולטורית

התמדת Taint

Taint של סשן מתמיד דרך ה-StorageProvider תחת מרחב השמות taint:. זה אומר ש-Taint שורד הפעלות daemon מחדש -- סשן שהיה CONFIDENTIAL לפני הפעלה מחדש עדיין CONFIDENTIAL אחריה.

רשומות שושלת מתמידות תחת מרחב השמות lineage: עם שמירה מונעת ציות (ברירת מחדל 90 ימים).