Skip to main content
يمكن لـ Failproof AI Observability تسجيل كل جلسة وكيل مكتملة تلقائياً من حيث الجودة: أنت توفر خدمة تسجيل صغيرة، وتتعامل Observability مع الباقي. استخدمها لتتبع الأبعاد التي تهمك (الفائدة، كفاءة الأدوات، الدقة، الأمان؛ اختر أنت)، اكتشف الانحدار مبكراً، وقارن الوكلاء أو البيئات في لمحة واحدة. التسجيل اختياري: لا يفعل خط الأنابيب شيئاً حتى تعيّن EVALUATOR_ENDPOINT على الخادم.
ملاحظة: أنت تحدد أبعاد النقاط. يمكن لمُقيّمك إرجاع أي مفاتيح رقمية يريدها؛ تخزن Observability وتتجه وتعرض كل ما تُرسله مرة أخرى.

لمحة سريعة

  1. اكتب مُسجّل. أنشئ خدمة HTTP صغيرة تقرأ نسخة من جلسة وترجع نقاط. تشحن Observability مرجعاً يعمل يمكنك نسخه. انظر كتابة مُقيّم مع SDK.
  2. وجّه Observability إليه. عيّن EVALUATOR_ENDPOINTEVALUATOR_TOKEN مشترك) على عملية الخادم.
  3. راقب النقاط تصل. كل جلسة مكتملة يتم تسجيلها تلقائياً؛ تظهر النتائج على صفحة تفاصيل الجلسة، شبكة الجلسات، والقوائم المحفوظة.
عرض تفاصيل الجلسة مع ملخص التقييم، أشرطة نقاط لكل بعد، ونص التبرير في الشريط الأيمن بمجرد تكوين مُقيّم، يتم تسجيل كل عملية مكتملة وتظهر النتائج في الشريط الأيمن للجلسة: الملخص في الأعلى، ثم أشرطة نقاط لكل بعد مع التبرير.

كيفية العمل

عندما يُصدر Failproof AI Observability SDK حدث agent_end لجلسة، يجدول الخادم تقييماً. ثم يُرسل نسخة الحدث الكاملة إلى خدمة المُقيّم الخاصة بك، والتي يمكنها إما:
  • إرجاع النتيجة مباشرة مع {"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. تُلحق النتيجة بجدول تقييم الجلسة. reasoning و summary اختياريين.
  • تأجيل مع {"status":"pending", "job_id":"abc-123"}. ثم تستدعي Observability GET {EVALUATOR_ENDPOINT}/evaluate/abc-123 حتى يُرجع مُقيّمك {"status":"done", ...} أو {"status":"error", "error":"..."}. وتيرة الاستقصاء لكل وظيفة: قد تتضمن استجابة pending next_poll_secs للتجاوز؛ وإلا فتستخدم Observability قيمة default_poll_interval_secs من GET /config؛ وإلا يعود الخادم إلى EVALUATOR_POLLING_INTERVAL_SECS (افتراضي 10 ثانية). جميع القيم محصورة في [1 ثانية، 1 ساعة].
يمكن أيضاً التقاط الجلسات التي لم تُصدر أبداً agent_end (على سبيل المثال، عملية وكيل منهارة): قد يُرجع GET /config الخاص بالمُقيّم {"inactivity_timeout_secs": 1800}، وستقيّم Observability أي جلسة خاملة لتلك المدة. عيّن الحقل إلى null أو احذفه لتعطيل هذا البديل. خط الأنابيب عديم التأثير تماماً عندما يكون EVALUATOR_ENDPOINT غير محدد. يمكن للجلسة تجميع تقييمات نهائية متعددة بمرور الوقت: كل حدث agent_end (وكل إعادة تقييم يدوية من القوائس) تُلحق صف تقييم جديد. هذه هي الطريقة المدعومة لتقييم محادثة مستأنفة: ينهي المستخدم وكيلاً، ويعود لاحقاً، يُرسل المزيد من الأحداث، ينهي الوكيل مرة أخرى، ويعمل تقييم ثانٍ ضد النسخة الكاملة المحدثة. تُصيّر القوائس أحدث تقييم كعنوان رئيسي والتقييمات السابقة كجدول زمني قابل للطي. بينما يعمل تقييم واحد لجلسة، تُتجاهل أحداث agent_end الإضافية لتلك الجلسة؛ الحدث التالي بعد انتهاء التقييم الجاري سيُدرج تقييماً جديداً كالمعتاد. يُعاد تفعيل بديل عدم النشاط على الجلسات المستأنفة أيضاً: إذا وصلت أحداث جديدة بعد تقييم نهائي سابق وذهبت الجلسة خاملة بعد inactivity_timeout_secs، يُدرج تقييم جديد في الطابور. الأعطال العابرة (5xx، 429، انتهاءات المهلة الزمنية، أخطاء الشبكة) تُعاد محاولتها مع تراجع أسي حتى EVALUATOR_MAX_ATTEMPTS؛ استجابات 4xx نهائية. Observability آمن للتشغيل مع خوادم متعددة مقسمة أفقياً؛ يُقسم العمل بحيث لا تُرسل نفس الجلسة مرتين معاً.

عقد HTTP

كل مسار مصادق يستخدم مصادقة رمز الحامل. يجب أن تكون نفس القيمة مُعدة على كلا الجانبين:
  • خادم Observability: متغير env EVALUATOR_TOKEN
  • خدمة المُقيّم: معدة بنفس الطريقة (يقرأ EVALUATOR_TOKEN SDK agenteye-evaluator حسب الاتفاقية)
إذا كان EVALUATOR_TOKEN غير محدد، لا يُرسل الخادم رأس Authorization؛ قد يقبل المُقيّم طلبات مجهولة، وهذا جيد لشبكة داخلية فقط لكن غير موصى به على الإنترنت العام.

المسارات التي يجب أن يخدمها المُقيّم

جسم EvalRequest المُرسل من الخادم

أشكال الاستجابة

متزامن (مكتمل):
reasoning (خريطة تبرير لكل نقطة) و summary (سرد واحد شامل) كلاهما اختياري. يجب أن تعكس المفاتيح في reasoning المفاتيح في scores؛ تُصيّر القوائس كل إدخال مباشرة تحت شريط النقاط الخاص به. المُقيّمون الأقدم الذين يُرجعون scores فقط يستمرون في العمل بدون تغيير؛ reasoning و summary ببساطة يُقرآن كـ null وتُحذف تسهيلات الواجهة المقابلة. غير متزامن (مؤجل):
next_poll_secs اختياري؛ إذا تم حذفه يعود الخادم إلى default_poll_interval_secs الخاص بالمُقيّم من /config، ثم إلى متغير env EVALUATOR_POLLING_INTERVAL_SECS الخاص به. خطأ نهائي من جانب المُقيّم:
يتعامل الخادم مع أي جسم 2xx آخر كخطأ بروتوكول ويسجل error نهائي للجلسة.

كتابة مُقيّم مع SDK

لا يجب أن تُطبق عقد HTTP باليد. حزمة agenteye-evaluator Python توفر لك غلاف FastAPI مكتوب يتعامل مع المصادقة والتوجيه وأشكال الطلب/الاستجابة لك. تشحن Failproof AI Observability أيضاً مُقيّم مرجعي يعمل يسجل helpfulness و tool_efficiency و factuality من شكل النسخة. انسخه كنقطة بداية وبدّل منطقك الخاص: قاضٍ LLM، محرك قواعد، أي شيء يناسب معيار الجودة لديك. مُقيّم قابل للحياة الدنيا:
مثيل app يعمل تحت أي خادم ASGI، لذا uvicorn module:app يبدئه. بالنسبة للمُقيّمين الذين يحتاجون تأجيل عمل مكلف، أرجع JobPending بدلاً من ذلك وسجل معالج @app.job_lookup؛ يستقصي خادم Observability GET /evaluate/{job_id} حتى تُرجع حالة نهائية أو تنقضي قيمة حد EVALUATOR_MAX_POLL_DURATION_SECS (افتراضي 1 ساعة). مرجع الـ API الكامل والنمط غير المتزامن وشماء الحدث موثقة في قراءة agenteye-evaluator SDK.

تشغيل مُقيّمك

المُقيّم هو خدمتك — لا تشحن Failproof AI Observability مُقيّماً افتراضياً، لذا تبني وتشغل أينما تشغل خدماتك. يعمل تحت أي خادم ASGI (على سبيل المثال uvicorn my_evaluator:app؛ خدم المسارات /health و /config و /evaluate من عقد HTTP، ثم وجّه الخادم إليه (انظر تكوين الخادم). بمجرد وصول المُقيّم، GET /health يُرجع {"status":"ok"}. بعد انتهاء الوكيل من البداية إلى النهاية، GET /evaluations على الخادم يُرجع صفاً مع status: "done" والنقاط التي أنتجها مُقيّمك.

تكوين الخادم

عيّن على عملية الخادم: لتفعيل التسجيل التلقائي، عيّن كلاً من EVALUATOR_ENDPOINT و EVALUATOR_TOKEN على الخادم، ثم أعد تشغيله لاستقبال التغيير. مع عدم تعيين EVALUATOR_ENDPOINT يبقى خط الأنابيب عديم التأثير. أزرار المعايرة أعلاه اختيارية؛ عيّن متغيرات البيئة المقابلة على الخادم فقط إذا اضطررت لتجاوز الافتراضيات.

مرجع API

التصفية حسب نطاق النقاط: score_filters

يقبل GET /evaluations معامل score_filters اختياري يضيق النتائج حسب القيم الرقمية داخل كائن scores. المعامل هو قائمة مفصولة بفواصل من إدخالات key:min..max؛ يمكن حذف أي من الحد. تجمع الإدخالات المتعددة مع AND منطقي. تُستثنى الصفوف حيث المفتاح المسمى غائب أو غير رقمي. قد يحمل طلب واحد 20 إدخال تصفية على الأكثر؛ تجاوز ذلك يُرجع HTTP 400. أمثلة:
لكل كائن استجابة /evaluations هذه الحقول:

الصلاحيات

يحصل المسؤول التمهيدي (ADMIN_KEY و ADMIN_EMAIL) تلقائياً على هذه.

عرض النتائج

  • /sessions/<id>: جدول زمني للأحداث + شريط أيمن يعرض نقاط الجلسة وأي خطأ من محاولة الإرسال. إذا كان مفتاحك يملك evaluations:trigger، يظهر زر إعادة تقييم بجانب زر التصدير، مفيد للجلسات التي لم تُصدر أبداً agent_end، أو لتحديث النقاط بعد نشر مُقيّم جديد. تستقصي القوائس النتيجة الجديدة وتحدّث الشريط الأيمن عند وصولها.
  • /sessions: شبكة جلسات قابلة للتصفية؛ عمود النقاط يعرض حالة تقييم كل جلسة ونقاطها في لمحة.
  • /dashboards: عروض صحة تقييم محفوظة (انظر القوائس أدناه).
شبكة الجلسات مع حبوب حالة تقييم لكل جلسة وشارات نقاط ملونة (helpfulness، factuality، tool_efficiency، safety، coherence) تعرض شبكة الجلسات حالة تقييم كل جلسة ونقاطها في لمحة؛ جعل الشارات الحمراء/الكهرمانية/الخضراء النقاط المنخفضة تبرز.

القوائس

تسمح صفحة القوائس (/dashboards) بحفظ مزيج من تصافي التقييم كعرض مسمى وقابل لإعادة الاستخدام ومراقبة كيفية تطور تلك الشريحة من التقييمات في لمحة. تُشاركت القوائس عبر منظمتك بأكملها؛ يرى الجميع لديهم dashboards:read نفس المجموعة. تثبت كل لوحة:
  • التصافي: نفس الضوابط كصفحة الجلسات: البيئة والحالة والوكيل ونافذة زمنية متدرجة وتصافي نطاق النقاط (key:min..max).
  • تشكيل عرض: مفاتيح النقاط التي تميز، أعتاب صحة أخضر/كهرماني/أحمر، أي لوحات تعرض، وما إذا كنت تطوي إلى أحدث تقييم لكل جلسة.
يعرض كل بطاقة عدد الجلسات المطابقة، تفصيل done/error/timeout، متوسط كل نقطة مميزة، وخط اتجاه صغير. فتح لوحة يعرض اللوحات بحجم كامل؛ تفتح في جلسات توديعك في صفحة الجلسات المصفاة مسبقاً لتلك الشريحة تماماً. تُحسب المقاييس على جانب الخادم على المجموعة المطابقة بأكملها (عبر GET /evaluations/aggregate)، لذا تكون الأرقام دقيقة بدلاً من أخذ عينات. لوحة صحة تقييم مع متوسط أشرطة نقاط لكل بعد مقيّم، تفصيل أداة ok-vs-error، أفضل الأدوات واتجاه أحداث لكل ساعة الصلاحيات: العرض يحتاج كلاً من dashboards:read و evaluations:read؛ الإنشاء والتعديل يحتاج dashboards:write؛ الحذف يحتاج dashboards:delete. يستقبل المسؤول التمهيدي جميع هذه تلقائياً.

استكشاف الأخطاء والإصلاح

توجد جلسات لكن لا تُنشأ تقييمات. تأكد من تعيين EVALUATOR_ENDPOINT على عملية الخادم، وأن الخادم والمُقيّم يتشاركان نفس قيمة EVALUATOR_TOKEN، وأن نقطة المسار /health الخاصة بالمُقيّم قابلة للوصول من الخادم. مع عدم تعيين EVALUATOR_ENDPOINT خط الأنابيب عديم التأثير. تقييمات قيد الطيران تتراكم. استعلم GET /evaluation-jobs لترى طابور الطيران. فتش attempt_count و next_attempt_at و last_error على كل صف. الأسباب الشائعة: خدمة المُقيّم غير قابلة للوصول أو تُرجع 5xx (أعيدت محاولتها مع تراجع)، EVALUATOR_TOKEN خاطئ (401 نهائي)، أو مُقيّم غير متزامن يُرجع pending إلى الأبد (انظر أدناه). اكتملت الجلسات لكن لا تقييم نهائي. استعلم GET /evaluation-jobs?status=polling؛ النتيجة قد لا تزال قيد الطيران. إذا علقت وظيفة في pending، يواجه الخادم مشكلة في الوصول إلى المُقيّم؛ تحقق من أن المُقيّم مرفوع وأن EVALUATOR_TOKEN يطابق. HTTP 401 from evaluator: invalid bearer token. EVALUATOR_TOKEN على الخادم لا يطابق القيمة التي عُدت خدمة المُقيّم معها. يجب أن تكون متطابقة. مُقيّم غير متزامن يُرجع pending للأبد. يستقصي الخادم GET /evaluate/{job_id} حتى يُرجع المُقيّم done أو error، أو حتى تنقضي EVALUATOR_MAX_POLL_DURATION_SECS (افتراضي 1 ساعة). بعد الحد يُسجل التقييم كـ timeout ويُزال من طابور الطيران. ارفع EVALUATOR_MAX_POLL_DURATION_SECS إذا كان مُقيّمك بشكل شرعي يحتاج أكثر من الافتراضي.

الخطوات التالية

  • مهارة وكيل المُقيّم: اطلب من وكيل ترميز أن يصمم أبعادك ضد جلسات حقيقية وينشئ هذه الخدمة لك.
  • Python SDK: أصدر أحداث agent_end التي تُثير التسجيل.
  • مفاتيح API: صلاحيات evaluations:read و evaluations:trigger.
  • عمليات التدقيق: ميزة جودة مؤتمتة أخرى من Observability، للمراجعة المستندة إلى السياسة.