homelab-codex-ws/services/kb-postgres/init/003_chunk_model_key.sql

18 lines
839 B
MySQL
Raw Permalink Normal View History

feat(kb): faza 3 krok 1 — porządki po pilocie retrieval (śmieć + dedup + klucz modelu) Migracja 003 (UNIQUE+model, excluded_reason) zastosowana na żywej bazie kb-postgres@PIHA (2683 chunki, bez DELETE). Kalibracja heurystyki ocr_junk (3 sygnały z planu §3.1) ujawniła realną sprzeczność z planem: sygnał 1 (dowolny znak kontrolny) fałszywie łapał paperless:119 (wymagany aktywny) i legalny angielski tekst — próg doprecyzowany do >=5 wystąpień na podstawie rozkładu na korpusie. 8 chunków oflagowanych ocr_junk po odjęciu potwierdzonych fałszywych alarmów (kalendarz, mikro-fragmenty referencyjne). Dedup: SQL z planu (exact content hash) znalazł 2 pary, ale nie wykrył znanego z pilota duplikatu paperless:14≡74 (różne OCR, 99.2% chunków identycznych treściowo) — dodany fuzzy check na potwierdzenie. Odrzucono 3 kandydatury o wysokim nakładaniu jako różne wersje/typy dokumentów dzielące boilerplate PZU, nie duplikaty. 130 chunków oflagowanych duplicate + entities[duplicate_of] na 3 kopertach. chunk_embed.py: heurystyka is_ocr_junk() przed embedem (junk -> insert bez wywołania Ollamy, embedding=NULL), ON CONFLICT rozszerzony o model, nowy licznik chunks_junk_flagged w bilansie, testy (kody kreskowe, mojibake nie-junk, dot-leader, idempotencja, model w kluczu konfliktu). Weryfikacja: 7 zapytań eval-setu z WHERE excluded_reason IS NULL — żadne trafienie nie degraduje, kontrole negatywne bez zmian (>0.55), śmieć zniknął z top-5 zapytania 2, paperless:119 pozostał aktywnym trafieniem. Bilans: 2545 aktywne / 130 duplicate / 8 ocr_junk. Co najmniej 3 decyzje wymagały zatrzymania i potwierdzenia z Oskarem w sesji (kalibracja progu sygnału 1, dołączenie 14≡74 mimo braku exact-hash matcha, odrzucenie 3 fałszywych kandydatur dedup) — plan przewidywał, że heurystyka będzie się mylić; wszystkie decyzje udokumentowane w transkrypcie sesji. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 17:17:18 +02:00
-- KB spine: document_chunk — unique-key fix + exclusion flag
-- Additive: does not modify 001_envelope.sql or 002_chunks.sql.
-- Version: 003 — chunk model key + excluded_reason (module 5, phase 3, plan §3.3)
--
-- (a) UNIQUE rozszerzony o model — bez tego drugi model embeddingów cicho się no-opuje
-- na ON CONFLICT DO NOTHING (finding z review kroku 6 fazy 2).
-- (b) excluded_reason — flaga wykluczenia chunka z retrievalu i kompilacji
-- (NULL = aktywny; 'ocr_junk' | 'duplicate').
ALTER TABLE document_chunk
DROP CONSTRAINT IF EXISTS document_chunk_envelope_id_chunk_index_key;
ALTER TABLE document_chunk
ADD CONSTRAINT document_chunk_envelope_chunk_model_key
UNIQUE (envelope_id, chunk_index, model);
ALTER TABLE document_chunk
ADD COLUMN IF NOT EXISTS excluded_reason TEXT; -- NULL = aktywny