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
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
289 lines
8.6 KiB
Markdown
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`
|