इंस्टॉल करें
इंस्ट्रूमेंट करें
session_id और agent_id को छोड़ सकता है। स्कोप संदर्भ चर पर पहचान बांधते हैं और हर ईवेंट कॉल इसे वापस पढ़ता है, इसलिए आप अपने फ़ंक्शन के माध्यम से कभी id का धागा नहीं डालते।
तीनों async with और with दोनों के तहत काम करते हैं।
एजेंट को नेस्ट करने से पेड़ बनता है। parent_id और गहराई को स्टैक से गणना की जाती है:
एक स्कोप कैसे बंद होता है
agent() आपके लिए अपवाद संभालता है:
agent_end से पहले उत्सर्जित होती है, क्योंकि डैशबोर्ड agent_end पर स्पान को बंद करता है और इसके बाद कुछ भी कुछ भी में जिम्मेदार नहीं है। एक रद्दीकरण एक विफलता नहीं है, इसलिए रद्द किए गए रन त्रुटि सतह को प्रदूषित नहीं करते। अपवाद हमेशा फिर से उठाया जाता है: एक स्कोप कभी निगल नहीं लेता।
ईवेंट विधियां
छह परिवारों में पंद्रह विधियां। अधिकतर जोड़े में आते हैं — आप ओपनर उत्सर्जित करते हैं, फिर क्लोजर, और SDK उनके बीच का स्पान मापता है।उदाहरण
OpenAI API के विरुद्ध एक टूल-कॉलिंग लूप, कोई एजेंट फ्रेमवर्क के बिना:docs/manual/examples/ के तहत शिप होता है।
थ्रेड्स और async
संदर्भ चर asyncio कार्यों में स्वचालित रूप से प्रसारित होते हैं। वे नए थ्रेड में प्रसारित नहीं होते, क्योंकि एक थ्रेड एक खाली संदर्भ के साथ शुरू होता है।propagate() के बिना, वर्कर की ईवेंट एक TypeError उठाती हैं जो सुधार का नाम देते हैं बजाय किसी सेशन पर उतरने के। यह जानबूझकर है: कोई सेशन के साथ एक ईवेंट को ingest द्वारा छोड़ दिया जाता है और 200 उत्तर दिया जाता है, जो मूक विफलता है जिसे पहचान परत रोकने के लिए मौजूद है।
एडेप्टर के बिना एक फ्रेमवर्क इंस्ट्रूमेंट करें
हर एजेंट फ्रेमवर्क आपको एक ही तीन सीम देता है। उन्हें मैप करें और आपके पास एक पूर्ण ट्रेस है — चारों शिप किए गए एडेप्टर इससे अधिक कुछ नहीं करते।रन को ब्रैकेट करें
प्रत्येक टूल को ब्रैकेट करें
प्रत्येक मॉडल कॉल को जोड़ी करें
AutoGen एडेप्टर क्यों नहीं है
AutoGen एडेप्टर क्यों नहीं है
autogen-coreसितंबर 2025 के बाद से अरक्षित है।- AG2 अन्य फ्रेमवर्क के हुक के समकक्ष कोई प्रक्रिया-व्यापी पंजीकरण बिंदु नहीं उजागर करता है, इसलिए इसे इंस्ट्रूमेंट करने का अर्थ हर निर्माण साइट पर हर एजेंट को लपेटना है।
गहराई में जाना
रिकॉर्डिंग वास्तव में कैसे काम करती है। शुरुआत करने के लिए इसमें से कोई भी आवश्यक नहीं है।एक रिकॉर्डिंग क्या दिखती है, प्रति फ्रेमवर्क
एक रिकॉर्डिंग क्या दिखती है, प्रति फ्रेमवर्क
- LangGraph
- CrewAI
- LlamaIndex
- Pydantic AI
- कस्टम एजेंट
एक सेशन कैसे शुरू और समाप्त होता है
एक सेशन कैसे शुरू और समाप्त होता है
session_id साझा करने वाली ईवेंट का एक समूह है।स्थिति ट्रेस के आकार से प्राप्त की जाती है:agent_end उत्सर्जित करते हैं, और टियरडाउन पर वे कुछ भी अभी भी खुला बंद करते हैं और इसे अधूरा चिह्नित करते हैं — एक क्रैश किया गया रन done बैठता है एक दृश्यमान अंतराल के साथ बजाय हैंगिंग के।interrupt() रन को रोकता है, रूट स्पान जानबूझकर खुला रहता है, और पुनरारंभ करने वाली कॉल इसे बंद करती है। दोनों कॉल एक सेशन हैं।पहचान: session_id, agent_id, और कौन उन्हें बनाता है
पहचान: session_id, agent_id, और कौन उन्हें बनाता है
session_id और agent_id हर ईवेंट विधि पर वैकल्पिक हैं। छोड़ा गया, वे एनक्लोजिंग स्कोप से समाधान करते हैं:TypeError उठाता है जो सुधार का नाम देता है बजाय कोई सेशन के साथ एक ईवेंट उत्सर्जित करने के, जिसे ingest 200 का उत्तर देते हुए छोड़ देगा।स्कोप संदर्भ चर पर पहचान बांधते हैं। वे asyncio कार्यों में स्वचालित रूप से प्रसारित होते हैं लेकिन नए थ्रेड में नहीं — failproofai_sdk.propagate() में एक वर्कर लपेटें।कौन कौन सी id बनाता है
एडेप्टर session_id कैसे समाधान करते हैं
पहला मैच जीता:- एक स्पष्ट
session_idविकल्प - प्रति-कॉल मेटाडेटा
- एनक्लोजिंग
session()स्कोप - फ्रेमवर्क मेटाडेटा
- फ्रेमवर्क का अपना रन id
agent_id को कम कार्डिनलिटी रखें
यह हर डैशबोर्ड सतह पर प्राथमिक पहलू है, और एक LowCardinality(String) कॉलम। एक प्रति-रन मान कॉलम को खराब करता है और फ़िल्टर ड्रॉपडाउन को प्रति रन एक प्रविष्टि से भरता है।एडेप्टर उस कॉलम की रक्षा करते हैं:fw_agent_id / fw_run_id पर रखा जाता है, जहां यह एक पहलू बने बिना पूछताछ योग्य रहता है।ईवेंट प्रकार, समूहीकृत — और कौन सा फ्रेमवर्क क्या रिकॉर्ड करता है
ईवेंट प्रकार, समूहीकृत — और कौन सा फ्रेमवर्क क्या रिकॉर्ड करता है
human_pause और human_interrupt एक व्यक्ति द्वारा एजेंट पर कार्य करने का वर्णन करते हैं, जिसका कोई फ्रेमवर्क संकेत नहीं देता — स्वयं उत्सर्जन करें।जोड़ी, सहसंबंध और अवधि
जोड़ी, सहसंबंध और अवधि
सहसंबंध नियम
- मिलान पूर्णता ईवेंट के लिए एक ही
tool_call_id,hook_id,pause_id, याinput_idका पुनः उपयोग करें। - SDK
tool_result,hook_completed,agent_resume, औरhuman_inputके लिएduration_msकी गणना करता है। इसे उन विधियों में पास करने सेValueErrorउठता है। duration_msस्वीकार किया जाता हैmodel_responseपर, क्योंकि केवल कॉलर असली प्रदाता विलंबता जानता है। यह एक पूर्णांक होना चाहिए — एक फ्लोट कॉल साइट परValueErrorउठाता है, क्योंकि सर्वर कॉलम को एक अहस्ताक्षरित 32-बिट पूर्णांक के रूप में पढ़ता है और कुछ और के लिए NULL संग्रहीत करेगा।- सहसंबंध कुंजियां तरह और सेशन द्वारा स्कोप की जाती हैं, इसलिए एक टूल कॉल और एक हुक सुरक्षित रूप से एक id साझा कर सकते हैं, और दो समवर्ती सेशन टकराए बिना समान id का पुनः उपयोग कर सकते हैं। वे एजेंट द्वारा स्कोप नहीं किए जाते हैं: एक जोड़ी एक एजेंट के तहत खुली और दूसरे के तहत बंद अभी भी सहसंबंधित होती है, जो बहु-एजेंट फ्रेमवर्क में सामान्य मामला है।
request_idmodel_requestकोmodel_responseके साथ जोड़ी करता है। इसके बिना, मॉडल ईवेंट प्रति एजेंट क्रम में जोड़ी होती हैं, इसलिए समवर्ती कॉल गलत जोड़ी बनाती हैं।- प्रक्रियाओं में विभाजित एक जोड़ी अभी भी डाउनस्ट्रीम में सहसंबंधित होती है, लेकिन SDK इसकी प्रक्रिया में-अवधि की गणना नहीं कर सकता है।
- लंबित मानचित्र अधिकतम 10,000 स्टार्ट पकड़ता है और पूर्ण होने पर सबसे पुरानी प्रविष्टि को निष्कासित करता है।
पैकेज में क्या है, और यह कैसे आपका फ्रेमवर्क खोजता है instrument()
पैकेज में क्या है, और यह कैसे आपका फ्रेमवर्क खोजता है instrument()
failproofai-sdk इंस्टॉल करने से सब कुछ इंस्टॉल होता है, सभी चार एडेप्टर शामिल हैं। अतिरिक्त एडेप्टर नहीं, फ्रेमवर्क खींचते हैं।import failproofai_sdk अनुबंध शून्य-निर्भरता है, एक परीक्षण द्वारा प्रवर्तित जो निर्मित व्हील को --no-deps के साथ इंस्टॉल करता है और एक और जो साबित करता है कि कोई फ्रेमवर्क sys.modules तक नहीं पहुंचता है।sys.modules को पढ़ता है, न कि इंस्टॉल किए गए पैकेज सूची को, इसलिए एक फ्रेमवर्क जिसे आपने इंस्टॉल किया है लेकिन कभी आयात नहीं किया वह इंस्ट्रूमेंट नहीं है और आपकी ओर से कभी आयात नहीं किया जाता है। यह देखने के लिए कि क्या वायर्ड है:instrument("crewai") नहीं उठाता। यह एक चेतावनी लॉग करता है और () लौटाता है, इसलिए एक लापता फ्रेमवर्क कभी एक प्रक्रिया को नीचे नहीं लाता है जो अन्य को भी इंस्ट्रूमेंट करता है।चेतावनी अंतर्निहित ImportError ले जाती है, और वह संदेश सटीक install कमांड का नाम देता है — इसलिए सुधार आपके लॉग में है, छिपा नहीं।FAILPROOFAI_SDK_STRICT=1 सेट करें। वह झंडा एक बार पढ़ा जाता है और कैश किया जाता है, इसलिए मध्य-रन सेट करने के बजाय अपनी प्रक्रिया शुरू होने से पहले निर्यात करें।ईवेंट कैसे क्लाउड तक पहुंचते हैं
ईवेंट कैसे क्लाउड तक पहुंचते हैं
.tmp, फिर fsync, फिर एक परमाणु नाम बदलना:.jsonl उठाता है, इसलिए यह कभी आधी-लिखी गई फाइल नहीं पढ़ सकता। स्टेम एक टाइमस्टैम्प, प्रक्रिया id और अनुक्रम संख्या ले जाता है, इसलिए दो प्रक्रियाएं एक ही मिलीसेकंड में फ्लश करना संघर्ष नहीं कर सकती हैं। कतार 10,000 ईवेंट पर capped है; इसके बाद यह सबसे पुरानी को बंद करता है और लॉग करता है।डेमन आपकी बैच भेजता है। वह उन्हें खोलता या फिर से लिखता नहीं है।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 कम-कार्डिनलिटी पहलू है और आपने एक रन id में डाल दिया। एक भूमिका या नोड नाम का उपयोग करें और असली id को एक पेलोड फील्ड में डालें।
