ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
تثبّت — محرّك تحقق مُسنَد للمحتوى الإسلامي (FastAPI + Next.js)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗أداة عربية للتحقق من الاقتباسات القرآنية والحديثية قبل النشر. يعرض كل ادعاء مع النص المسجّل ومصدره والفروق، ويحيل الحالات الشخصية إلى مختص.
docs/VERIFY_SEED.md)، ولكل حكم رابط موضعه في الدرر حيث وُجد.رحلة المستخدم: يلصق منشوراً ← يضغط «تثبّت الآن» ← تظهر بطاقة لكل اقتباس فيها الحكم والنص المعتمد والمصدر والفروق. داخل المحرك أربع خطوات؛ خطوة واحدة فقط تعتمد على التعلم الآلي، والباقي قواعد ثابتة ومصادر موثقة:
| الخطوة | ماذا تعالج | الطريقة | نوعها |
|---|---|---|---|
| 1. استخراج وتطبيع | نص المنشور كما لُصق | تقسيم المقاطع؛ تمييز «قال تعالى» و﴿﴾ و«قال رسول الله» وصيغ السؤال («ما صحة حديث…»، «سمعت أن النبي قال…، صحيح؟»، «هل … آية؟»)؛ إحالة السؤال الشخصي (المستوى د) قبل أي بحث، وتمييز السؤال العام؛ توحيد الهمزات (أ إ آ ٱ ← ا) والتاء المربوطة والألف المقصورة، وحذف التشكيل والتطويل وعلامات الترقيم والمسافات الزائدة، وفصل «لا/يا» الملتصقة | قواعد ثابتة |
| 2. اقتراح المصدر | الاقتباس بعد التطبيع، مقابل المصحف كاملاً وقاعدة الأحاديث | BM25 يزن الكلمات المجذّرة؛ TF-IDF على مقاطع الحروف (2–4) مضغوط بـSVD إلى 256 بُعداً مُدرَّب على نصوص الفهرس نفسها، يقيس التشابه بأجزاء الكلمات فيتحمّل الحرف الناقص أو المقلوب؛ RRF يدمج الترتيبين في أفضل 8 مرشحين، ويُضاف إليها كل سجل يحتوي ألفاظ الاقتباس متصلة | تعلم آلي / استرجاع إحصائي |
| 3. تمييز القرآن من الحديث والمطابقة | المرشحون من المصحف والحديث معاً | محاذاة كلمة بكلمة (align.py)؛ النص غير المعلَّم يُنسب إلى المصدر الأعلى تغطية لفظية؛ تحديد السورة والآية أو سجل الحديث؛ إظهار كل كلمة مختلفة | قواعد ثابتة |
| 4. الحكم ودرجة الثقة | نتيجة المحاذاة وبيانات المصدر | الثقة = نسبة كلمات الاقتباس الموجودة بالترتيب في المصدر: تطابق كامل ← «مطابق للنص القرآني» أو حكم الحديث المسجّل؛ آية مقتبسة بتغطية ≥ 60% ← «يختلف عن النص القرآني» مع النص الصحيح؛ نص غير معلَّم يشبه آية، أو حديث بتغطية 60–75% أو بلفظ مختلف ← «يحتاج إلى تحقق إضافي»؛ دون ذلك ← امتناع: «لم يُعثر على تطابق مطابق ضمن قاعدة الأحاديث الحالية» مع البحث في الدرر؛ وسؤال عام بلا نص مطابق ← «سؤال عام خارج نطاق التحقق» | قواعد ثابتة + أحكام منقولة من المصدر |
لماذا لا يكفي البحث النصي التقليدي؟ البحث الحرفي (Ctrl+F) لا يجد الاقتباس إذا تغيّر حرف أو همزة أو التصقت «لا» بما بعدها، ولا يفرق بين «غير موجود» و«يختلف عن النص القرآني»، ولا يحمل درجة الحديث ولا يحيل السؤال الشخصي. القيمة المقاسة للاسترجاع الإحصائي (الشرح والأرقام): مع خطأ إملائي في كلمتين يرفع TF-IDF/SVD إصابة المصدر في المرتبة الأولى من 96.8% (BM25 وحده) إلى 99.7%، ويلتقط BM25 المقاطع القصيرة (87.5% مقابل 68.6%)، والدمج (مع إضافة السجلات التي تحتوي ألفاظ الاقتباس) يبقي الآية الصحيحة بين المرشحين في كل أنواع الخطأ المقاسة. وفي مقارنة آلية بالبحث الحرفي في المصادر نفسها على 585 فحصاً (حالات الإصدار، وكل حديث بثلاث صيغ سؤال، وآية من كل سورة بثلاث صيغ) وصل البحث الحرفي إلى القرار الصحيح مع دليله في 43.6% وتثبّت في 100%: البحث يجد نص الحديث لكنه لا يعطي حكمه، ولا يصحح الآية الناقصة، ولا يفهم صيغة السؤال (الدليل، السكربت).
ما لا يفعله الذكاء الاصطناعي هنا: لا يحكم على صحة حديث، ولا يولّد نصاً أو درجة أو فتوى؛ الدرجة تُنقل كما سجّلها المحدّث من الدرر السنية، ونص الآية من مصحف المجمع. لا يوجد نموذج لغوي توليدي في المسار. BGE-M3 خيار منفصل لم يُستخدم في النتائج المنشورة.
الخلفية:
cd backend
./setup.sh
source .venv/bin/activate
uvicorn app.main:app --reload --port 8000
الواجهة في نافذة أخرى:
cd frontend
npm ci
npm run dev
افتح http://localhost:3000. توثيق API على http://localhost:8000/docs.
الإعدادات من متغيرات البيئة؛ ملف .env.example دليل لها، ولا يحمّله Python تلقائياً. لبناء الفهرس أو تحديثه:
cd backend
.venv/bin/python scripts/build_index.py
في الإنتاج اضبط TATHABBUT_REQUIRE_VERIFIED=true كي لا يُعتمد سجل غير مراجع. عنوان الخلفية يضبط في الواجهة عبر TATHABBUT_API_URL.
cd backend
bash run.sh test # 216 اختباراً
.venv/bin/python scripts/evaluate_release.py --in-process --repeat 3 --output ../docs/evidence/local-smoke.json
.venv/bin/python scripts/benefit_comparison.py # مقارنة النفع بالبحث الحرفي (585 فحصاً)
.venv/bin/python scripts/verify_quran_variants.py --output ../docs/evidence/quran-variants.json # المصحف كاملاً بخمس صيغ
cd ../frontend
npm run typecheck
npm run build
evaluate_release.py مع --in-process يشغّل المحرك داخل العملية ويختبر 49 حالة محددة (×3 عند --repeat 3) ويحتفظ باستجاباتها؛ ومع --base-url https://tathabbut.vercel.app --frontend يختبر النسخة المنشورة. هذه الحالات مختارة لكشف أنماط الفشل، وليست قياساً لدقة عامة على الأحاديث المتداولة.
لمقابلة النص القرآني بحزمة الموسوعة القرآنية الرسمية: scripts/compare_quranpedia.py (انظر QURAN_REFERENCE_CHECK). لفحص جاهزية حزمة التسليم: python3 scripts/check_submission.py من جذر المستودع.
تبدأ كل بطاقة بالخلاصة العملية (ماذا تفعل قبل النشر) وزر المصدر: «فتح الآية في Quranpedia»؛ وللحديث «فتح النتيجة في الدرر السنية» حين يفتح الرابط الموضع المذكور نفسه (dorar.net/h/…، 70 من 72 سجلاً، الفحص)، و«فتح الحديث المشابه في الدرر السنية» للنص المشابه، و«البحث عن النص في الدرر السنية» حين يكون الرابط بحثاً. ثم التفاصيل. المرجعان الوحيدان: Quranpedia (نص المصحف) والدرر السنية (أحكام الأحاديث).
| الرمز | ما يظهر | المعنى |
|---|---|---|
| VERIFIED | «مطابق للنص القرآني» (تطابق مطابق في المصحف المعتمد من Quranpedia) أو «حديث صحيح» / «حديث حسن» بحسب الدرر السنية | تطابق لفظي؛ والحكم منقول كما سجّله المحدّث |
| NOT_AUTHENTIC | «حديث ضعيف» / «حديث موضوع» / «لا أصل له» بحسب الدرر السنية | نص مطابق لحديث سُجّل حكمه في الدرر السنية |
| ALTERED | «يختلف عن النص القرآني» | النص المدخل يختلف عن النص القرآني المعتمد في Quranpedia؛ تُعرض الكلمة المدخلة والصحيحة والسورة والآية |
| NO_ORIGIN | حديث: «لم يُعثر على تطابق مطابق ضمن قاعدة الأحاديث الحالية في منصة تثبّت» · آية: «لم يُعثر عليه في المصحف» | قاعدة الأحاديث في المنصة محدودة: النتيجة لا تعني أن الحديث غير موجود في الدرر السنية ولا تحكم عليه، والتوصية البحث عنه كاملًا في الدرر السنية. أما القرآن فالقاعدة المصحف كاملًا |
| DISPUTED | «اختلف المحدّثون في حكمه» | تُعرض الأحكام المسجّلة دون ترجيح |
| REFER | «سؤال شخصي» | يُحال إلى مختص |
| NEEDS_REVIEW | «يحتاج إلى تحقق إضافي» | نتيجة مشابهة وليست تطابقًا مطابقًا؛ يُعرض النص المعتمد وموضع الاختلاف والآيات الأخرى المشتركة في الألفاظ |
| OUT_OF_SCOPE | «سؤال عام» | سؤال عام وليس آية أو حديثاً منقولاً (مثل «لماذا…؟»)؛ لا يجيب عنه تثبّت ولا يُفتي، ويطلب لصق النص المنسوب للتحقق منه |
| NO_ORIGIN (طلب بلا نص) | «لا يُنشئ أدلة» | «أعطني حديثاً يثبت هذا الكلام»: لا نص منسوب يُقارن، فلا يُعرض دليل ولا يُقترح نص، ويُطلب لصق النص المنسوب |
الكود والوثائق الأصلية تحت MIT؛ النصوص والخطوط والمكتبات تحت حقوقها الخاصة. بيانات الطلبات لا تُحفظ أو تُسجل في منطق التطبيق؛ خدمات الاستضافة قد تسجل بيانات الاتصال حسب إعداداتها.
العرض المبني على قالب المنظم محفوظ في مجلد التسليم المحلي خارج المستودع؛ القالب وشعاراته لا تشملها رخصة MIT.