0Pricing
AI Agents · درس

أنماط وكلاء المحفز والإجراء

اكتشاف الحدث ← اتخاذ القرار ← الإجراء: حلقة الأتمتة الأساسية

أنماط وكلاء المحفز والإجراء درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

ما الوكيل القائم على المشغّل والإجراء؟

يراقب الوكيل القائم على المشغّل والإجراء الأحداث ويستجيب بتنفيذ إجراءات. تتكوّن الحلقة من ثلاثة أجزاء: اكتشاف الحدث ← يقرر LLM الإجراء ← تنفيذ الإجراء.

أمثلة: وصول بريد إلكتروني ← تلخيصه والرد عليه؛ رفع ملف ← التحقق منه ومعالجته؛ الساعة 9 صباحًا يوميًا ← إنشاء تقرير يومي.

أنواع المشغّلات

تنقسم المشغّلات إلى ثلاث فئات:

  • قائمة على الأحداث: يُرسل Webhook عند وصول بريد إلكتروني أو رفع ملف
  • قائمة على الوقت: يشغّل جدول cron الوكيل على فواصل زمنية محددة
  • قائمة على الاستطلاع: يتحقق الوكيل من واجهة API بشكل متكرر بحثًا عن بيانات جديدة

يحدد اختيار نوع المشغّل المناسب زمن استجابة وكيلك واستخدامه للموارد.

مرحلة الاكتشاف

يعني الاكتشاف تلقي حدث أو التعرّف عليه. في Webhooks، يتلقى خادمك طلب POST. أما في الاستطلاع، فيستعلم وكيلك من واجهة API ويقارن النتائج بآخر حالة معروفة.

import json

def detect_new_email(current_emails, last_seen_id):
    new_emails = [
        e for e in current_emails
        if e['id'] > last_seen_id
    ]
    return new_emails

# Simulate detection
current = [{'id': 3, 'subject': 'Meeting'}, {'id': 4, 'subject': 'Invoice'}]
new = detect_new_email(current, last_seen_id=2)
print('New emails:', [e['subject'] for e in new])

مرحلة اتخاذ القرار

بعد اكتشاف حدث، يرسل الوكيل السياق إلى LLM ويسأله عن الإجراء الذي ينبغي تنفيذه. يختار LLM أداةً أو يعيد استجابة مباشرة.

import openai

client = openai.OpenAI(api_key='sk-...')

def decide_action(event_description):
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[
            {'role': 'system', 'content': 'You are an automation agent. Decide what action to take for the event.'},
            {'role': 'user', 'content': f'Event: {event_description}'}
        ],
        tools=[
            {'type': 'function', 'function': {'name': 'send_reply', 'description': 'Reply to email', 'parameters': {'type': 'object', 'properties': {'message': {'type': 'string'}}, 'required': ['message']}}}
        ]
    )
    return response.choices[0].message

result = decide_action('New email: Invoice for $500 from supplier')
print(result)

مرحلة التنفيذ

ينفّذ التنفيذ الإجراء المختار. قد يستدعي ذلك واجهة API، أو يكتب ملفًا، أو يرسل رسالة، أو يشغّل سير عمل آخر. احرص دائمًا على معالجة الأخطاء وتسجيل النتائج.

import logging
import sys

logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger('agent')

def execute_action(action_name, params):
    try:
        if action_name == 'send_reply':
            # In real code, call Gmail API here
            logger.info(f'Sending reply: {params["message"]}')
            return {'status': 'success'}
        elif action_name == 'create_task':
            logger.info(f'Creating task: {params["title"]}')
            return {'status': 'success'}
        else:
            raise ValueError(f'Unknown action: {action_name}')
    except Exception as e:
        logger.error(f'Action failed: {e}')
        return {'status': 'error', 'message': str(e)}

if __name__ == '__main__':
    result = execute_action('send_reply', {'message': 'Thanks for reaching out!'})
    print('Result:', result)

نموذج آلة الحالات

تُعد آلة الحالات نموذجًا قويًا لوكلاء الأتمتة. قد تكون الحالات: IDLE، DETECTING، DECIDING، EXECUTING، ERROR. وتحدث الانتقالات استجابةً للأحداث أو الشروط.

تجعل آلات الحالات سلوك الوكيل متوقعًا وأسهل في تصحيح أخطائه.

from enum import Enum

class AgentState(Enum):
    IDLE = 'idle'
    DETECTING = 'detecting'
    DECIDING = 'deciding'
    EXECUTING = 'executing'
    ERROR = 'error'

class AutomationAgent:
    def __init__(self):
        self.state = AgentState.IDLE
    
    def transition(self, new_state):
        print(f'State: {self.state.value} -> {new_state.value}')
        self.state = new_state
    
    def run_cycle(self, event=None):
        self.transition(AgentState.DETECTING)
        if event:
            self.transition(AgentState.DECIDING)
            self.transition(AgentState.EXECUTING)
        self.transition(AgentState.IDLE)

agent = AutomationAgent()
agent.run_cycle(event={'type': 'email', 'subject': 'Test'})

نمط المشغّل عند استلام البريد الإلكتروني

تستخدم إشعارات الدفع من Gmail خدمة Pub/Sub. عند وصول بريد إلكتروني جديد، تنشر Google رسالةً في موضوعك. يتلقى وكيلك Webhook، ثم يجلب البريد الإلكتروني ويعالجه.

from fastapi import FastAPI, Request
import base64, json

app = FastAPI()

@app.post('/gmail-push')
async def gmail_push(request: Request):
    body = await request.json()
    # Decode Pub/Sub message
    message = body.get('message', {})
    data = base64.b64decode(message.get('data', '')).decode('utf-8')
    notification = json.loads(data)
    
    email_address = notification.get('emailAddress')
    history_id = notification.get('historyId')
    
    print(f'New email for {email_address}, historyId: {history_id}')
    # Fetch email details and run agent here
    return {'status': 'ok'}

نمط المشغّل عند رفع ملف

يمكن لإشعارات أحداث S3 أو مراقبي نظام الملفات المحلي تشغيل الوكلاء عند ظهور ملفات. تراقب مكتبة watchdog المجلدات بحثًا عن ملفات جديدة.

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

class UploadHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            return
        print(f'New file detected: {event.src_path}')
        self.process_file(event.src_path)
    
    def process_file(self, filepath):
        # Run agent logic on new file
        print(f'Processing: {filepath}')

observer = Observer()
handler = UploadHandler()
observer.schedule(handler, path='/tmp/uploads/', recursive=False)
observer.start()

try:
    time.sleep(30)  # Watch for 30 seconds
finally:
    observer.stop()
    observer.join()

نمط المشغّل القائم على الوقت

تشغّل المشغّلات القائمة على الوقت الوكلاء وفق جدول زمني. استخدم APScheduler للجدولة داخل العملية، أو مهمة cron للنظام للجدولة على مستوى العملية.

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

scheduler = BlockingScheduler()

def daily_report_agent():
    print(f'Daily report running at {datetime.now()}')
    # Fetch data, call LLM, send report
    pass

def hourly_check_agent():
    print(f'Hourly check at {datetime.now()}')
    pass

# Run at 8am every day
scheduler.add_job(daily_report_agent, 'cron', hour=8, minute=0)

# Run every 30 minutes
scheduler.add_job(hourly_check_agent, 'interval', minutes=30)

print('Scheduler started')
scheduler.start()

تنفيذ الإجراءات متساوية الأثر

يجب أن تكون وكلاء الأتمتة متساوية الأثر: يجب ألا يؤدي تنفيذ الإجراء نفسه مرتين إلى آثار مكررة. استخدم مفاتيح عدم تكرار التنفيذ وأنماط التحقق قبل التنفيذ.

import hashlib

processed_events = set()  # In production, use Redis or DB

def compute_event_id(event):
    content = f"{event['type']}:{event['source_id']}:{event['timestamp']}"
    return hashlib.sha256(content.encode()).hexdigest()[:16]

def handle_event_idempotent(event):
    event_id = compute_event_id(event)
    
    if event_id in processed_events:
        print(f'Skipping duplicate event: {event_id}')
        return {'status': 'duplicate', 'event_id': event_id}
    
    # Process event
    print(f'Processing event: {event_id}')
    processed_events.add(event_id)
    return {'status': 'processed', 'event_id': event_id}

# Simulate duplicate event
event = {'type': 'email', 'source_id': 'abc123', 'timestamp': '2024-01-01T09:00:00'}
print(handle_event_idempotent(event))
print(handle_event_idempotent(event))  # Duplicate - skipped

حالات الخطأ والاسترداد

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

import time

def execute_with_retry(action_fn, max_retries=3):
    for attempt in range(max_retries):
        try:
            result = action_fn()
            print(f'Success on attempt {attempt + 1}')
            return result
        except Exception as e:
            wait = 2 ** attempt  # Exponential backoff: 1s, 2s, 4s
            print(f'Attempt {attempt + 1} failed: {e}. Retrying in {wait}s')
            if attempt < max_retries - 1:
                time.sleep(wait)
            else:
                print('All retries exhausted. Moving to dead-letter queue.')
                raise

# Example usage
call_count = [0]

def flaky_action():
    call_count[0] += 1
    if call_count[0] < 3:
        raise ConnectionError('Service unavailable')
    return 'Done'

execute_with_retry(flaky_action)

اختبار المعرفة: أنماط المشغّلات والإجراءات

اختبر مدى فهمك لأنماط الوكلاء القائمة على المشغّل والإجراء.

جمع المكوّنات

يجمع الوكيل الكامل القائم على المشغّل والإجراء كل المكوّنات: مصدر مشغّل (بريد إلكتروني أو ملف أو مؤقت)، وطبقة اكتشاف، واتخاذ قرارات قائم على LLM، وتنفيذًا متساوي الأثر، ومنطقًا لإعادة المحاولة، وتتبعًا للحالة.

ابدأ ببساطة: نوع مشغّل واحد وإجراء واحد. أضف التعقيد تدريجيًا مع ازدياد ثقتك بسلوك الوكيل.

الأسئلة الشائعة

هل درس «أنماط وكلاء المحفز والإجراء» مجاني؟

نعم — نص درس «أنماط وكلاء المحفز والإجراء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «أنماط وكلاء المحفز والإجراء»؟

اكتشاف الحدث ← اتخاذ القرار ← الإجراء: حلقة الأتمتة الأساسية تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أنماط وكلاء المحفز والإجراء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أنماط وكلاء المحفز والإجراء
  2. ربط الوكلاء بـ Webhooks
  3. الوكلاء المجدولون والقائمون على Cron
  4. بناء خط أنابيب لأتمتة تطبيقات متعددة
← العودة إلى AI Agents