feat(maria): triaj — raspuns pentru utilizatori, escaladare automata la programatori
Pe captura cu ORA-06550, avand in context chiar intrarea din dictionar care spune
"nu se rezolva din aplicatie", modelul i-a raspuns unui contabil sa verifice
schema de date si sa foloseasca "procedura alternativa MI_pack_parteneri_old" —
inventata. Si nu escalada, fiindca escaladarea se declansa doar cand NU exista
acoperire in documente, iar aici exista.
rag/triaj.py, trei decizii inaintea modelului:
- **Mesaj prea vag.** "Am o eroare" -> Maria cere operatiunea, ecranul si textul
erorii, in loc sa ghiceasca. Regula e ingusta: text scurt, fara captura, fara cod.
- **Erori marcate "Intotdeauna"/"Imediat" in dictionar** (9 din 29) -> raspunsul se
compune din campurile dictionarului, fara model, si pleaca automat la suport cu
referinta si captura. Textul de acolo e scris pentru clienti; parafrazarea lui nu
adauga nimic si poate strica tot.
- **Urgenta se intreaba, nu se deduce.** Raspunsul ("ma blocheaza" / "pot continua")
se ataseaza escaladarii deschise, nu deschide alta referinta. Fereastra 30 min.
In plus: SYSTEM_PROMPT interzice explicit vocabularul tehnic (procedura, schema,
tabela, PL/SQL, compilare, sesiune) si propunerile de verificat baza de date; cele
mai tehnice cinci intrari din dictionar rescrise in limbaj de client.
Teste: 85 pass. Calibrare 21/21. Reindexare: 5 embeddings noi, 164 refolosite.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -374,6 +374,37 @@ cosinus si BM25 — la o captura de ecran, OCR-ul aduce zeci de tokeni de zgomot
|
||||
Codul se cauta oriunde in text, nu ca token intreg: OCR-ul lipeste `[Oracle][ODBC]`
|
||||
de cod si scoate `OraJORA-06550`.
|
||||
|
||||
### Triaj: cine primeste raspuns, cine primeste intrebari
|
||||
|
||||
Nu orice mesaj e o intrebare, si nu orice raspuns e util. `rag/triaj.py` ia trei
|
||||
decizii inaintea modelului:
|
||||
|
||||
**Mesaj prea vag.** „Am o eroare" nu spune nimic. Maria cere operatiunea, ecranul si
|
||||
textul erorii (sau o captura) — nu ghiceste si nu deranjeaza suportul cu atat. Regula
|
||||
e ingusta deliberat: doar text scurt, fara captura si fara cod de eroare, in care apar
|
||||
cuvinte de acuza („nu merge", „imi da"). „Cum trimit D406" trece nestingherit.
|
||||
|
||||
**Erori care oricum ajung la programatori.** Dictionarul de erori Oracle are pe fiecare
|
||||
intrare campul `cand suni suportul`. Noua incep cu „Intotdeauna" sau „Imediat" — nu se
|
||||
rezolva din aplicatie. Pentru astea raspunsul se compune **direct din campurile
|
||||
dictionarului, fara model**, iar mesajul (si captura) pleaca automat la suport, cu
|
||||
referinta.
|
||||
|
||||
De ce fara model: avand in context chiar intrarea care spune „nu se rezolva din
|
||||
aplicatie", modelul a raspuns unui contabil sa *„verifice schema de date din aplicatia
|
||||
ROA sau sa foloseasca procedura alternativa `MI_pack_parteneri_old`"* — o procedura pe
|
||||
care a inventat-o. Textul din dictionar e deja scris pentru clienti; parafrazarea lui
|
||||
nu adauga nimic si poate strica tot. Pentru restul erorilor, unde utilizatorul chiar
|
||||
are ce incerca, raspunde modelul — cu interdictii explicite de vocabular in
|
||||
`SYSTEM_PROMPT` (procedura, schema, tabela, PL/SQL, compilare…).
|
||||
|
||||
**Cat e de urgent.** Aceeasi eroare poate bloca omul complet sau poate fi ocolita pana
|
||||
maine, si nu se deduce din text. Maria intreaba, iar raspunsul lui se ataseaza
|
||||
escaladarii deschise (`completari` in jurnal, plus un mesaj la suport), nu deschide
|
||||
alta referinta. Fereastra e de 30 de minute (`consumer.PENDING_TTL_S`), tinuta in
|
||||
`~/.maria-bridge/escalations/pending.json`; un mesaj cu captura sau cu alt cod de
|
||||
eroare e tratat ca intrebare noua, nu ca raspuns la intrebarea de urgenta.
|
||||
|
||||
### Recalibrarea, cand se schimba documentele
|
||||
|
||||
Pragurile sunt masurate, nu alese din burta — si se **muta** cand se schimba
|
||||
|
||||
Reference in New Issue
Block a user