nordabiz/docs/PLAN_ZOPK_KNOWLEDGE_BASE_IMPROVEMENTS.md
Maciej Pienczyn 6d1f75bce5 fix(admin): Naprawiono błędne nazwy endpointów w breadcrumbs
Zmieniono admin_dashboard i admin_zopk_dashboard na admin_zopk

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 09:03:01 +01:00

8.5 KiB

Plan rozwoju bazy wiedzy ZOPK

Data utworzenia: 2026-01-17 Status: W trakcie realizacji

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: 🔄 W trakcie 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: Oczekuje 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 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: Oczekuje Szacowany czas: 2-3 dni

Cel

Wizualna oś czasu projektu ZOPK pokazująca kamienie milowe.

Wymagane funkcje

  1. Tabela zopk_milestones

    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: Oczekuje 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: Oczekuje 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 🔄 W trakcie
2 Poprawa jakości odpowiedzi 1 dzień Oczekuje
3 Timeline ZOPK 2-3 dni Oczekuje
4 Łączenie duplikatów encji 1 dzień Oczekuje
5 Graf relacji encji 2-3 dni Oczekuje

Łą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