Skip to content

الجلسات و Taint

الجلسات هي الوحدة الأساسية لحالة المحادثة في Triggerfish. كل جلسة تتبع بشكل مستقل مستوى taint -- علامة مائية للتصنيف تسجل أعلى حساسية للبيانات التي تم الوصول إليها خلال الجلسة. يقود Taint قرارات محرك السياسات للمخرجات: إذا كانت الجلسة ملوثة بمستوى CONFIDENTIAL، لا يمكن لأي بيانات من تلك الجلسة أن تتدفق إلى قناة مُصنفة أقل من CONFIDENTIAL.

نموذج Taint للجلسة

كيف يعمل Taint

عندما تصل جلسة إلى بيانات بمستوى تصنيف، تُلوث الجلسة بالكامل بذلك المستوى. يتبع Taint ثلاث قواعد:

  1. لكل محادثة: كل جلسة لها مستوى taint مستقل خاص بها
  2. التصعيد فقط: يمكن لـ taint أن يزداد، ولا ينخفض أبداً ضمن جلسة
  3. إعادة التعيين الكاملة تمسح كل شيء: يُمسح taint وسجل المحادثة معاً
تصعيد Taint: PUBLIC ← INTERNAL ← CONFIDENTIAL ← RESTRICTED. يمكن لـ Taint أن يتصاعد فقط، ولا ينخفض أبداً.

SECURITY لا يمكن أبداً تقليل 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قناة PUBLICALLOW
CONFIDENTIALقناة CONFIDENTIALALLOW
CONFIDENTIALقناة PUBLICBLOCK
RESTRICTEDقناة CONFIDENTIALBLOCK

أدوات الجلسة المتاحة للوكيل:

الأداةالوصفتأثير 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 يوماً).