سجل التعليقات التوضيحية
تتبع كل إجراء تعليق توضيحي مع الطوابع الزمنية للتدقيق والتحليل.
سجل التعليقات التوضيحية
يوفر 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- إزالة تعليق النطاق
التهيئة
تتبع سجل التعليقات التوضيحية مفعّل افتراضياً. لا حاجة لتهيئة إضافية.
مقاييس الأداء
يحسب النظام مقاييس الأداء من سجل الإجراءات:
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
}كشف النشاط المشبوه
يمكن للنظام كشف أنماط تعليق توضيحي قد تكون مشكلة:
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-10 | Normal | سلوك تعليق توضيحي نموذجي |
| 10-30 | Low | بعض الإجراءات السريعة، مقبول على الأرجح |
| 30-60 | Medium | نمط ملحوظ، قد يستدعي المراجعة |
| 60-80 | High | نمط مقلق، يُوصى بالمراجعة |
| 80-100 | Very High | مشكلة جودة محتملة، مراجعة فورية |
مرجع API
AnnotationAction
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
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)حالات الاستخدام
ضمان الجودة
مراقبة سلوك المعلّقين بحثاً عن مشكلات الجودة:
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)مسار التدقيق
تتبع التغييرات للامتثال التنظيمي:
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)تحليل الوقت
فهم أنماط توقيت التعليق التوضيحي:
from collections import Counter
hours = Counter(action.timestamp.hour for action in all_actions)
print("Peak annotation hours:", hours.most_common(5))تخزين البيانات
يتم تخزين سجل التعليقات التوضيحية في ملفات حالة المستخدم:
output/
annotations/
user_state_annotator1.json # Includes action history
user_state_annotator2.json
صيغة التصدير
يتم تسلسل الإجراءات بطوابع زمنية بصيغة ISO 8601:
{
"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
}أفضل الممارسات
- المراقبة المنتظمة: تحقق من تقارير النشاط المشبوه بشكل دوري
- ضبط العتبات: اضبط عتبات الكشف بناءً على تعقيد المهمة
- تصدير النسخ الاحتياطية: قم بتصدير السجل بانتظام للتخزين طويل الأمد
- الامتثال للخصوصية: ضع في الاعتبار سياسات الاحتفاظ بالبيانات للطوابع الزمنية
قراءات إضافية
- لوحة تحكم المشرف - عرض إحصائيات التعليق التوضيحي
- التتبع السلوكي - التتبع على مستوى التفاعل
- مراقبة الجودة - فحوصات الجودة الآلية
للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.