التعلم من المقاطعات: كيف يتذكر ذكاؤنا الاصطناعي تفضيلاتك (بدون أن يكون مخيفاً)
· 5 دقائق قراءة
في كل مرة توافق أو ترفض إجراء الذكاء الاصطناعي، فإنه يتعلم. بعد 5 موافقات، يتم تنفيذ ذلك الإجراء تلقائياً.
مشكلة الإنسان في الحلقة
يحتاج وكلاء الذكاء الاصطناعي إلى إشراف. قد يقومون بـ:
- تنفيذ أمر خاطئ
- اقتراح عمليات غير آمنة
- إجراء استدعاءات API مكلفة
- الوصول إلى بيانات حساسة
لذلك نضيف مقاطعات:
الذكاء الاصطناعي: "أريد تنفيذ: rm -rf /data/old-logs"
[موافقة] [ر فض] [تعديل]
لكن هذا يخلق احتكاكاً. كل إجراء يحتاج موافقة. يبدو الذكاء الاصطناعي بطيئاً.
الحل؟ التعلم من المقاطعات.
كيف تعمل ذاكرة المقاطعة
الخطوة 1: تسجيل القرار
عندما توافق أو ترفض:
await sessionManager.recordInterruptDecision(
sessionId,
userId,
{
toolName: 'execute',
toolArgs: { command: 'rm -rf /data/old-logs' },
decision: 'approved',
reason: 'Safe cleanup of old logs',
}
);
ينشئ هذا سجل مقاطعة:
interface InterruptRecord {
interruptId: string;
sessionId: string;
userId: string;
toolName: string;
toolArgs: Record<string, unknown>;
decision: 'approved' | 'rejected' | 'modified';
modifiedArgs?: Record<string, unknown>;
reason?: string;
timestamp: Date;
}
الخطوة 2: تحديث تفضيلات الأداة
يحدث كل قرار تفضيل موافقة الأداة:
interface ToolApprovalPreference {
userId: string;
toolName: string;
autoApprove: boolean;
confidence: number;
approvedCount: number;
rejectedCount: number;
lastDecisionAt: Date;
}
خوارزمية التعلم:
// بعد كل قرار
const approvedCount = previous.approvedCount + (decision === 'approved' ? 1 : 0);
const rejectedCount = previous.rejectedCount + (decision === 'rejected' ? 1 : 0);
const total = approvedCount + rejectedCount;
const approvalRate = approvedCount / total;
// تتم الموافقة التلقائية إذا:
// - 5 قرارات على الأقل (حد أدنى لحجم العينة)
// - معدل الموافقة > 80%
const autoApprove = total >= 5 && approvalRate > 0.8;
// الثقة تنمو مع المزيد من البيانات
const confidence = Math.min(0.95, total * 0.1);
الخطوة 3: الموافقة التلقائية على الإجراءات المستقبلية
في المرة القادمة التي يريد الذكاء الاصطناعي استخدام تلك الأداة:
const shouldAutoApprove = await sessionManager.shouldAutoApproveTool(
userId,
'execute'
);
if (shouldAutoApprove) {
// التنفيذ بدون مقاطعة
} else {
// عرض حوار الموافقة
}
مثال واقعي
الأسبوع 1: مستخدم جديد، كل شيء يُقاطَع
| الإجراء | القرار | العدد |
|---|---|---|
تنفيذ ls | موافقة | 1/0 |
تنفيذ cat file.txt | موافقة | 2/0 |
تنفيذ rm temp.txt | موافقة | 3/0 |
تنفيذ git status | موافقة | 4/0 |
تنفيذ git commit | موافقة | 5/0 |
الأسبوع 2: يظهر pattern (نمط تكراري)
| الإجراء | القرار | الإحصائيات |
|---|---|---|
تنفيذ ls | موافقة تلقائية | 6/0 (100%) |
تنفيذ cat | موافقة تلقائية | 4/0 (100%) |
تنفيذ rm | مقاطعة | 3/2 (60%) |
تنفيذ npm publish | مقاطعة | 1/3 (25%) |
النتيجة:
- تنفذ الأوامر الآمنة والشائعة فوراً
- العمليات المدمرة لا تزال تحتاج موافقة
- الإجراءات عالية المخاطر تُقاطَع دائماً
الخصوصية والتحكم
تحكم المستخدم
يمكن للمستخدمين:
- عرض جميع القرارات المسجلة
- حذف سجل المقاطعات
- تعطيل الموافقة التلقائية عالمياً
- طلب الموافقة لأدوات محددة
// تعطيل الموافقة التلقائية للأدوات الخطرة
await memoryManager.updateToolPreference(userId, 'execute', {
autoApprove: false, // السؤال دائماً عن أوامر الصدفة
});
ما نخزنه
نخزن:
- أسماء الأدوات (execute, persist, call-service)
- القرار (موافقة/رفض)
- الطابع الزمني
- patterns مجهولة الهوية
لا نخزن:
- قيم المعاملات الحساسة
- محتويات الملفات
- استجابات API
- كلمات المرور أو الأسرار
الشفافية
كل إجراء يُوافَق عليه تلقائياً يُسجَّل:
[2025-04-11 10:23:45] Auto-approved: execute
Reason: 95% approval rate over 20 decisions
User: user_123
Session: sess_456
منحنى التعلم
الأدوات المختلفة تتعلم بسرعات مختلفة:
| الأداة | سرعة التعلم | لماذا |
|---|---|---|
read_file | سريعة | مخاطر منخفضة، متسقة |
write_file | متوسطة | مخاطر متوسطة |
execute | بطيئة | مخاطر عالية، تعتمد على السياق |
call_service | أبداً | تحتاج دائماً موافقة |
عتبات الثقة
const THRESHOLDS = {
read_file: { minDecisions: 3, minRate: 0.9 },
write_file: { minDecisions: 5, minRate: 0.85 },
execute: { minDecisions: 10, minRate: 0.9 },
call_service: { minDecisions: Infinity, minRate: 1.0 }, // لا موافقة تلقائية أبداً
};
