nordabiz/docs/PLAN_ZOPK_KNOWLEDGE_BASE_IMPROVEMENTS.md
Maciej Pienczyn b91c59a312
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
chore: Update docs, roadmap, and remove stale ralph-loop config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 18:13:03 +01:00

289 lines
8.6 KiB
Markdown

# Plan rozwoju bazy wiedzy ZOPK
**Data utworzenia:** 2026-01-17
**Status:** ✅ UKOŃCZONE (2026-02-09) — wszystkie 5 priorytetów zrealizowanych
## Stan obecny (przed rozpoczęciem)
| Komponent | Status | Wartość |
|-----------|--------|---------|
| Artykuły scraped | ✅ | 132/163 (81%) |
| Artykuły extracted | ✅ | 120/132 (91%) |
| Chunks | ✅ | 412 |
| Fakty | ✅ | 3,414 |
| Encje | ✅ | 1,309 |
| Embeddings | ✅ | 412/412 (100%) |
| Integracja NordaGPT | ✅ | Semantic search działa |
| Automatyczny pipeline | ✅ | Cron co 1h |
---
## Priorytet 1: Panel admina bazy wiedzy
**Status:** ✅ Zrealizowane
**Szacowany czas:** 1-2 dni
### Cel
Dashboard w `/admin/zopk/knowledge` z podglądem i zarządzaniem bazą wiedzy.
### Wymagane funkcje
1. **Dashboard główny** (`/admin/zopk/knowledge`)
- Statystyki: chunks, fakty, encje, embeddings
- Wykresy: ekstrakcje w czasie, top encje
- Przyciski szybkich akcji (scraping, ekstrakcja, embeddings)
2. **Lista chunks** (`/admin/zopk/knowledge/chunks`)
- Tabela z paginacją
- Filtrowanie po artykule źródłowym
- Podgląd treści chunk
- Edycja/usunięcie chunk
- Status embeddingu (✓/✗)
3. **Lista faktów** (`/admin/zopk/knowledge/facts`)
- Tabela z paginacją
- Filtrowanie po typie faktu (financial, date, decision, etc.)
- Weryfikacja faktu (✓ zweryfikowany / ✗ błędny)
- Edycja faktu
- Link do źródłowego artykułu
4. **Lista encji** (`/admin/zopk/knowledge/entities`)
- Tabela z paginacją
- Filtrowanie po typie (company, person, place, project)
- Liczba wzmianek
- Możliwość łączenia duplikatów (Priorytet 4)
- Edycja opisu encji
5. **Szczegóły artykułu** (`/admin/zopk/knowledge/article/<id>`)
- Pełna treść scraped
- Lista wyekstraktowanych chunks
- Lista wyekstraktowanych faktów
- Lista encji
- Możliwość re-ekstrakcji
### Pliki do utworzenia
- `templates/admin/zopk_knowledge_dashboard.html`
- `templates/admin/zopk_knowledge_chunks.html`
- `templates/admin/zopk_knowledge_facts.html`
- `templates/admin/zopk_knowledge_entities.html`
### Pliki do modyfikacji
- `app.py` - nowe endpointy
- `zopk_knowledge_service.py` - metody CRUD
---
## Priorytet 2: Poprawa jakości odpowiedzi
**Status:** ✅ Zrealizowane
**Szacowany czas:** 1 dzień
### Cel
Lepsze formatowanie odpowiedzi NordaGPT z linkami do źródeł.
### Wymagane zmiany
1. **Linki do źródeł**
- Zamiast: "Według Google News z 31 grudnia 2025..."
- Ma być: "Według [trojmiasto.pl](https://trojmiasto.pl/...) z 31 grudnia 2025..."
2. **Formatowanie odpowiedzi**
- Nagłówki dla sekcji
- Listy wypunktowane dla wielu faktów
- Wyróżnienie kluczowych danych (pogrubienie)
3. **Pewność odpowiedzi**
- Gdy brak danych w bazie: "Nie mam informacji na ten temat w bazie wiedzy ZOPK"
- Gdy dane niepewne: "Według dostępnych informacji (pewność: średnia)..."
4. **Źródła na końcu odpowiedzi**
```
📚 Źródła:
- [trojmiasto.pl] Kongsberg zainwestuje na Pomorzu (2025-11-23)
- [defence24.pl] Norweska fabryka w Rumi (2025-11-25)
```
### Pliki do modyfikacji
- `nordabiz_chat.py` - metoda `_get_zopk_knowledge_context()`
- `nordabiz_chat.py` - system prompt dla ZOPK
---
## Priorytet 3: Timeline ZOPK na stronie /zopk
**Status:** ✅ Zrealizowane
**Szacowany czas:** 2-3 dni
### Cel
Wizualna oś czasu projektu ZOPK pokazująca kamienie milowe.
### Wymagane funkcje
1. **Tabela `zopk_milestones`**
```sql
CREATE TABLE zopk_milestones (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
milestone_type VARCHAR(50), -- announcement, decision, construction, completion
target_date DATE,
actual_date DATE,
status VARCHAR(20), -- planned, in_progress, completed, delayed
source_news_id INTEGER REFERENCES zopk_news(id),
source_fact_id INTEGER REFERENCES zopk_knowledge_facts(id),
icon VARCHAR(50),
color VARCHAR(7),
is_featured BOOLEAN DEFAULT FALSE,
display_order INTEGER,
created_at TIMESTAMP DEFAULT NOW()
);
```
2. **Automatyczne tworzenie milestones**
- Ekstrakcja dat z faktów (np. "budowa rozpocznie się w 2027")
- Kategoryzacja: announcement, decision, construction_start, completion
- Przypisanie do projektów (Kongsberg, PEJ, Baltic Power, Via Pomerania)
3. **UI Timeline na /zopk**
- Pionowa oś czasu (scrollowalna)
- Kamienie milowe z ikonami
- Kolory: zielony (completed), niebieski (in_progress), szary (planned)
- Kliknięcie → szczegóły z linkiem do źródła
4. **Panel admina dla milestones**
- `/admin/zopk/milestones`
- Dodawanie/edycja/usuwanie
- Zmiana kolejności (drag & drop)
### Pliki do utworzenia
- `database/migrations/016_zopk_milestones.sql`
- `templates/admin/zopk_milestones.html`
### Pliki do modyfikacji
- `database.py` - model ZOPKMilestone
- `app.py` - endpointy
- `templates/zopk.html` - sekcja timeline
---
## Priorytet 4: Łączenie duplikatów encji
**Status:** ✅ Zrealizowane
**Szacowany czas:** 1 dzień
### Cel
Automatyczne i ręczne łączenie zduplikowanych encji.
### Znane duplikaty do połączenia
| Encja główna | Duplikaty | Łączna liczba wzmianek |
|--------------|-----------|------------------------|
| Morze Bałtyckie | Bałtyk | 58 + 53 = 111 |
| Polskie Elektrownie Jądrowe | PEJ | ? |
| Władysław Kosiniak-Kamysz | Kosiniak-Kamysz, Wicepremier | ? |
| Kongsberg Defence & Aerospace | Kongsberg | ? |
### Wymagane funkcje
1. **Automatyczne wykrywanie duplikatów**
- Fuzzy matching nazw (pg_trgm similarity > 0.7)
- Porównanie typów encji
- Sugestie do zatwierdzenia przez admina
2. **Panel łączenia** (`/admin/zopk/knowledge/entities/merge`)
- Lista sugerowanych duplikatów
- Wybór encji głównej
- Przycisk "Połącz" → aktualizacja wszystkich referencji
3. **Aliasy encji**
- Tabela `zopk_entity_aliases`
- Encja "Polskie Elektrownie Jądrowe" ma alias "PEJ"
- Wyszukiwanie uwzględnia aliasy
### Pliki do utworzenia
- `database/migrations/017_zopk_entity_aliases.sql`
### Pliki do modyfikacji
- `database.py` - model ZOPKEntityAlias
- `zopk_knowledge_service.py` - metody merge_entities(), get_entity_duplicates()
- `app.py` - endpointy
---
## Priorytet 5: Graf relacji encji
**Status:** ✅ Zrealizowane
**Szacowany czas:** 2-3 dni
### Cel
Wizualizacja powiązań między encjami (podobna do Mapy Powiązań firm).
### Typy relacji do ekstrakcji
| Relacja | Przykład |
|---------|----------|
| `invests_in` | Kongsberg → Rumia Invest Park |
| `manages` | MON → ZOPK |
| `builds` | PEJ → Elektrownia Lubiatowo |
| `located_in` | Baltic Power → Morze Bałtyckie |
| `partners_with` | Westinghouse → Bechtel |
| `employs` | Kongsberg → 500 osób |
### Wymagane funkcje
1. **Ekstrakcja relacji z faktów**
- Analiza AI faktów typu: "Kongsberg zainwestuje w Rumi"
- Prompt: "Wyodrębnij relacje: subject → predicate → object"
2. **Wypełnienie tabeli `zopk_knowledge_relations`**
- Tabela już istnieje (obecnie pusta)
- Kolumny: source_entity_id, target_entity_id, relation_type, confidence_score
3. **Wizualizacja grafu** (`/zopk/graph` lub modal na /zopk)
- Użycie D3.js lub vis.js (jak Mapa Powiązań)
- Węzły = encje (kolorowane po typie)
- Krawędzie = relacje (etykiety)
- Filtrowanie po typie relacji
4. **Panel admina** (`/admin/zopk/knowledge/relations`)
- Lista relacji z paginacją
- Dodawanie/edycja/usuwanie
- Weryfikacja (✓/✗)
### Pliki do modyfikacji
- `zopk_knowledge_service.py` - metoda extract_relations()
- `app.py` - endpointy
- `templates/zopk.html` - sekcja graf lub modal
---
## Harmonogram realizacji
| Priorytet | Zadanie | Szacowany czas | Status |
|-----------|---------|----------------|--------|
| 1 | Panel admina bazy wiedzy | 1-2 dni | ✅ Zrealizowane |
| 2 | Poprawa jakości odpowiedzi | 1 dzień | ✅ Zrealizowane |
| 3 | Timeline ZOPK | 2-3 dni | ✅ Zrealizowane |
| 4 | Łączenie duplikatów encji | 1 dzień | ✅ Zrealizowane |
| 5 | Graf relacji encji | 2-3 dni | ✅ Zrealizowane |
**Łączny szacowany czas:** 7-10 dni
---
## Notatki techniczne
### Istniejące tabele bazy wiedzy
- `zopk_knowledge_chunks` - fragmenty tekstu z embeddingami
- `zopk_knowledge_facts` - wyekstraktowane fakty
- `zopk_knowledge_entities` - rozpoznane encje
- `zopk_knowledge_relations` - relacje między encjami (pusta)
### Istniejące serwisy
- `zopk_knowledge_service.py` - ekstrakcja i wyszukiwanie
- `zopk_content_scraper.py` - scraping treści artykułów
### Istniejący pipeline (cron)
- `scripts/zopk_knowledge_pipeline.py` - uruchamiany co godzinę
- Logi: `/var/log/nordabiznes/knowledge_pipeline.log`