Citation grounding în RAG pentru drept și audit
Un LLM care fabrică o trimitere la „art. 14 alin. (2) din OPANAF 1.581/2025" e mai periculos decât unul care spune „nu știu".
Citation grounding în RAG pentru drept și audit
Un LLM care fabrică o trimitere la „art. 14 alin. (2) din OPANAF 1.581/2025” e mai periculos decât unul care spune „nu știu”. În drept și audit, o citare greșită trece de trei revizuiri interne și pică abia la instanță — pentru că sună corect. Citation grounding rezolvă exact această asimetrie: leagă fiecare propoziție generată de un pasaj sursă verificabil, cu offset la nivel de caracter, nu la nivel de document.
Arhitectura minimă care ține
Diferența dintre un RAG „cu link” și un sistem cu grounding real stă în trei piese: un retriever care returnează chunk-uri cu ID stabil, un generator forțat să emită citări inline în format structurat, și un validator post-generare care respinge orice claim ne-ancorat.
Constrained decoding e piesa pe care echipele o sar cel mai des. Fără el, modelul învață să pună [1] decorativ la sfârșitul frazei, nu la cuvântul care are nevoie de sursă. Formatul pe care îl folosim în producție:
{
"claim": "Termenul de notificare ANSPDCP este 72 ore de la constatare.",
"span": {"doc_id": "gdpr-art33", "start": 1204, "end": 1367},
"verbatim": "notification to the supervisory authority... not later than 72 hours"
}
Trei capcane pe care le vezi doar în producție
Capcana 1 — chunking pe pagini, nu pe unități semantice. Un articol de lege împărțit la 500 tokeni taie alineatul în două. Retrieverul aduce jumătatea greșită, generatorul citează corect din ce a primit, iar avocatul găsește contextul lipsă la revizuire. Splitter-ul trebuie să respecte articol/alineat/literă, ancorat pe schema oficială EUR-Lex Formex.
Capcana 2 — citarea unei versiuni consolidate depășite. Codul fiscal are versiune lunară. Dacă indexul e din februarie 2026 și ANAF a publicat modificarea în martie, sistemul răspunde cu încredere dintr-o normă abrogată. Fix: pin explicit pe celex_id + dată consolidare la ingest și refuz de răspuns când sursa depășește N zile pe domenii sensibile. Pentru obligațiile NIS2 în implementarea românească, unde reglementarea încă se sedimentează, threshold-ul e 30 de zile.
Capcana 3 — validator care verifică prezența citării, nu semantica. Un claim cu span atașat e ok formal, dar dacă spanul spune „operatorul poate refuza cererea” și modelul a scris „operatorul trebuie să refuze cererea”, grounding-ul e o minciună împachetată curat. Rulează un NLI-check (MultiNLI) între claim și span verbatim; sub 0.85 entailment, reject și reîncearcă.
Auditul unui RAG juridic nu e despre BLEU sau ROUGE. E despre câte răspunsuri conțin cel puțin un claim ne-verificabil. Metrica pe care o cerem la fiecare deploy este „faithfulness precision”, nu recall. Vezi și ENISA — Multilayer Framework for Good Cybersecurity Practices for AI pentru cerințele de trasabilitate impuse sistemelor AI cu impact ridicat, plus AI Act Art. 13 pe obligația de transparență documentată.
Poziția CAI pe RAG-uri pentru domenii reglementate: grounding-ul nu e feature, e precondiție de intrare în producție. Un pipeline care nu poate demonstra spanul sursă pentru fiecare propoziție nu are ce căuta la un client din audit, drept sau achiziții publice — indiferent cât de bine sună răspunsurile în demo.