CAI Technology
Menu ☰
leta · · 12 min citire

Anti-halucinare juridic: chatbot pe 2,8 milioane de documente RO

Cum am eliminat halucinațiile dintr-un chatbot juridic românesc cu un pipeline de citation grounding pe 2,8 milioane de documente legislative.

CAI Technology · Ultima revizuire: 30.04.2026
Anti-halucinare juridic: chatbot pe 2,8 milioane de documente RO

Cum scoatem halucinațiile dintr-un chatbot juridic pe 2,8 milioane de documente românești

Un avocat ne-a trimis un screenshot anul trecut: un chatbot juridic generic îl asigura, cu citare cu tot, că articolul 187 alineatul (3) din Codul fiscal îi permite o deducere pe care o solicita un client. Articolul nu există. Alineatul, cu atât mai puțin. Citarea era fabricată cu o încredere care a făcut clientul să creadă că dreptul îl protejează — până la prima notificare ANAF.

Acel screenshot a fost punctul de pornire pentru pipeline-ul Anti-Halucinare pe care l-am construit pentru Leta, asistentul juridic al CAI Technology pentru piața românească. În acest articol explicăm cum un chatbot juridic ajunge să mintă cu siguranță și de ce soluția nu este un model mai mare, ci o arhitectură care refuză să răspundă fără sursă.

TL;DR

De ce halucinează chatboții juridici

Un model de limbaj nu „știe” articole de lege. Reproduce, statistic, ce tipar se potrivește cel mai bine cu întrebarea. În drept, formatul Codul X, articolul Y, alineatul Z apare de zeci de mii de ori în corpus. Modelul învață că acest format urmează adesea o întrebare juridică. Dacă întrebarea nu are un răspuns clar în datele de antrenament, modelul completează cu cea mai plauzibilă combinație numerică — nu cu adevărul.

Aceasta nu este o eroare de implementare. Este comportamentul corect al unui model auto-regresiv, aplicat pe o sarcină pentru care nu a fost construit. Modelul nu minte; nu are cum să distingă între a reproduce un fapt și a fabrica unul, pentru că, la nivelul tokens-urilor, sunt aceeași operațiune.

Concret, am rulat aceeași listă de 1.200 de întrebări reale colectate de la clienți avocați, prin trei configurații:

Diferența între RAG simplu și pipeline-ul nostru nu este o îmbunătățire incrementală. Este diferența între un sistem care încearcă să răspundă corect și unul care refuză să răspundă greșit.

Arhitectura: patru porți între întrebare și răspuns

Pipeline-ul Anti-Halucinare are patru componente care funcționează ca o pâlnie. O întrebare nu trece la următoarea poartă dacă nu îndeplinește condiția curentă.

Poarta 1 — Clasificare de scop

Înainte de a căuta în corpus, întrebarea este analizată de un clasificator antrenat pe tipuri de cereri juridice românești. Dacă întrebarea este în afara scopului (de exemplu „ce vreme va fi mâine în Cluj?”), pipeline-ul răspunde direct: „Această întrebare este în afara expertizei mele juridice.” Niciun token de răspuns substantiv nu este generat fără sursă.

Poarta 2 — Recuperare hibridă

Corpusul Leta conține peste 2,8 milioane de documente: legislație consolidată, jurisprudență ÎCCJ, decizii ale curților de apel, soluții fiscale ANAF, ghiduri ANRMAP. Recuperarea folosește două metode în paralel:

Rezultatele sunt fuzionate cu reciprocal rank fusion și se păstrează top-20 fragmente. Această dublă căutare este esențială pentru limba română: căutarea vectorială prinde sinonime și parafraze („concediere” vs. „desfacerea contractului”), iar BM25 prinde formele exacte ale articolelor de lege, unde sinonimele nu sunt admise.

Poarta 3 — Grounding obligatoriu

Aici se sparg majoritatea halucinațiilor. Modelul generativ primește întrebarea și fragmentele recuperate, cu instrucțiunea explicită: orice afirmație factuală trebuie să fie marcată cu un identificator de fragment. Răspunsul este apoi parsat și fiecare claim este validat:

pentru fiecare afirmație din răspuns:
    dacă conține referință legală (articol, alineat, hotărâre, decizie):
        extrage textul fragmentului citat
        caută textul exact în documentul sursă
        dacă nu se găsește potrivire ≥ 95% similaritate text:
            marchează afirmația ca neacoperită
    
dacă există afirmații neacoperite:
    respinge răspunsul, regenerează cu prompt mai strict
    după 3 încercări eșuate: răspunde „nu am o sursă suficientă pentru a răspunde"

Validarea este textuală, nu semantică. Verifică dacă textul citat există efectiv în documentul indicat. Această decizie este deliberată: o validare semantică ar permite modelului să „interpreteze” sursa, ceea ce este exact comportamentul pe care vrem să-l blocăm.

Poarta 4 — Verificare de coerență

Ultima poartă verifică dacă afirmațiile interne ale răspunsului nu se contrazic. Folosim un al doilea model, mai mic, antrenat să detecteze contradicții între perechi de propoziții. Dacă răspunsul afirmă „X este permis” într-un paragraf și „X nu este permis” în altul, este returnat cu eroare și regenerat.

Ce am învățat construind asta

Pe parcursul a două generații de pipeline am eliminat ipoteze pe care le-am crezut adevărate la început.

Modelele mai mari nu sunt soluția. Am testat versiuni open-source la diverse scale, fine-tuned pe corpus juridic românesc. Modelele mai mari halucinează mai puțin într-adevăr, dar halucinează mai convingător. Un avocat detectează ușor o citare greșită grosolană; o citare fabricată cu numerotare plauzibilă, sintaxă corectă și ton academic este aproape imposibil de distins de una reală. Mărimea modelului mută riscul de la „eroare evidentă” la „eroare ascunsă”. Asta este mai rău, nu mai bine.

Recuperarea pură nu este suficientă. Un sistem RAG fără grounding obligatoriu reduce halucinațiile, dar nu le elimină. Dacă fragmentul recuperat tratează un caz similar dar nu identic, modelul va „extrapola” cu încredere. Singura barieră fiabilă este să forțezi modelul să citeze textual și apoi să verifici că textul citat este în sursă.

Tokenizarea contează enorm pentru limba română. Multe modele tokenizează cuvintele românești foarte fragmentat, ceea ce strică similaritatea cosinus pe embeddings. Un fine-tune pe corpus juridic românesc, cu tokenizator dedicat, a îmbunătățit recall-ul căutării vectoriale cu peste 20 de procente. Citatele cu diacritice corecte trebuie să se potrivească exact cu cele din corpus; orice normalizare lossy (transformare la ASCII) introduce erori.

Refuzul este un feature. La început am încercat să maximizăm acoperirea — vrem ca Leta să răspundă la cât mai multe întrebări. După șase luni am inversat: vrem ca Leta să răspundă numai când răspunsul este verificabil. Un avocat preferă „nu am o sursă suficientă” cu o sugestie să consulte direct legislația, în locul unei citări fabricate. „Nu știu” este un răspuns juridic valid; ficțiunea cu aer de certitudine nu este.

Compromisuri reale

Acest pipeline nu este gratuit:

Ce înseamnă asta pentru un avocat care evaluează un asistent AI

Trei întrebări care, după experiența noastră, separă instrumentele utilizabile profesional de cele care arată bine la demo:

  1. „Pot vedea sursa pentru fiecare afirmație?” Dacă răspunsul nu poate fi marcat fragment cu fragment cu un document oficial, nu este utilizabil profesional. Citările simulate la sfârșit de paragraf nu sunt suficiente — pot fi fabricate.

  2. „Ce face când nu știe?” Un asistent care răspunde mereu cu siguranță la orice este un risc. Cereți să vedeți comportamentul pe întrebări tendențioase sau pe legislație recentă pe care nu o poate avea în corpus.

  3. „Cum gestionați actualizarea corpusului?” Legislația românească se modifică săptămânal. Un corpus indexat acum șase luni va greși pe modificări recente. Procedura de re-indexare și de retragere a documentelor abrogate este un indicator de maturitate operațională.

Concluzie operațională

Construirea unui asistent juridic românesc fără halucinații este o problemă de inginerie, nu de magie. Soluția nu este un model mai mare sau o tehnică nouă de prompt; este un pipeline conservator care preferă tăcerea în locul ficțiunii. Pentru avocați, jurnaliști de investigație și consultanți fiscali, acest profil este nenegociabil. Pentru o platformă SEO care optimizează engagement, este greșit.

Leta este construită explicit pentru primul tip de utilizator. Dacă acea precizie contează în practica dumneavoastră, vă invităm la o demonstrație tehnică de 30 de minute pe corpusul propriu al firmei — testați direct, cu cazurile reale care v-au făcut probleme cu un chatbot generic.

Articole conexe

Surse externe

Următorul pas

Dacă echipa dumneavoastră evaluează un asistent juridic AI și aveți nevoie de o conversație tehnică despre arhitectură, ne puteți contacta direct pentru o consultație de 30 de minute fără cost.

Începem cu o conversație de 30 de minute.

Audit AI-readiness gratuit pentru companii peste 50 angajați. Răspundem în 24 de ore.