توثيق ERPOSالمرجع التنفيذي للمطورين
الرئيسية›فهرس الخوارزميات›استرجاع النصوص النظامية والتحقق من الاستشهاد

استرجاع النصوص النظامية والتحقق من الاستشهادLegal retrieval and citation checking

خوارزميةمتطلب وارد في الملفات غير مثبت

مسار مباشر لأرقام المواد، وبحث هجين بمرشح تاريخ داخل كل مسار، وإعادة ترتيب، وعتبة امتناع، وتوليد بمعرّفات النسخ، ومدقق برمجي يرفض أي رقم أو استشهاد غير مسنود.

الميزات التي تستخدمها: B29 المساعد القانوني (RAG)، B15 مكتبة الأنظمة واللوائح بإصداراتها، B31 محلل صكوك الأحكام والعقود

1الغرض والمصطلحات القانونية المرتبطة

إجابة من النص فقط مع استشهاد ونسخة، أو امتناع.

2المدخلات وأنواعها ومصادرها

سؤال مقنّع، تاريخ السريان، مرشح الأنظمة، فهرس Qdrant (كثيف + متناثر)، العتبات.

3المخرجات والحالات

بطاقة مادة، أو إجابة مع استشهادات، أو امتناع بأقرب المواد وقائمة الأنظمة.

4خطوات المعالجة بالتسلسل

  1. تقنيع.
  2. كشف مرجع صريح (أرقام، كلمات ترتيبية، اختصارات) ← مسار مباشر.
  3. تطبيع وتوسيع الاختصارات.
  4. BGE-M3 كثيف ومتناثر؛ بحث 40 + 40 مع مرشح التاريخ داخل كل بحث.
  5. RRF ← 30.
  6. إعادة ترتيب ← 5–8.
  7. عتبة الكفاية ← امتناع بلا نموذج.
  8. توليد بالمعرّفات [V-…].
  9. المدقق.

5الشروط والفروع والاستثناءات

التاريخ أقدم من أقدم نسخة ← رسالة صريحة. فشل المدقق مرة لجملة غير مستشهدة ← إعادة توليد مرة ثم امتناع.

6Pseudocode كامل

Pseudocode
function ask(q, as_of, laws):
    q = mask(q)
    if ref := parse_explicit_reference(q):
        return ArticleCard(version_in_force(ref, as_of))
    qn = expand_aliases(normalize(q))
    f  = filter(effective_from <= as_of and effective_to >= as_of and law in laws)
    dense  = qdrant.search(embed_dense(qn),  filter=f, limit=40)
    sparse = qdrant.search(embed_sparse(qn), filter=f, limit=40)
    cands  = rrf(dense, sparse)[:30]
    ranked = rerank(qn, cands)[:8]
    if ranked[0].score < T_answer: return Abstain(nearest=[c for c in ranked if c.score >= T_near])
    for attempt in 1..2:
        ans = llm.generate(SYSTEM_RULES, q, ranked)          # q is data, not instructions
        verdict = check(ans, ranked)
        if verdict.ok: return Answer(ans, citations=verdict.ids)
        if verdict.reason != "UNCITED_SENTENCE": break
    return Abstain(nearest=ranked)

function check(ans, ranked):
    ids = {r.version_id for r in ranked}
    for s in sentences(ans):
        if not s.cited_ids: return FAIL("UNCITED_SENTENCE")
        if not s.cited_ids ⊆ ids: return FAIL("UNKNOWN_ID")
        for num in numbers(s):
            if num not in numbers(text_of(s.cited_ids)): return FAIL("NUMBER_NOT_IN_SOURCE")
        for quote in quotes(s):
            if normalize(quote) not in normalize(text_of(s.cited_ids)): return FAIL("QUOTE_MISMATCH")
        if contains_advice(s): return FAIL("ADVICE")
    return OK

7مثال اصطناعي خطوة بخطوة

سؤال اصطناعي: «م 187 مرافعات» ← مسار مباشر ببطاقة المادة النافذة في التاريخ، بلا نموذج. سؤال: «ما مدة الاعتراض في المستعجل؟» ← بحث ← إجابة ترفض إن ذكرت رقمًا غير موجود في المادة المسترجعة.

8حالات الفشل والتعامل معها

الخدمة متوقفة ← «غير متاح» بلا بديل خارجي. النموذج بطيء ← مهلة ثم امتناع.

9منع التكرار والتزامن

عديم الحالة؛ حد استخدام لكل مستخدم.

10الصلاحيات والتدقيق والأمن

لا اتصال خارجي، لا نص خام، السؤال بيانات.

11اختبارات الوحدات والتكامل والقبول

المعرّفالنوعالسيناريوالنتيجة المتوقعة
ALG-RG-01وحدةمدقق: رقم مزروعFAIL
ALG-RG-02وحدةمدقق: معرّف غير مسترجعFAIL
ALG-RG-03تقييمالمجموعة الذهبيةمقاييس الدليل المقترحة غير مثبت
ALG-RG-04أمنيحقن تعليماتلا أثر

12ما هو قاعدة تقنية وما هو قرار قانوني

قاعدة تقنية (ينفذها المطور)قرار قانوني (يعتمده مختص)
البحث والدمج والعتبات والمدقققائمة الأنظمة، نص التنبيه، المجموعة الذهبية