Skip to content

سجل التعليقات التوضيحية

تتبع كل إجراء تعليق توضيحي مع الطوابع الزمنية للتدقيق والتحليل.

سجل التعليقات التوضيحية

يوفر Potato تتبعاً شاملاً لجميع إجراءات التعليق التوضيحي مع بيانات وصفية دقيقة للطوابع الزمنية. يتيح ذلك تحليل الأداء وضمان الجودة ومسارات تدقيق مفصلة.

نظرة عامة

يتتبع نظام سجل التعليقات التوضيحية:

  • كل إجراء تعليق توضيحي: اختيارات التصنيفات، تعليقات النطاق، مدخلات النص
  • طوابع زمنية دقيقة: طوابع زمنية من جانب الخادم والعميل
  • البيانات الوصفية للإجراء: المستخدم، الحالة، المخطط، القيم القديمة/الجديدة
  • مقاييس الأداء: أوقات المعالجة، معدلات الإجراءات
  • النشاط المشبوه: أنماط نشاط سريعة أو متفجرة بشكل غير عادي

تتبع الإجراءات

يتم تسجيل كل تغيير في التعليق التوضيحي كـ AnnotationAction مع:

الحقلالوصف
action_idمعرّف UUID فريد لكل إجراء
timestampطابع زمني من جانب الخادم
client_timestampطابع زمني من جانب المتصفح (إن توفر)
user_idالمستخدم الذي نفّذ الإجراء
instance_idالحالة التي يتم تعليقها
action_typeنوع الإجراء المنفّذ
schema_nameاسم مخطط التعليق التوضيحي
label_nameالتصنيف المحدد ضمن المخطط
old_valueالقيمة السابقة (للتحديثات/الحذف)
new_valueالقيمة الجديدة (للإضافات/التحديثات)
span_dataتفاصيل النطاق لتعليقات النطاق
server_processing_time_msوقت معالجة الخادم

أنواع الإجراءات

يتتبع النظام أنواع الإجراءات التالية:

  • add_label - اختيار تصنيف جديد
  • update_label - تغيير قيمة التصنيف
  • delete_label - إزالة التصنيف
  • add_span - إنشاء تعليق نطاق جديد
  • update_span - تعديل تعليق النطاق
  • delete_span - إزالة تعليق النطاق

التهيئة

تتبع سجل التعليقات التوضيحية مفعّل افتراضياً. لا حاجة لتهيئة إضافية.

مقاييس الأداء

يحسب النظام مقاييس الأداء من سجل الإجراءات:

python
from potato.annotation_history import AnnotationHistoryManager
 
metrics = AnnotationHistoryManager.calculate_performance_metrics(actions)
 
# Returns:
{
    'total_actions': 150,
    'average_action_time_ms': 45.2,
    'fastest_action_time_ms': 12,
    'slowest_action_time_ms': 234,
    'actions_per_minute': 8.5,
    'total_processing_time_ms': 6780
}

كشف النشاط المشبوه

يمكن للنظام كشف أنماط تعليق توضيحي قد تكون مشكلة:

python
from potato.annotation_history import AnnotationHistoryManager
 
analysis = AnnotationHistoryManager.detect_suspicious_activity(
    actions,
    fast_threshold_ms=500,      # Actions faster than this are flagged
    burst_threshold_seconds=2   # Actions closer than this are flagged
)
 
# Returns:
{
    'suspicious_actions': [...],
    'fast_actions_count': 5,
    'burst_actions_count': 12,
    'fast_actions_percentage': 3.3,
    'burst_actions_percentage': 8.0,
    'suspicious_score': 15.2,
    'suspicious_level': 'Low'
}

مستويات الاشتباه

الدرجةالمستوىالتفسير
0-10Normalسلوك تعليق توضيحي نموذجي
10-30Lowبعض الإجراءات السريعة، مقبول على الأرجح
30-60Mediumنمط ملحوظ، قد يستدعي المراجعة
60-80Highنمط مقلق، يُوصى بالمراجعة
80-100Very Highمشكلة جودة محتملة، مراجعة فورية

مرجع API

AnnotationAction

python
from potato.annotation_history import AnnotationAction
 
action = AnnotationAction(
    action_id="uuid-here",
    timestamp=datetime.now(),
    user_id="annotator1",
    instance_id="doc_001",
    action_type="add_label",
    schema_name="sentiment",
    label_name="positive",
    old_value=None,
    new_value=True
)
 
# Serialize to dictionary
data = action.to_dict()
 
# Deserialize from dictionary
action = AnnotationAction.from_dict(data)

AnnotationHistoryManager

python
from potato.annotation_history import AnnotationHistoryManager
 
# Create a new action with current timestamp
action = AnnotationHistoryManager.create_action(
    user_id="annotator1",
    instance_id="doc_001",
    action_type="add_label",
    schema_name="sentiment",
    label_name="positive",
    old_value=None,
    new_value=True
)
 
# Filter actions by time range
filtered = AnnotationHistoryManager.get_actions_by_time_range(
    actions,
    start_time=datetime(2024, 1, 1),
    end_time=datetime(2024, 1, 31)
)
 
# Filter actions by instance
instance_actions = AnnotationHistoryManager.get_actions_by_instance(
    actions, instance_id="doc_001"
)
 
# Calculate performance metrics
metrics = AnnotationHistoryManager.calculate_performance_metrics(actions)
 
# Detect suspicious activity
analysis = AnnotationHistoryManager.detect_suspicious_activity(actions)

حالات الاستخدام

ضمان الجودة

مراقبة سلوك المعلّقين بحثاً عن مشكلات الجودة:

python
for user_id in get_all_users():
    user_actions = get_user_actions(user_id)
    analysis = AnnotationHistoryManager.detect_suspicious_activity(user_actions)
 
    if analysis['suspicious_level'] in ['High', 'Very High']:
        flag_for_review(user_id, analysis)

مسار التدقيق

تتبع التغييرات للامتثال التنظيمي:

python
instance_actions = AnnotationHistoryManager.get_actions_by_instance(
    all_actions, "doc_001"
)
 
audit_log = [action.to_dict() for action in instance_actions]
with open("audit_doc_001.json", "w") as f:
    json.dump(audit_log, f, indent=2)

تحليل الوقت

فهم أنماط توقيت التعليق التوضيحي:

python
from collections import Counter
 
hours = Counter(action.timestamp.hour for action in all_actions)
print("Peak annotation hours:", hours.most_common(5))

تخزين البيانات

يتم تخزين سجل التعليقات التوضيحية في ملفات حالة المستخدم:

text
output/
  annotations/
    user_state_annotator1.json  # Includes action history
    user_state_annotator2.json

صيغة التصدير

يتم تسلسل الإجراءات بطوابع زمنية بصيغة ISO 8601:

json
{
  "action_id": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": "2024-01-15T10:30:45.123456",
  "user_id": "annotator1",
  "instance_id": "doc_001",
  "action_type": "add_label",
  "schema_name": "sentiment",
  "label_name": "positive",
  "old_value": null,
  "new_value": true,
  "server_processing_time_ms": 23
}

أفضل الممارسات

  1. المراقبة المنتظمة: تحقق من تقارير النشاط المشبوه بشكل دوري
  2. ضبط العتبات: اضبط عتبات الكشف بناءً على تعقيد المهمة
  3. تصدير النسخ الاحتياطية: قم بتصدير السجل بانتظام للتخزين طويل الأمد
  4. الامتثال للخصوصية: ضع في الاعتبار سياسات الاحتفاظ بالبيانات للطوابع الزمنية

قراءات إضافية

للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.