0Pricing
AI Agents · درس

الأدوات غير المتكررة والآثار الجانبية

قد يعيد الوكيل المحاولة؛ لذا صمّم الأدوات بحيث لا يؤدي استدعاؤها مرتين إلى مضاعفة الرسوم أو إرسال البريد الإلكتروني مرتين.

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

أهمية قابلية التكرار

قد تعيد حلقة الوكيل المحاولة. إذا أرسلت أداة رسالة بريد إلكتروني أو خصمت مبلغًا من بطاقة ائتمان، فستؤدي إعادة المحاولة إلى تكرار الإجراء. تجعل قابلية التكرار «تنفيذ X مرة أخرى» عمليةً لا تأثير لها عندما يكون X قد حدث بالفعل.

ما قابلية التكرار؟

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

  • «تعيين حالة المستخدم إلى نشط» — قابلة للتكرار (إعادة التعيين إلى نشط لا تفعل شيئًا)
  • «زيادة العداد بمقدار 1» — غير قابلة للتكرار (كل استدعاء يضيف 1 إضافية)

مفاتيح قابلية التكرار

بالنسبة إلى العمليات غير القابلة للتكرار (المدفوعات ورسائل البريد الإلكتروني)، استخدم مفاتيح قابلية التكرار:

import uuid

def create_payment(amount, idempotency_key):
    # Stripe accepts this header — returns the existing payment if key was used
    return stripe.Charge.create(
        amount=amount,
        currency='usd',
        source=token,
        idempotency_key=idempotency_key
    )

إنشاء المفاتيح من النية

استخدم تجزئةً لـ (tool_name, arguments, run_id) حتى تعيد المحاولات المتطابقة استخدام المفتاح نفسه:

import hashlib, json

def intent_key(tool_name, args, run_id):
    payload = json.dumps([tool_name, args, run_id], sort_keys=True)
    return hashlib.sha256(payload.encode()).hexdigest()

print(intent_key('transfer_money', {'to': 'acc2', 'amount': 100}, 'run-1'))

حصر الآثار الجانبية

حدّد الأدوات التي لها آثار جانبية:

  • SEND البريد الإلكتروني / الرسائل النصية
  • CHARGE / استرداد المبلغ
  • CREATE / DELETE صفوف قاعدة البيانات
  • POST إلى واجهات API خارجية تغيّر الحالة

الأدوات للقراءة فقط قابلة للتكرار بطبيعتها. ركّز على عمليات الكتابة.

تغليف أدوات الآثار الجانبية

أضف طبقةً لقابلية التكرار في تنفيذ الأداة:

def send_email(to, subject, body, run_id):
    key = intent_key('send_email', {'to': to, 'subject': subject, 'body': body}, run_id)
    if redis.set(f'sent:{key}', 1, nx=True, ex=86400):
        smtp.send(to, subject, body)
        return {'sent': True}
    return {'sent': False, 'reason': 'already-sent'}

التأكيد قبل التنفيذ

بالنسبة إلى الإجراءات عالية المخاطر، أضف خطوة تأكيد:

def transfer_money(from_acc, to_acc, amount, confirmed=False):
    if not confirmed:
        return {'pending': True, 'msg': 'Call again with confirmed=True to proceed.'}
    return {'pending': False, 'msg': f'Transferred {amount} from {from_acc} to {to_acc}.'}

print(transfer_money('acc1', 'acc2', 100))
print(transfer_money('acc1', 'acc2', 100, confirmed=True))

الأدوات ذات المرحلتين

قسّم الأدوات إلى مرحلتي «المسودة» و«التنفيذ»:

def draft_email(to, subject, body):
    draft_id = save_draft(to, subject, body)
    return {'draft_id': draft_id, 'preview': body[:200]}

def send_draft(draft_id):
    return smtp.send(load_draft(draft_id))

الإجراءات التعويضية

إذا تعذّر تجنّب أثر جانبي، فعرّف أداة «للتراجع»:

def refund_payment(payment_id):
    return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.

سجلات التدقيق

يجب على كل أداة ذات أثر جانبي تسجيل: من شغّلها، وما الوسائط، ومتى، والنتيجة. استخدم سجلات منظّمة يمكنك الاستعلام عنها لاحقًا.

ميزانية الآثار الجانبية لكل تشغيل

ضع حدًا للآثار الجانبية في كل تشغيل كإجراء أمان:

if state.side_effect_count >= 5:
    return {'error': 'Side-effect budget exhausted for this run.'}

وضع التشغيل التجريبي

يُعد مفيدًا أثناء التطوير: تسجّل الأدوات ما كانت ستفعله، لكنها لا تنفّذه فعليًا:

import os
os.environ['DRY_RUN'] = '1'
DRY_RUN = os.getenv('DRY_RUN') == '1'

def send_email(to, subject, body):
    if DRY_RUN:
        print(f'would send email to {to}')
        return {'sent': False, 'dry_run': True}
    print(f'sending email to {to}')
    return {'sent': True, 'dry_run': False}

result = send_email('user@example.com', 'Hi', 'Hello there')
print(result)

التعريف

ماذا يعني أن تكون الأداة «قابلة للتكرار»؟

مراجعة

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

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

هل درس «الأدوات غير المتكررة والآثار الجانبية» مجاني؟

نعم — نص درس «الأدوات غير المتكررة والآثار الجانبية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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. إعادة المحاولة مع التراجع الأسي
  3. المهلات وقواطع الدائرة
  4. التحقق من مخرجات الأدوات (Pydantic)
← العودة إلى AI Agents