النشر الإنتاجي والسلامة

المراقبة والقابلية للملاحظة

5 دقيقة للقراءة

تحتاج وكلاء استخدام الحاسوب في الإنتاج إلى مراقبة شاملة لضمان الموثوقية، وتصحيح المشكلات، والحفاظ على الأمان.

ما يجب مراقبته

الفئةالمقاييس
الأداءوقت الاستجابة، تكرارات الحلقة، معدل الإكمال
التكاليفالرموز المستخدمة، لقطات الشاشة المعالجة، استدعاءات API
الموثوقيةمعدل الخطأ، عدد إعادة المحاولات، تكرار المهلة
الأمانالإجراءات المحظورة، الأنماط المشبوهة، فشل المصادقة

إطار التسجيل

import logging
from datetime import datetime

logger = logging.getLogger("computer_use_agent")

class AgentLogger:
    def __init__(self, session_id: str):
        self.session_id = session_id
        self.start_time = datetime.now()

    def log_action(self, action: dict, result: dict):
        logger.info({
            "session": self.session_id,
            "timestamp": datetime.now().isoformat(),
            "action_type": action.get("type"),
            "coordinates": action.get("coordinate"),
            "success": result.get("success"),
            "duration_ms": result.get("duration_ms")
        })

    def log_screenshot(self, size_bytes: int):
        logger.info({
            "session": self.session_id,
            "event": "screenshot",
            "size_bytes": size_bytes
        })

تسجيل الجلسة

سجل الجلسات الكاملة للتصحيح:

class SessionRecorder:
    def __init__(self):
        self.screenshots = []
        self.actions = []

    def record_frame(self, screenshot_b64: str, action: dict):
        self.screenshots.append(screenshot_b64)
        self.actions.append({
            "timestamp": time.time(),
            "action": action
        })

    def save_recording(self, path: str):
        # حفظ كفيديو أو تسلسل إطارات
        with open(path, 'w') as f:
            json.dump({
                "actions": self.actions,
                "frame_count": len(self.screenshots)
            }, f)

تتبع التكاليف

ما يفاجئ الفرق في الإنتاج ليس سعر الرمز، بل أن محادثة استخدام الحاسوب تُعيد إرسال لقطاتها. الخطوة العشرون تحمل معها العشرين لقطة التي سبقتها، فتنمو التكلفة الساذجة مع مربّع عدد الخطوات لا خطياً.

حرّك المؤشرات، وراقب أثر التقليم إلى آخر بضع لقطات:

كم تكلّف مهمة استخدام حاسوب فعلياً

اضبط الأسعار للنموذج الذي تنشره (اقرأها من صفحة التسعير). الفجوة بين الرقمين سببها نمو السياق، لا أسعار الرموز.

خطوات الوكيل لكل مهمة20
رموز الصورة لكل لقطة1,200
رموز المخرجات لكل خطوة200
اللقطات المحفوظة في السياق3
سعر المدخلات3$/1M
سعر المخرجات15$/1M
المهام يومياً50
التكلفة لكل مهمة بلا تقليم
$1
التكلفة لكل مهمة مع التقليم
$0
الموفَّر يومياً بالتقليم
$27

بالقيم الافتراضية — مهمة من 20 خطوة، و1200 رمز صورة للقطة، و50 مهمة يومياً — تكون النتيجة 0.82 دولار للمهمة بلا تقليم مقابل 0.28 دولار معه، أي نحو 27 دولاراً يومياً مقابل تغيير إعداد واحد. والتقليم نفسه ثلاثة أسطر: قبل كل طلب، احذف محتوى الصور من كل كتل tool_result عدا الأخيرة منها. يحتفظ كلود بسجل النص ولا يفقد سوى بكسلات قديمة تصرّف بناءً عليها بالفعل.

class CostTracker:
    # الأسعار تختلف بحسب النموذج وتتغير: اقرأها من صفحة التسعير ولا تثق بهذا الثابت.
    # https://platform.claude.com/docs/en/pricing — القيم أدناه مجرد عناصر نائبة لكل مليون رمز.
    COSTS = {
        "input_token": 0.003 / 1000,   # لكل رمز ($3 / 1M)
        "output_token": 0.015 / 1000,  # لكل رمز ($15 / 1M)
        "image_token": 0.003 / 1000,   # لكل رمز صورة (مثل الإدخال)
    }

    def __init__(self):
        self.total_cost = 0
        self.call_count = 0

    def add_usage(self, response):
        usage = response.usage
        cost = (
            usage.input_tokens * self.COSTS["input_token"] +
            usage.output_tokens * self.COSTS["output_token"]
        )
        self.total_cost += cost
        self.call_count += 1

        return {
            "call_cost": cost,
            "total_cost": self.total_cost,
            "call_count": self.call_count
        }

فحوصات الصحة

async def health_check():
    checks = {
        "api_connection": await test_api_connection(),
        "display_available": await test_display(),
        "disk_space": check_disk_space(),
        "memory_available": check_memory()
    }

    healthy = all(checks.values())
    return {"healthy": healthy, "checks": checks}

التنبيهات

def check_and_alert(metrics):
    alerts = []

    if metrics["error_rate"] > 0.1:
        alerts.append("معدل خطأ مرتفع: >10%")

    if metrics["avg_response_time"] > 30:
        alerts.append("استجابات بطيئة: متوسط >30 ثانية")

    if metrics["cost_per_task"] > 1.0:
        alerts.append("تكاليف مرتفعة: >$1 لكل مهمة")

    if alerts:
        send_alert(alerts)

مقاييس لوحة التحكم

المقاييس الأساسية للوحة التحكم:

المقياسالهدفعتبة التنبيه
معدل النجاح>95%<90%
متوسط وقت الإكمال<60 ثانية>120 ثانية
التكلفة لكل مهمة<$0.50>$1.00
معدل الخطأ<5%>10%

أدوات التصحيح

# إعادة تشغيل الجلسات الفاشلة
def replay_session(session_id: str):
    session = load_session(session_id)
    for i, (screenshot, action) in enumerate(session):
        print(f"الخطوة {i}: {action}")
        display_screenshot(screenshot)
        input("اضغط Enter للمتابعة...")

نصيحة: خزّن تسجيلات الجلسات لمدة 7-30 يوماً لتصحيح المشكلات التي يبلغ عنها المستخدمون.

هذه القطعة الأخيرة: وكيل يمكنك مراقبته وتسعيره وإيقافه. خذ المشروع النهائي ووجّهه إلى نموذج يهمّك فعلاً. :::

اختبار

الوحدة 5: النشر الإنتاجي والسلامة

خذ الاختبار
هل كان هذا الدرس مفيدًا؟

سجّل الدخول للتقييم