وكلاء خلفية طويلة الأمد: إعدام دائم
while Trueكل مكالمة LLM تصبح نشاطًا مع نقطة التفتيش، والإعادة المحاولة، والإعادة التعبير. تم دمج OpenAI Agents SDK من Temporal في GA مارس 2026. تقوم روتينات كلود كود (أنثروبيك) بتشغيل طلبات كود كود المجدولة دون عملية محلية مستمرة. تقوم الجلسات بإيقاف المدخلات البشرية، وتتبع النشرات، وتستمر من أحدث نقطة التفتيش المفتاحية التي يضعهاthread_idوراء التجربة الجديدة يقع نمط قديم تشكيل تدفق العمل مع مدخل جديد: LLM يدعو أنشطة غير تحديدية يجب أن تكرر بشكل تحديدي عند التعافي.Type: Learn
Languages: Python (stdlib, minimal durable-execution state machine)
Prerequisites: Phase 15 · 10 (Permission modes), Phase 15 · 01 (Long-horizon agents)
Time: ~60 minutes
المشكلة
فكر في وكيل يعمل لمدة أربع ساعات، يدعو ثلاثة أدوات، يطلب من المستخدم مرتين، ويقوم بأربعين مكالمة في ماجستير في العلوم. في منتصف الطريق، يستضيفه يعمل على إعادة تشغيل. ماذا يحدث؟
- في سذاجة
while Trueحلقة: كل شيء قد فقد. يبدأ التشغيل من جديد. تقوم الدعوات الثلاثة للأدوات (مع آثار جانبية حقيقية) بإجراءها مرة أخرى. يتم طلب المستخدم مرة أخرى للأشياء التي وافقت عليها بالفعل. يتم إعادة فواتير أربعين مكالمة LLM. - مع تنفيذ دائم: يستأنف التشغيل من أحدث نقطة تفتيش. لا يتم إعادة تنفيذ الأنشطة التي تم إكمالها بالفعل؛ يتم إعادة تشغيل نتائجها من السجل الدائم. لا يقر المستخدم مرة أخرى الأشياء التي وافق عليها بالفعل. لا يتم إعادة فواتير المكالمات LLM التي تم إجراؤها بالفعل.
هذه نفس النمط الذي كانت محركات تدفق العمل تشغيله منذ عقد (تيمبورال، كادنس، تشيرامي أوبر) ، والجديد هو أن دعوات الـ LLM أصبحت الآن نوعا من النشاط غير القياسي، مكلفة، مع آثار جانبية، وتتناسب مع هذا النمط بشكل نظيف.
موضوع الدروس: تدهور موثوقية الأفق الطويل (ميتر يلاحظ "تدهور 35 دقيقة" تنخفض معدل النجاح بشكل رباعي تقريبًا مع الأفق). تمكّن التنفيذ المستدام من القيام بأداء أطول من مدعومة ملف موثوقية، وهو وسيلة جديدة لفشل آمن إذا كان التصميم صحيحًا وغير آمن إذا كان التصميم خاطئًا.
المفهوم
الأنشطة، وتدفقات العمل، والإعادة التشغيل
- Workflow: رمز التنسيق التحديدي. يحدد تسلسل الأنشطة، والفروع، والانتظار. يجب أن يكون تحديديا حتى يتم إعادة تشغيله من سجل الأحداث دون اختلاف مفاجئ.
- Activity: وحدة عمل غير تحديدية، والتي قد تفشل. دعوة LLM، دعوة أداة، كتابة الملفات، طلب HTTP. يتم تسجيل كل نشاط مع مدخلاته (بمجرد اكتمالها) نتائجها.
- Event log: مخزن الدعم الدائم. يتم تسجيل كل نشاط يبدأ، يكتمل، يفشل، يحاول مرة أخرى، وكل قرار سير العمل.
- Replay: عند الاسترداد، يتم إعادة تشغيل رمز سير العمل من البداية؛ كل نشاط قد تم إكماله بالفعل يعيد نتيجه المسجل دون إعادة تنفيذ. يتم إعادة تشغيل الأنشطة التي لم تتم.
هذا هو نفس الشكل الذي يعيد تقديم React ضد DOM افتراضي، أو Git إعادة بناء شجرة عمل من المشاركات.
لماذا تتناسب مكالمات الماجستير
دعوات ماجستير في العلوم:
- غير محددة (الدرجة الحرارة > 0، حتى درجة الحرارة 0 تتحرك عبر إصدارات النموذج).
- مكلفة (المال والخمول).
- فشل محتمل (حدود الفائدة، توقعات).
- الآثار الجانبية (إذا استدعوا الأدوات).
هذا هو بالضبط ملف النشاط. إغلاق كل مكالمة LLM كنشاط يمنحك تجربة جديدة مع تعديل تعديلي، التحقق عبر إعادة التشغيل، ومتابعة قابل للعب لتحذير.
نقاط التفتيش المحددة بواسطةthread_id
لانغغغراف، Microsoft Agent Framework، Cloudflare Durable Objects، وكلود كود روتينات جميعها تجمع على نفس شكل API: thread_id(أو ما يعادله) يحدد الجلسة؛ كل انتقال حالة يستمر إلى الخلفية (PostgreSQL افتراضي، SQLite ل dev، Redis ل التخزين الآلي) ؛ استئناف يقرأ أحدث نقطة التفتيش.
اختيار الطرف الخلفي مهم:
- PostgreSQL: مستمرة، قابلة للتسجيل، تتجاوز عمليات التنفيذ.
- SQLite: محلي-dev فقط؛ يفقد البيانات عبر مضيفين.
- Redis: سريع ولكن مؤقت ما لم يتم تشكيل AOF/مقطع الفورية.
- Cloudflare Durable Objects: تم توزيعها بصورة شفافة؛ يتم توزيعها بواسطة مفتاح فريد؛ يحتفظ بها لساعات إلى أسابيع.
المدخل البشري كدولة من الدرجة الأولى
يطلب التزام بعد ذلك (الدرس 15) حالة "انتظار البشر" دائمة. يتوقف سير العمل، ويضع الصف الخارجي الطلب المتعلّق، ويستأنف الموافقة من ذلك النقطة بالضبط. بدون استمرار هذا هو أفضل جهد؛ مع ذلك، يصل موافقة بين عشية وضحاها وتبدأ سير العمل في الصباح.
التدهور الذي استمر 35 دقيقة
لاحظ METR أن كل فئة من العاملات التي تم قياسها تظهر تدهور موثوقية أكثر من ~ 35 دقيقة من العملية المستمرة. مضاعفة مدة المهمة تقريباً أربعة أضعاف معدل الفشل. لا يمكن أن يصلح التنفيذ المستدام هذا الأمر؛ فإنه يسمح لك بالعمل لفترة أطول من مدعومة ملف موثوقية. النمط الآمن هو الجمع بين الاستدامة مع نقاط التفتيش التي تتطلب HITL جديدة عند إعادة الدخول، ومع مفاتيح قتل الميزانية (دروس 13) التي تصل إلى الحد الإجمالي الحساب بغض النظر عن الوقت في الساعة الجدارية.
عندما يكون الإجراء الدائم هو الإجابة الخطأ
- يطول أقل من بضع دقائق دون دخول بشري.
- استرداد المعلومات القراءة فقط
- المهام التي تتطلب فيها الصدق نهاية إلى نهاية داخل نافذة سياق واحدة (بعض مهام التفكير؛ بعض الجيل من إطلاق النار).
استخدمها
code/main.pyيطبق محرك تنفيذ طويل الأمد في stdlib Python. يدعم:
@activityالمعدل الذي يسجل المدخلات والمخرجات إلى سجل الأحداث JSON.- وظيفة سير العمل التي تسلسل الأنشطة.
- أ
run_or_replay(workflow, event_log)وظيفة تعيد إعادة تشغيل الأنشطة المكتملة دون إعادة تنفيذها.
يحاكي السائق تدفق عمل ثلاث نشاطات، ويصطدم في منتصف الطريق، ويظهر (أ) محاولة ساذجة لإعادة تنفيذ كل شيء مقابل (ب) إعادة تشغيل تشغيل فقط النشاط المفقود.
أرسله
outputs/skill-durable-execution-review.mdيراجع نشر عميل طويل الأمد المقترح من أجل شكل تنفيذ دائم صحيح: الأنشطة، والتحديد، والخلفية في نقاط التفتيش، وحالة المدخلات البشرية، وسياسة HITL على المودة.
التمارين
- أركض
code/main.pyلاحظ الفرق في عدد النشاطات والتنفيذ بين محاولة إعادة البناء وإعادة التشغيل. قم بتغيير نقطة الانهيار وظهر تغييرات عدد إعادة التشغيل وفقا لذلك.
- حول محرك الألعاب للاستخدام
thread_idمحاكاة جلستين متزايدة تتشارك المحرك وتأكيد أن سجلات الأحداث لا تتصادم.
- خذ نشاطًا واحدًا في محرك الألعاب. أدخل عدم التحديد (خاتم زمني في حائط الساعة داخل قرارات سير العمل). أظهر الاختلاف في التكرار. شرح كيفية التعامل مع المحركات الحقيقية مع هذا (سجل الآثار الجانبية ،
Workflow.now()(إيه بي)
- اقرأ مقالة "المرحلة التشغيلية خلف عوامل عميقة الإنتاج" من "لانغ تشين"، قم بإدراج كل حالة تستمر فيها الوقت التشغيلي وسمي أي وضع فشل تغطي كل منهما.
- تصميم سياسة نقطة التفتيش لمهمة التشفير المستقلة لمدة 6 ساعات أين تقوم بتفتيش نقطة التفتيش؟ كيف تبدو استئناف على الانهيار؟ ما الذي يتطلب HITL جديد؟
الشروط الرئيسية
| Term | What people say | What it actually means |
|---|---|---|
| Workflow | "Agent's script" | Deterministic orchestration code; replayable from event log |
| Activity | "A step" | Non-deterministic unit (LLM call, tool call); logged before and after |
| Event log | "The backing store" | Durable record of every state transition |
| Replay | "Resume" | Re-run workflow; completed activities return logged results without re-execution |
| Checkpoint | "Save point" | Persisted state keyed by thread_id; latest-wins on resume |
| thread_id | "Session key" | Identifier that scopes durable state |
| 35-minute degradation | "Reliability decay" | METR: success rate drops ~quadratically with horizon |
| Non-determinism | "Drift on replay" | Wall clock, random, LLM output; must be registered as side effect |
المزيد من القراءة
- Anthropic — Claude Code Agent SDK: agent loopالميزانية، والدورات، والإستئناف من المفاهيم.
- Microsoft — Agent Framework: human-in-the-loop and checkpointing شكل طلبات المعلومات
- LangChain — The Runtime Behind Production Deep Agents متطلبات محددة في الوقت الذي يتم فيه تشغيله.
- OpenAI Agents SDK + Temporal integration (Trigger.dev announcement) شكل النشاط لدورات الدراسة في القانون
- Anthropic — Measuring agent autonomy in practice مرجع التدهور لمدة 35 دقيقة
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.