معالجة الأخطاء والتعافي
أوضاع الفشل في الوكلاء
3 دقيقة للقراءة
يمكن أن يفشل وكلاء الذكاء الاصطناعي بطرق عديدة—فهم أوضاع الفشل هذه هو الخطوة الأولى لبناء أنظمة قوية.
فئات الفشل الشائعة
| الفئة | مثال | التأثير |
|---|---|---|
| فشل API | حدود المعدل، انتهاء المهلة، انقطاع الخدمة | توقف الوكيل عن العمل |
| فشل الأدوات | معلمات غير صالحة، أخطاء الصلاحيات | مهام غير مكتملة |
| فشل الاستدلال | هلوسات، حلقات، استنتاجات خاطئة | مخرجات غير صحيحة |
| فشل السياق | تجاوز الرموز، فقدان السياق | أداء متدهور |
فشل API والشبكة
import time
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=4, max=60)
)
def call_llm_with_retry(prompt):
"""إعادة محاولة استدعاءات LLM مع تراجع أسي"""
try:
return llm.generate(prompt)
except RateLimitError:
raise # سيؤدي لإعادة المحاولة
except ServiceUnavailableError:
raise # سيؤدي لإعادة المحاولة
فشل تنفيذ الأدوات
class SafeToolExecutor:
def execute(self, tool_name, params):
try:
result = self.tools[tool_name].run(**params)
return {"success": True, "result": result}
except KeyError:
return {"success": False, "error": f"أداة غير معروفة: {tool_name}"}
except TypeError as e:
return {"success": False, "error": f"معلمات غير صالحة: {e}"}
except PermissionError:
return {"success": False, "error": "تم رفض الصلاحية"}
except Exception as e:
return {"success": False, "error": f"خطأ غير متوقع: {e}"}
فشل الاستدلال
الحلقات اللانهائية
class LoopDetector:
def __init__(self, max_iterations=10):
self.max_iterations = max_iterations
self.action_history = []
def check_and_record(self, action):
self.action_history.append(action)
# التحقق من الأنماط المتكررة
if len(self.action_history) > self.max_iterations:
recent = self.action_history[-5:]
if len(set(recent)) == 1: # نفس الإجراء متكرر
raise LoopDetectedError("الوكيل عالق في حلقة")
return True
كشف الهلوسات
def verify_tool_output(claimed_result, actual_result):
"""التحقق إذا كانت النتيجة المدعاة تطابق ناتج الأداة الفعلي"""
if claimed_result != actual_result:
return {
"verified": False,
"discrepancy": f"الوكيل ادعى '{claimed_result}' لكن الأداة أرجعت '{actual_result}'"
}
return {"verified": True}
مراقبة الفشل
تتبع الإخفاقات لتحديد الأنماط:
from collections import defaultdict
from datetime import datetime
class FailureTracker:
def __init__(self):
self.failures = defaultdict(list)
def log_failure(self, category, details):
self.failures[category].append({
"timestamp": datetime.now(),
"details": details
})
def get_failure_rate(self, category, hours=24):
cutoff = datetime.now() - timedelta(hours=hours)
recent = [f for f in self.failures[category]
if f["timestamp"] > cutoff]
return len(recent)
مؤشرات الفشل الرئيسية
راقب هذه العلامات التحذيرية:
- إعادة محاولات متكررة ← مشكلة في الخدمة الأساسية
- زيادة التأخير ← قيود الموارد
- ارتفاع أخطاء الأدوات ← تغييرات في المخطط أو API
- اقتطاع السياق ← الحاجة لإدارة ذاكرة أفضل
التالي: تعلم كيفية التعامل مع الإخفاقات بسلاسة دون كسر تجربة المستخدم. :::