تكوين الإنتاج صفوف، نقاط تفتيش، استدامة
thread_id(تتتراجع عن النظام الافتراضي) ؛ يطلق العامل في حادث الإيجار وعمل آخر يستأنف. يمكن للعملاء النوم إلى أجل غير مسمى في انتظار مدخلات الإنسان. MegaAgent(arXiv:2408.09955) قام بتشغيل صف المنتج والمستهلك لكل وكيل مع ثلاث دول (الاعتبار / المعالجة / الاستجابة) والتنسيق المستويين (الرداء داخل المجموعة + الدردشة بين المجموعات الإدارة). Fiber/asyncيضرب الخيوط لكل وظيفة لنشر LLM: الخيوط تقف فاقدة 99% من الوقت في انتظار الرموز، والألياف تساعد بشكل تعاوني على إدخال/تشغيل.FastAPI + Postgres + nothing elseحتى يثبت الحمل خلاف ذلك تقوم الهندسة المعمارية البسيطة بعبور التوقعات. هذه الدروس ببناء سجل لمراقبة دائمة، صف عمل لكل وكيل مع عمليات انتقالية الحالة، ومركز التزام الموافقة ضد الخيوط، وتحديد قاعدة "بدء بسيطة" العملية.Type: Learn + Build
Languages: Python (stdlib, asyncio, sqlite3), TypeScript
Prerequisites: Phase 16 · 09 (Parallel Swarm Networks), Phase 16 · 13 (Shared Memory)
Time: ~75 minutes
المشكلة
النموذج الأول من نظام متعددة الوكلاء يعمل على جهاز كمبيوتر محمول مع ثلاثة وكلاء في حلقة الحدث في الذاكرة. انت تنتقل إلى الإنتاج:
- الوكلاء في بعض الأحيان يديرون لساعات (البحث الطويل، الانتظار البشري في الحلقة).
- العمليات العاملة تتعطل إعادة تشغيلها تفقد حالة
- الحمل الذروعي هو 10x المتوسط، تحتاج إلى التوسع الأفقي.
- المستخدمون يدفعون لكل وكيل، تحتاج إلى معنى واحد بالضبط لتشحينه.
حلقة الحدث داخل الذاكرة لا تفعل أي من هذه. تحتاج إلى طبقة تنفيذية دائمة أسفل. الخيارات القنونية 2026 هي:
- محرك سير العمل مع نقاط تفتيش (تيمورال، لانغغغراف).
- صف رسائل مع متجر حكومي (Postgres + SQS/RabbitMQ).
- إطار نموذج الممثل (المنتج والمستهلك في كل وكيل من شركة MegaAgent).
- FastAPI + Postgres (حجة بادي).
هذا الدروس يُبني صورة صغيرة لكل منها.
المفهوم
التنفيذ الدائم، النمط
محرك تنفيذ دائم يظل في حالة البرنامج الكاملة بعد كل "خطوة" (خطوة فائقة، بلغة لانغغراف). عند الحوادث:
worker crashes mid-step
-> lease timeout
-> another worker picks up the thread_id
-> resumes from last checkpoint
-> no duplicate side effectsمتطلبات لتكون هذه عملية فعالة:
- Serializable state.كل حالة العميل يجب أن تكون مستمرة إغلاق الوظائف مع اتصال قاعدة البيانات الحية لا يمكن أن تنجح
- Deterministic resume.في ظل نفس الحالة والمدخولات نفسها، ينتج الوكيل نفس الإجراءات (أو يؤجل إلى حكم تحديد خارجي للمكالمات LLM).
- Idempotent side effects.يجب أن تكون المكالمات الخارجية (المكالمات الأداة، المدفوعات) غير قابلة أو تستخدم مفتاح التخفيض.
لنجغراف يكتب نقطة تفتيش بعد كل خطوة فائقة؛ Temporal يكتب بعد كل نشاط؛ إعادة استخدام المجلات المصدرة من الأحداث. جميع الثلاثة تنفيذ نفس النمط.
وقت التدريب لكل خطوة
وقت تشغيل لانغغراف هو المثال المستخدم: كل وكيل لديه thread_idفي سيرته الذاتية، يكرر الوقت من آخر نقطة تفتيش، وليس من الصفر. يمكن للعملاء interrupt()ينتظر المدخل البشري؛ يستمر الوقت المباشر ويطلق سراح العامل. عندما يصل المدخل، يمكن لأي عامل استئناف.
هذا هو تصميم الإنتاج المرجعي في أبريل 2026.
صف العملاء في "ميغاجنت"
arXiv:2408.09955 يصف تجربة على نطاق واسع: الآلاف من العاملين المتزامنين في مجموعة واحدة.
agent i:
state ∈ {Idle, Processing, Response}
in_queue <- messages addressed to agent i
out_queue -> replies + side effects
coordinators:
intra-group chat (agents in the same group)
inter-group admin chat (high-level routing)التنسيق من طبقتين يسمح للحوار داخل المجموعة يحدث كثافة في حين أن بين المجموعات يبقى نادرة النمط المستخدم للحفاظ على التكلفة خطية في الآلاف من الوكلاء.
التزامن مقابل الخيط لكل وظيفة
مكالمات LLM مرتبطة I / O. الخيوط التي تنتظر الرمز التالي هي عديمة الفائدة 99% من الوقت. الخيوط تكلف ~ 1MB من ذاكرة الوصول لكل واحد؛ عند 10,000 مكالمة متزايدة، وهذا هو 10GB فقط للمراكز.
الألياف (بيتون asyncio, اذهب الى الروتينات , الرهنtokio) التعاونية تسفر عن إدخال/تداول. نفس 10,000 مكالمة تناسب بشكل مريح في العملية. على نطاق وكيل LLM، async ليس تحسينا انها الهندسة المعمارية.
استثناء: المعالجة اللاحقة المرتبطة بالسي بي أيه (التركيب ، خدوش الوسائل) لا تزال تحتاج إلى أسلاك أو عمليات. فصل طبقة إدخال / إطلاقك من طبقة سي بي أيه.
نقطة مقابل بادي
"برمجيات وكالة قياس" (Ashpreet Bedi، 2026) تقول أن معظم الفرق أكثر من مهندس قبل قياس الحمل.
- (فاستابي) + (بوستغريس)
- كل عملية تمر بها وكيل هي صف، يتم تحديث الحالة في المكان مع مواكبة متفائلة.
- وظائف خلفية عبر
pg_notifyأو عاملة بسيطة في "سيلري". - حاولي مجدداً في رمز التطبيق
بالنسبة للوثائق أقل من ~ 100 عامل متزامن على المهام التي يمكن إدارتها، هذا هو في كثير من الأحيان كل ما تحتاجه. تحديث عندما تقيس الفشل.
القاعدة: اعتمد إطار عمل دائم عندما تواجه مشكلة معينة لا يمكن أن تحلها المعماريات البسيطة. الإعتماد المبكر يُفقد الوقت في الاحتفالات التي لا تسفر عن ثمارها.
-مُجرد مرة بالضبط
بالنسبة للعملاء المدفوعين، تحتاج إلى "مفعول مرة واحدة بالضبط" (على الأقل تسليم مرة واحدة + المستهلك غير ذو القدرة).
- Dedup key per run.إدّمه في كل مكالمة تأثير جانبي
- Outbox pattern.تأثيرات جانبية تكتب على جدول أولاً ثم عملية منفصلة تنفذها
- Compensating transactions.عندما تنجح الآثار الجانبية ولكن كتابة التتبع تفشل، جدولة تعويض.
هذه هي أنماط هندسة قواعد البيانات ، وليس محددة لـ LLM. ضريبة LLM هي فقط أن دعوات LLM بطيئة ؛ كل شيء آخر هو أنظمة موحدة موزعة.
نشر قوس قزح
يستخدم نظام أبحاث Anthropic متعدد الوكلاء "تنفيذات قوس قزح": نسخ متعددة من وقت تشغيل الوكيل تعمل في نفس الوقت بحيث لا يتعين قتل العملاء الذين يعملون لفترة طويلة في كل نشر رمز. نسخة جديدة في قطعة من حركة المرور. تقاعد نسخة قديمة عندما ينتهي عملائهم.
هذا هو معيار للأنظمة ذات الحالة الطويلة الأمد؛ التكيف 2026 هو أن العملاء يمكن أن يعيش لساعات، لذلك يجب أن تتوافق دورات النشر.
قائمة التحقق من الإنتاج القنوني
- حالة دائمة (نقاط التحقق أو صور سريعة أو صندوق خارجي + سجل قابل للعب).
- آثار جانبية غير فعالة
- طبقة التزامن بين الدخول والانطلاق للاتصالات لدرجة الماجستير
- على الأقل مرة واحدة التسليم مع ديدوب.
- تنفيذ قوس قزح/قناريات لحملات عمل مزدحمة.
- قابلية الملاحظة: تتبع لكل عميل، تدقيق في خطوات فائقة، معداد محاولة إعادة.
بناءها
code/main.pyتطبيقات:
CheckpointStoreسجل نقاط التفتيش المدعومة من SQLite مع مفاتيح معرف الخيوط. كل خطوة فائقة تضيف صفًا.run_with_checkpoint(agent, thread_id)يحاكي حادث حادث في منتصف الجولة، ويعود العامل الثاني إلى العمل من آخر نقطة تفتيش.AgentQueueلكل عامل آلة حالة غياب / معالجة / استجابة مع صف عمل صغير.demo_async_vs_threads()تشغيل 500 "مكالمة LLM" محاكاة في وقت واحد عبر asyncio و عبر الأسلاك؛ تقارير الساعة الحائطية و الذكرى الذروة (تقريبة).
أركض
python3 code/main.py
npx tsx code/main.tsالناتج المتوقع: استئناف نقطة التفتيش تنجح بعد الحوادث المحاكاة؛ إصدار async يعالج 500 مكالمة متزايدة في < 1s؛ إصدار الخيط يستغرق عدة ثواني ويستخدم ترتيبات من حجم أكثر من الذاكرة لكل وحدة متزايدة.
استخدمها
outputs/skill-scaling-advisor.mdيقدم المشورة بشأن اختيار التنفيذ الدائم: FastAPI + Postgres ، LangGraph runtime ، Temporal ، أو custom. يتم تحديدها حسب الحمل ، احتياجات الاحتفاظ بالحالة ، وتشغيل التردد.
أرسله
صلبة الإنتاج القنوني:
- Start simple (Bedi's rule).FastAPI + Postgres حتى تقيسها فشل.
- Instrument everything before optimizing.تاريخ المرحلة المتأخرة لكل تشغيل، وقت كل خطوة، إعادة محاولة العد، تصنيف الفشل.
- Outbox pattern for side effects.خصوصاً المدفوعات والمكالمات الخارجية للاتصالات
- Rainbow deploys.لا تقتل أبداً أفراد العملاء أثناء عمليات الطيران
- Adopt durable-execution engines (Temporal / LangGraph / Restate) whenتُصيبك مشاكل محددة: انتظارات الإنسانية المُطولة لمدة ساعة، التنسيق عبر المنطقة، سياسات تعويضية معقدة.
- Async for the I/O layer.الأوتار فقط لتحويل بعد المعالجة المرتبطة بالسي.بي.او
التمارين
- أركض
code/main.pyتأكيد عمل سير سير سير العمل في نقطة التفتيش، قياس الفرق بين التزامن مقابل الخيط. - تنفيذoutboxجدول: كل مكالمة أداة تكتب إلى الصندوق الخارجي أولاً ، ثم تنفذ وظيفة / عمل منفصلة. التحقق من الإستغناء عن طريق تشغيل مكالمة الأداة مرتين.
- محاكاةrainbow deploy: نسختين متزايدة في وقت تشغيل؛ توجيه نصف الأسلحة الجديدة إلى كل واحدة؛ تأكيد عدم إيقاف أسلاك الطيران في النسخة القديمة.
- اقرأ وثيقة تشغيل لنجراف (المرتبطة أدناه). حدد أي ميزات من الميزات التي تستغرق أطول وقت لتنسخ في نسخة FastAPI + Postgres المتحركة يدوياً. هل هذا سبب للاعتماد، أم يمكنك تأجيل ذلك؟
- اقرأ MegaAgent (arXiv:2408.09955) القسم 3. التنسيق المستويين (محادثة إدارة داخل المجموعة + بين المجموعات) واضحة. رسم كيفية رسم هذا إلى صف رسائل مع عائلتين من صف.
الشروط الرئيسية
| Term | What people say | What it actually means |
|---|---|---|
| Durable execution | "Persist the program state" | Engine writes state after each super-step; crash recovery is deterministic. |
| Super-step | "Transactional boundary" | Unit of work between checkpoints. LangGraph term. |
| thread_id | "Agent run identifier" | Key that binds checkpoints and resume logic. |
| Idempotency | "Safe to retry" | Repeating a side effect produces the same result as one attempt. |
| Outbox pattern | "Decouple side effects" | Write intent to a table; a separate executor performs and marks done. |
| At-least-once delivery | "Possible duplicates" | Message queue semantics; dedup key makes consumer effective-once. |
| Rainbow deploy | "Overlapping versions" | Multiple runtime versions concurrent during long-running workloads. |
| Async fiber | "Cooperative yielding" | User-mode concurrency; cheap compared to threads for I/O-bound loads. |
| Checkpoint | "State snapshot" | Serialized state at a super-step boundary; key for resume. |
المزيد من القراءة
- LangChain — The runtime behind production deep agents تصميم وقت تشغيل لنجراف
- MegaAgent صف المنتج والمستهلك لكل وكيل؛ تنسيق طبقتين في آلاف العملاء المتزامنين
- Matrix إطار لامركزي مع صفوف رسائل كقاع التنسيق
- Temporal docs محرك سير العمل المرجعي لتنفيذ مستمر
- Anthropic — Multi-agent research system دروس الإنتاج بما في ذلك نشر قوس قزح
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.