التثبيت
الإدراج
وما يصدره كل واحد فعلياً:
كل شيء بالداخل يمكن أن يحذف
session_id و agent_id. تربط النطاقات الهوية على متغيرات السياق وكل نداء حدث يقرأها مرة أخرى، لذلك لا تمرر أبداً المعرفات من خلال وظائفك.
تعمل الثلاثة جميعاً مع async with وكذلك مع with.
يبني التداخل للوكلاء الشجرة. يتم حساب parent_id والعمق من المكدس:
كيف يغلق النطاق
agent() يتعامل مع الاستثناءات لك:
يتم إصدار الخطأ قبل
agent_end، لأن لوحة التحكم تغلق الامتداد في agent_end وأي شيء بعده يُنسب إلى لا شيء. الإلغاء ليس فشلاً، لذلك لا تلوث التشغيلات الملغاة سطح الأخطاء. يتم إعادة رفع الاستثناء دائماً: النطاق لا يبتلعه أبداً.
طرق الحدث
خمسة عشر طريقة في ست عائلات. معظمها يأتي في أزواج — تصدر الفاتحة، ثم الأغلق، و SDK يقيس الامتداد بينهما.العائلتان البشريتان تشير في اتجاهين متعاكسين.
لا يشير أي إطار عمل إلى الزوج الثاني، لذا فهو دائماً لك لإصداره.
مثال
حلقة استدعاء الأداة مقابل OpenAI API، بدون إطار عمل وكيل:docs/manual/examples/.
الخيوط و async
تنتشر متغيرات السياق في مهام asyncio تلقائياً. لا تنتشر في خيوط جديدة، لأن الخيط يبدأ بسياق فارغ.propagate()، تثير أحداث العامل TypeError تسمي الإصلاح بدلاً من الهبوط على جلسة لا شيء. هذا متعمد: حدث بدون جلسة يتم تخطيه بواسطة ingest والإجابة 200، وهو الفشل الصامت الذي توجد طبقة الهوية لمنعه.
أدرج إطار عمل بدون محول
كل إطار عمل وكيل يعطيك نفس الفتحات الثلاثة. اربطها وسيكون لديك تتبع كامل — المحولات الأربعة المشحونة لا تفعل أكثر من هذا.1
احيط التشغيل
2
احيط كل أداة
في أي مكان يستدعيه الإطار غلاف أداة أو برنامج وسيط.
3
زاوج كل نداء نموذج
اليدوي والتلقائي يتكونان. يدخل محول يعمل داخل نطاق مكتوب يدوياً تلك الجلسة والآباء إلى ذلك الوكيل، حتى تحصل على شجرة واحدة بدلاً من شجرتين — مفيد عندما تدرج إطار عمل بنفسك إلى جانب واحد مدعوم.
لماذا لا يوجد محول AutoGen
لماذا لا يوجد محول AutoGen
سببان، والفتحات الثلاثة أعلاه هي الإجابة على كليهما:
autogen-coreلم يتم صيانته منذ سبتمبر 2025.- AG2 لا يعرض نقطة تسجيل على مستوى العملية تعادل خطافات أطر العمل الأخرى، لذا فإن إدراجها يعني تغليف كل وكيل في كل موقع البناء.
الذهاب أعمق
كيف يعمل التسجيل فعلياً. لا شيء من هذا مطلوب للبدء.كيف يبدو التسجيل، لكل إطار عمل
كيف يبدو التسجيل، لكل إطار عمل
كل تسجيل له نفس الشكل: يفتح امتداد، يتداخل العمل بداخله، وكل حدث افتتاحي يحصل على حدث إغلاق.الزوج هو الوحدة. كل حدث إغلاق يحمل مدة يقيسها SDK من الحدث الافتتاحي الخاص به.فيما يلي تشغيل واحد حقيقي لكل إطار عمل — مأخوذ من الأمثلة المشحونة مع SDK، اسم النموذج معياري. لاحظ كم يعود من نداء واحد.تصبح العقد أزواج خطاف، لذا تحصل على زمن الكمون لكل عقدة بدون أن تزحمها قائمة الوكيل.
- LangGraph
- CrewAI
- LlamaIndex
- Pydantic AI
- الوكلاء المخصصون
14 events
كيف تبدأ الجلسة وتنتهي
كيف تبدأ الجلسة وتنتهي
لا توجد حدث نهاية الجلسة. الجلسة ليست شيء تغلقه — إنها مجموعة من الأحداث تشترك في
session_id.يتم استخلاص الحالة من شكل التتبع:لذلك تنتهي الجلسة عندما يتم إغلاق كل زوج. يصدر المحولات
agent_end لك، وعند الهدم يغلقون أي شيء لا يزال مفتوحاً ويوقعونه كغير كامل — يستقر التشغيل المتعطل كـ done بفجوة مرئية بدلاً من التعليق.هذا هو السبب في أن الجلسة يمكن أن تمتد على نداءين. يوقف
interrupt() في LangGraph التشغيل، يبقى الامتداد الجذري مفتوحاً عن قصد، والنداء المستأنف يغلقه. كلا النداءين جلسة واحدة.الهوية: session_id و agent_id ومن يضربهم
الهوية: session_id و agent_id ومن يضربهم
session_id و agent_id اختياريان في كل طريقة حدث. محذوفاً، يحلان من النطاق المرفق:TypeError تسمية الإصلاح بدلاً من إصدار حدث بدون جلسة، والتي ستقفزها ingest مع الإجابة 200.تربط النطاقات الهوية على متغيرات السياق. تلك تنتشر في مهام asyncio تلقائياً لكن ليس في خيوط جديدة — غلف عامل في failproofai_sdk.propagate().من يضرب أي معرف
كيف تحل المحولات session_id
أول تطابق يفوز:session_idخيار صريح- البيانات الوصفية لكل نداء
- نطاق
session()المرفق - بيانات إطار العمل الوصفية
- معرف التشغيل الخاص بإطار العمل
حافظ على agent_id على cardinality منخفضة
إنه الجانب الأساسي على كل سطح لوحة تحكم، وعمود LowCardinality(String). تقلل القيمة لكل تشغيل العمود وتملأ قائمة القائمة المنسدلة بإدخال واحد لكل تشغيل.تحافظ المحولات على هذا العمود لك:المعرف الحقيقي يبقى على
fw_agent_id / fw_run_id، حيث يبقى قابلاً للاستعلام بدون أن يكون جانباً.أنواع الأحداث، مجمعة — وأي إطار عمل يسجل ماذا
أنواع الأحداث، مجمعة — وأي إطار عمل يسجل ماذا
أي إطار عمل يسجل ماذا، مقاس من التشغيلات أعلاه:
الشرطة تعني أن الإطار ليس لديه مثل هذا المفهوم.
human_pause و human_interrupt تصف شخص يتصرف على الوكيل، الذي لا يشير إليه أي إطار — انبعث بنفسك.الأزواج والارتباط والمدة
الأزواج والارتباط والمدة
حدث لا يصل وحده أبداً. يفتح أحدهما امتداد، يغلقه الآخر، والحدث الإغلاق يحمل مدة يقيسها SDK من الحدث الافتتاحي.
قواعد الارتباط
- أعد استخدام نفس
tool_call_idأوhook_idأوpause_idأوinput_idلحدث الإكمال المطابق. - حسابات SDK
duration_msلـtool_resultوhook_completedوagent_resumeوhuman_input. تمريره إلى تلك الطرق يرفعValueError. duration_msيُقبل علىmodel_response، لأن فقط المتصل يعرف زمن المزود الحقيقي. يجب أن يكون عدداً صحيحاً — عدد عشري يرفعValueErrorفي موقع الاستدعاء، لأن الخادم يقرأ العمود كعدد صحيح بدون إشارة 32 بت ويخزن NULL لأي شيء آخر.- مفاتيح الارتباط مجالها حسب النوع والجلسة، لذا يمكن لاستدعاء أداة وخطاف مشاركة معرف بأمان، ويمكن لجلستين متزامنتين إعادة استخدام نفس المعرفات بدون تصادم. لا تكون مجالاً بواسطة وكيل: زوج مفتوح تحت وكيل واحد ومغلق تحت آخر لا يزال يرتبط، وهي الحالة العادية في الأطر متعددة الوكلاء.
request_idيزاوجmodel_requestمعmodel_response. بدونه، أحداث النموذج تتزاوج بالترتيب لكل وكيل، لذا تتزاوج النداءات المتزامنة بشكل خاطئ.- زوج مقسم عبر العمليات لا يزال يرتبط في المصب، لكن SDK لا يمكنه حساب مدته في العملية.
- تمسك الخريطة المعلقة بـ 10,000 ابدأ كحد أقصى وتطرد الإدخال الأقدم عندما تكون ممتلئة.
ما هو في الحزمة، وكيف يجد instrument() إطار العمل الخاص بك
ما هو في الحزمة، وكيف يجد instrument() إطار العمل الخاص بك
تثبيت اضبط احصل على هذا خطأ والعملية تعمل مع SDK مستوردة، المحول يبدو مثبتاً، و حدث واحد لم يُصدر. يسجل تحذيراً يقول بالضبط ذلك — لذا تحقق من السجلات أولاً عندما لا يسجل التشغيل شيئاً.
failproofai-sdk يثبت كل شيء، كل المحولات الأربعة مضمونة. تسحب الإضافات الإطار، وليس المحول.import failproofai_sdk هو بدون تبعيات بموجب العقد، مفروض بواسطة اختبار يثبت العجلة المدمجة بـ --no-deps وآخر يثبت عدم وصول أي إطار إلى sys.modules.قراءة الكشف التلقائي
sys.modules، وليس قائمة الحزمة المثبتة، لذا فإن إطار عمل لديك مثبت لكن لم تستورده أبداً لا يتم إدراجه ولا يتم استيراده نيابة عنك. لرؤية ما هو موصول:instrument("crewai") على جهاز بدون CrewAI لا يرفع. يسجل تحذيراً ويرجع ()، حتى أحد إطر العمل المفقودة لا تأخذ عملية تدرج أيضاً آخرين.التحذير يحمل ImportError الأساسي، وتلك الرسالة تسمي أمر التثبيت الدقيق — لذا الإصلاح يكون في سجلاتك، ليس مختبئاً.FAILPROOFAI_SDK_STRICT=1 لإرفاعه بدلاً من ذلك. تُقرأ تلك العلم مرة واحدة وتُخزن مؤقتاً، لذا يصدرها قبل بدء العملية بدلاً من تعيينها في منتصف التشغيل.كيف تصل الأحداث إلى السحابة
كيف تصل الأحداث إلى السحابة
الملف هو ما يجعل هذا آمناً: وكيلك لا يسد أبداً على الشبكة، وانقطاع السحابة يعني دليل ينمو بدلاً من فقدان الأحداث.كل تنظيف يكتب ملف دفعة واحدة،
.tmp أولاً، ثم fsync، ثم إعادة تسمية ذرية:.jsonl، لذا لا يمكن أبداً قراءة ملف نصف مكتوب. الجذع يحمل طابع زمني، معرف العملية ورقم التسلسل، لذا لا يمكن لعمليتين تنظيف في نفس الميلي ثانية أن تصطدما. تُغطى القائمة بـ 10,000 حدث؛ بعد ذلك تسقط الأقدم وتسجل.المراقب ينقل دفعاتك. إنه لا يفتحها أو يعيد كتابتها.التعديل يعمل حيث يكتب المراقب أحداثه الخاصة — وليس حيث تُنقل الدفعات. لذا طلب أو حجة أداة تحمل مفتاح API لا تزال تحمله عند الوصول.هذا مقصود. هذه هي نداءات الإدراج الخاصة بك، وإعادة الكتابة في الحركة ستعني أن الأحداث التي تستقبلها ليست الأحداث التي أصدرتها.يحذف المراقب كل دفعة في غضون ميلي ثانية من نقلها، لذا فإن
ls يتسابق المجمع ويظهر جزء من ما أصدرته — لا يمكن تمييزه عن SDK لم يسجل شيء.للتأكد من أن الأحداث هبطت فعلاً، تحقق من لوحة التحكم. لمراقبة امتلاء الملف، توقف المراقب أولاً.عند فشل الإدراج
عند فشل الإدراج
كل رد اتصال يعمل داخل غلاف وظيفته الوحيدة هي إعادة الرفع، لذا استدعاؤك يجلس في
try واحدة بالضبط وكل شيء SDK يحدث خارجها.الافتراضي صحيح في الإنتاج وخاطئ أثناء التصحيح، لأنه لا يمكن أبداً إثبات أنه لم يتعطل. اضبط
FAILPROOFAI_SDK_STRICT=1 لإسكات الفشل المبتلع.مشاكل شائعة
لا ينتهي الامتداد أبداً
لا ينتهي الامتداد أبداً
حدث افتتاحي بدون حدث إغلاق:
model_request بدون model_response، أو tool_use بدون tool_result. استخدم النطاقات، التي تضمن الزوج حتى عندما يرفع الجسم. إذا استدعيت طرق الحدث مباشرة، استخدم try و finally.تمرير duration_ms يرفع ValueError
تمرير duration_ms يرفع ValueError
يتم قياسه من حدث الافتتاح المطابق، لذا يتم رفضه على
tool_result و hook_completed و agent_resume و human_input. يتم قبوله على model_response، لأن فقط أنت تعرف زمن المزود الحقيقي، ويجب أن يكون عدداً صحيحاً.أحداث من خيط عامل ترفع TypeError
أحداث من خيط عامل ترفع TypeError
الخيط لم يرث السياق أبداً. غلف الدالة في
failproofai_sdk.propagate(). انظر الخيوط و async.اختفى حقل إضافي أو كتب فوق شيء
اختفى حقل إضافي أو كتب فوق شيء
الحقول الإضافية تدمج آخراً، لذا أحد باسم مثل حقل حقيقي مثل
model أو outcome سيكتب فوقه ويغير عمود مخزن. مساحة أسماء لك؛ المحولات تستخدم بادئة fw_.لدى مرشح الوكيل آلاف المدخلات
لدى مرشح الوكيل آلاف المدخلات
agent_id هو جانب cardinality منخفض وأنت وضعت معرف تشغيل فيه. استخدم دوراً أو اسم عقدة وضع المعرف الحقيقي في حقل الحمولة.التالي
كيف يعمل
الأزواج والمعرفات ودورة حياة الجلسة والتسليم.
اقرأ تتبع
اتبع السببية عبر الجلسة التي التقطتها للتو.
محولات الإطار
LangGraph و CrewAI و LlamaIndex و Pydantic AI.

