التحكم في الوصول إلى الأدوات
يجب أن تتحقق الأدوات من أن المستخدم، وليس الوكيل فقط، مخوّل — فالعملاء ليسوا أصحاب الصلاحية.
التحكم في الوصول إلى الأدوات درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
الأدوات ليست أصحاب الصلاحية
«يستدعي» النموذج أداة، لكن الإجراء الفعلي تنفّذه شيفرتكم. المستخدم — وليس الوكيل — هو صاحب الصلاحية الذي تحدّد أذوناته ما يمكن فعله.
فوّضوا الإجراءات استنادًا إلى هوية المستخدم، وليس لمجرد أن «الوكيل قرر ذلك».
Authorise at the Tool Boundary
def refund_order(order_id, *, user):
order = db.get_order(order_id)
if order.customer_id != user.id and not user.is_staff:
raise PermissionError(f'User {user.id} cannot refund order {order_id}')
return stripe.refund(order.payment_id)مرّروا سياق المستخدم
مرّروا كائن المستخدم إلى كل استدعاء أداة:
def dispatch(tool_call, user):
args = json.loads(tool_call.function.arguments)
fn = TOOLS[tool_call.function.name]
return fn(**args, user=user)أذونات لكل أداة
حدّدوا الأدوات التي يمكن لكل دور استخدامها:
ROLE_TOOLS = {
'customer': ['search_orders', 'open_ticket'],
'support': ['search_orders', 'refund_order', 'cancel_order'],
'admin': ['*']
}
visible_tools = [t for t in ALL_TOOLS if t.name in ROLE_TOOLS[user.role] or 'admin' in ROLE_TOOLS[user.role]]تقييد نطاق الوصول إلى البيانات
يجب أن تقيّد الأدوات التي تستعلم من قاعدة البيانات نطاق النتائج بالمستخدم تلقائيًا:
def search_orders(query, user):
# NEVER let the model bypass this WHERE clause
return db.query('SELECT * FROM orders WHERE customer_id = %s AND ...', (user.id,))دقّقوا في كل استدعاء أداة
سجّلوا: من، وماذا، ومتى، وبأي وسيطات، والنتيجة. هذا هو مساركم الجنائي الرقمي عند حدوث خطأ ما:
audit_log({
'user_id': user.id,
'tool': tool_name,
'args': args,
'result_status': result.status,
'timestamp': now()
})أكّدوا الإجراءات المدمّرة
حتى بالنسبة إلى المستخدمين المخوّلين، تحقّقوا مرة أخرى من الإجراءات المدمّرة:
def delete_account(user_id, confirmed=False, user=None):
if not confirmed:
return {'requires_confirmation': True, 'msg': 'Confirm deletion of account.'}
db.execute('DELETE ...', (user_id,))أدوات OAuth المقيّدة بنطاق الرموز
بالنسبة إلى الوكلاء الذين يتصرّفون نيابةً عن المستخدم في خدمات خارجية، قيّدوا نطاق رموز OAuth إلى أضيق نطاق ممكن:
# Token only has gmail.send scope, not gmail.read
send_email = build_with_token(user_token_scoped_send)حدود حساب الخدمة
يجب أن يمتلك حساب الخدمة الخاص بالوكيل أقل قدر ممكن من الأذونات:
- مستخدم قاعدة بيانات للقراءة فقط لأدوات التحليلات
- حاويات S3 منفصلة لكل عميل
- شبكات معزولة ضمن VPC
Rate Limits Per Tool
def ratelimit(key, per_user_per_day=10):
counts = {}
def decorator(func):
def wrapper(user_id, *args, **kwargs):
counts.setdefault(user_id, 0)
if counts[user_id] >= per_user_per_day:
print(f'{key}: user {user_id} rate limited')
return None
counts[user_id] += 1
return func(user_id, *args, **kwargs)
return wrapper
return decorator
@ratelimit(key='tool:refund', per_user_per_day=2)
def refund_order(user_id, order_id):
print(f'refunding order {order_id} for user {user_id}')
return True
for i in range(3):
refund_order('user1', f'order{i}')
واجهة أذونات ظاهرة للمستخدم
اعرضوا للمستخدم ما يستطيع الوكيل فعله نيابةً عنه. وأتيحوا له إلغاء أذونات الأدوات بشكل منفصل. فهذا أمر بالغ الأهمية لبناء الثقة.
إعادة المصادقة للعمليات عالية الحساسية
اجعلوا الأدوات الحساسة تتطلب مصادقة حديثة (آخر تسجيل دخول منذ أقل من < 5 دقائق):
if tool.is_sensitive and user.last_auth_age_seconds > 300:
raise StaleAuthError('Please re-authenticate to perform this action.')اختبروا التفويض كما تختبرون الشيفرة
اكتبوا اختبارات تتحقق من أن «المستخدم A لا يستطيع ردّ قيمة طلب المستخدم B» — ولا تفترضوا مطلقًا أن عناصر التحكم في الوصول تعمل. فهي المصدر الأول لأخطاء أمان الوكلاء.
مبدأ التفويض
أذونات من الذي يجري التحقق منها عندما يستدعي الوكيل أداة؟
مراجعة
المستخدم هو صاحب الصلاحية. مرّروا هوية المستخدم إلى كل أداة. قيّدوا نطاق البيانات بالمستخدم. دقّقوا في كل استدعاء. أكّدوا الإجراءات المدمّرة. واختبروا التفويض كما تختبرون الشيفرة.
تعلم AI Agents مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 60
- الدروس
- 239
الأسئلة الشائعة
هل درس «التحكم في الوصول إلى الأدوات» مجاني؟
نعم — نص درس «التحكم في الوصول إلى الأدوات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «التحكم في الوصول إلى الأدوات»؟
يجب أن تتحقق الأدوات من أن المستخدم، وليس الوكيل فقط، مخوّل — فالعملاء ليسوا أصحاب الصلاحية. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التحكم في الوصول إلى الأدوات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- دفاعات ضد حقن المطالبات
- تصفية المخرجات (Llama Guard وNeMo)
- التنفيذ المعزول لوكلاء الشيفرة
- التحكم في الوصول إلى الأدوات