🇵🇱 Projekt polskojęzyczny | This project is in Polish
Narzędzia, dokumentacja i interfejs użytkownika są w języku polskim.
KoREKtor to zaawansowane narzędzie zaprojektowane, aby wspierać pracodawców w tworzeniu bardziej inkluzywnych i dostępnych miejsc pracy dla osób z niepełnosprawnościami. Aplikacja składa się z dwóch głównych modułów: Analizatora Ogłoszeń o Pracę oraz Asystenta HR.
Moduł ten pozwala na automatyczną analizę ogłoszeń o pracę pod kątem ich dostępności i potencjalnych barier dla kandydatów z niepełnosprawnościami. Użytkownik może wkleić tekst ogłoszenia lub przesłać plik PDF/DOCX. System dokonuje analizy zgodnie z matrycą kryteriów (plik matryca.csv), a następnie generuje szczegółowe raporty.
- 🧠 Inteligentna Analiza: Wykorzystuje duży model językowy (LLM) do oceny treści na podstawie predefiniowanej matrycy kryteriów.
- 📄 Generowanie Raportów: Tworzy dwa rodzaje raportów w formacie
.docx:- Raport Skrócony: Zawiera kluczowe rekomendacje i podsumowanie.
- Raport Pełny: Oferuje szczegółową analizę każdego punktu z matrycy, wraz z cytatami i sugestiami.
- 📊 Wyniki w Formacie JSON: Udostępnia wyniki w formacie JSON do dalszej analizy lub integracji.
To interaktywny chatbot oparty na wiedzy z wbudowanej bazy dokumentów (poradników, raportów, dobrych praktyk) oraz aktualnych informacji ze stron internetowych PFRON. Asystent odpowiada na pytania dotyczące zatrudniania osób z niepełnosprawnościami, obowiązków prawnych, dobrych praktyk HR, dostępności i innych tematów związanych z inkluzywnym miejscem pracy.
- 📚 Baza Wiedzy: Opiera się na starannie wyselekcjonowanych plikach PDF z pełną bibliografią oraz treściach ze stron PFRON
- 🌐 Aktualne Informacje: Automatycznie ładuje treści z 21 stron PFRON z pliku
urls.txt - 🎯 Precyzyjne Odpowiedzi: Dzięki mechanizmowi RAG (Retrieval-Augmented Generation) odpowiedzi są kontekstowe i bazują na treści dokumentów oraz stron internetowych
- 📖 Cytowanie Źródeł: Każda odpowiedź zawiera pełne opisy bibliograficzne dokumentów z numerami stron i sekcjami oraz linki do stron internetowych
- ⚡ Optymalizacja Wydajności: Baza wiedzy jest ładowana tylko raz przy starcie, co zapewnia szybkie odpowiedzi
- 📖 Pełne Opisy Bibliograficzne: System automatycznie ładuje pełne cytowania z pliku
bibliografia.csv - 🔍 Precyzyjne Lokalizacje: Każde źródło zawiera dokładny numer strony i sekcję dokumentu
- 🎯 Czytelne Formatowanie: Źródła wyświetlane są w eleganckim formacie bez fragmentów tekstu
- 🔗 Klikalne Linki URL: Źródła internetowe wyświetlane jako klikalne linki z czystymi tytułami
- 🚫 Koniec Ponownego Ładowania: Baza wiedzy jest tworzona tylko raz przy starcie aplikacji
- 🔄 Inteligentne Cache'owanie: System pamięta przetworzony stan dokumentów PDF
- 📊 Monitoring Zmian: Opcjonalne ręczne przeładowanie przy dodaniu nowych dokumentów
- 💾 Statystyki Bazy Wektorowej: Monitoring rozmiaru i wydajności bazy (18.05 MB, kategoria: mała)
- 📋 Centralna Baza Opisów: Plik
bibliografia.csvzawiera pełne opisy wszystkich dokumentów - 🔧 Łatwa Aktualizacja: Wystarczy edytować plik CSV aby zmienić cytowania
- 📖 Profesjonalne Standardy: Zgodność z akademickimi standardami cytowania
- 🔧 Modularna Struktura: Kod podzielony na specjalizowane komponenty (DocumentManager, Config)
- 🧪 Łatwiejsze Testowanie: 14 testów jednostkowych, możliwość mockowania komponentów
- ⚙️ Centralna Konfiguracja: Wszystkie parametry w jednym miejscu z walidacją
- 🔄 Kompatybilność Wsteczna: Zachowana pełna kompatybilność API z poprzednią wersją
- 🚀 Przygotowanie na Przyszłość: Architektura gotowa na async processing i nowe funkcje
-
Klonowanie Repozytorium:
git clone https://github.com/jaczad/korektor cd korektor -
Utworzenie i Aktywacja Środowiska Wirtualnego:
python -m venv venv source venv/bin/activate # macOS/Linux # lub venv\Scripts\activate # Windows
-
Instalacja Zależności:
pip install -r requirements.txt
-
Ustawienie Klucza API OpenAI (zmienna środowiskowa):
export OPENAI_API_KEY="twój_klucz_api_openai" # macOS/Linux # Windows PowerShell: $env:OPENAI_API_KEY="twój_klucz_api_openai" # Windows CMD: set OPENAI_API_KEY="twój_klucz_api_openai"
-
Uruchomienie Aplikacji:
python app.py
-
Otwórz Przeglądarkę: Przejdź pod adres
http://localhost:7860
Po uruchomieniu aplikacji w przeglądarce pojawią się dwa główne narzędzia:
-
Analizator Ogłoszeń:
- Wklej tekst ogłoszenia w pole tekstowe lub przeciągnij plik PDF/DOCX.
- Kliknij przycisk "Analizuj".
- Wyniki pojawią się w formacie JSON, a poniżej będą dostępne linki do pobrania raportów.
-
Asystent HR:
- Wpisz swoje pytanie w polu tekstowym.
- Kliknij "Wyślij".
- Odpowiedź wraz ze źródłami pojawi się poniżej.
Aplikacja Gradio automatycznie udostępnia API, które pozwala na zdalne wywoływanie funkcji. Poniżej znajdują się przykłady, jak z niego korzystać.
Funkcja analyze_job_ad przyjmuje dwa argumenty: tekst ogłoszenia i opcjonalnie plik. Zwraca trzy wartości: JSON z wynikami, plik z pełnym raportem i plik ze skróconym raportem.
Przykład użycia curl (wysyłanie tekstu):
curl -X POST http://127.0.0.1:7860/run/predict \
-H "Content-Type: application/json" \
-d '{"data": ["Treść przykładowego ogłoszenia o pracę...", null]}'Przykład użycia w Pythonie (requests):
import requests
import json
response = requests.post(
"http://127.0.0.1:7860/run/predict",
json={
"data": [
"Wymagania: 5 lat doświadczenia w branży.", # Tekst ogłoszenia
None # Brak pliku
]
}
)
if response.status_code == 200:
result = response.json()
# Wyniki są w kluczu 'data'
json_output = result['data'][0]
full_report_path = result['data'][1]['name']
short_report_path = result['data'][2]['name']
print("Wyniki JSON:", json.dumps(json_output, indent=2))
print("Ścieżka do pełnego raportu:", full_report_path)
print("Ścieżka do skróconego raportu:", short_report_path)
else:
print("Błąd:", response.text)Funkcja ask_hr_assistant przyjmuje jeden argument: pytanie w formie tekstowej. Zwraca odpowiedź w formacie Markdown.
Przykład użycia curl:
curl -X POST http://127.0.0.1:7860/run/predict \
-H "Content-Type: application/json" \
-d '{"data": ["Jakie są obowiązki pracodawcy wobec pracownika z niepełnosprawnością?"]}'Przykład użycia w Pythonie (requests):
import requests
response = requests.post(
"http://127.0.0.1:7860/run/predict",
json={
"data": [
"Jakie są uprawnienia pracownika z orzeczeniem o niepełnosprawności?"
]
}
)
if response.status_code == 200:
result = response.json()
answer = result['data'][0]
print("Odpowiedź Asystenta:", answer)
else:
print("Błąd:", response.text)/Users/jacek/korektor2/
├── app.py # Główny plik aplikacji Gradio
├── hr_assistant.py # Logika asystenta HR (wersja oryginalna)
├── hr_assistant_v2.py # Zrefaktoryzowana wersja asystenta HR
├── document_manager.py # Zarządzanie dokumentami PDF i URL
├── config.py # Centralna konfiguracja aplikacji
├── vector_stats.py # Statystyki i monitoring bazy wektorowej
├── vector_optimization.py # Optymalizacja i cache'owanie wektorów
├── requirements.txt # Lista zależności Python
├── matryca.csv # Matryca kryteriów dla analizatora ogłoszeń
├── bibliografia.csv # Dane bibliograficzne dla źródeł
├── urls.txt # Lista URL źródeł PFRON
├── template.docx # Szablon dla generowanych raportów
├── pdfs/ # Katalog z dokumentami bazy wiedzy
├── faiss_cache/ # Cache bazy wektorowej (auto-generated)
├── test_refactoring.py # Testy jednostkowe nowej architektury
├── refactoring_examples.py # Przykłady użycia nowej architektury
├── migrate_to_v2.py # Skrypt migracji na nową architekturę
├── REFACTORING_PROPOSALS.md # Propozycje i analiza refaktoryzacji
└── README.md # Ta dokumentacja
matryca.csv: Kluczowy plik dla analizatora ogłoszeń. Każdy wiersz definiuje jedno kryterium oceny, zawierając m.in. treść pytania do modelu LLM oraz szablony odpowiedzi.bibliografia.csv: NOWE! 📚 Plik mapujący nazwy plików PDF na pełne opisy bibliograficzne, używane w odpowiedziach Asystenta HR. Format:opis;filenametemplate.docx: Szablon Microsoft Word używany do generowania raportów analizy ogłoszeń.pdfs/: Katalog zawierający dokumenty bazy wiedzy (poradniki, raporty, przepisy prawne).
opis;filename
"Gruszczyńska A., Gruntowski M., Osoba z niepełnosprawnością w Twojej firmie, Fundacja Aktywizacja, Warszawa 2024";Niezbednik-pracodawcy-online.pdf
"Kotowska L.; Prawo pracy. Pracownik niepełnosprawny; Państwowa Inspekcja Pracy; wydanie 2/2024";Wydawnictwo PIP - Niepelnosprawny pracownik.pdfProjekt korzysta z następujących głównych bibliotek (pełna lista w requirements.txt):
-
Interface i Backend:
gradio: Do budowy interfejsu webowegopandas: Do przetwarzania danych CSV
-
AI i NLP:
langchainilangchain-openai: Framework do pracy z modelami językowymifaiss-cpu: Wektorowa baza danych do przeszukiwania semantycznegotiktoken: Tokenizacja tekstu dla OpenAI
-
Przetwarzanie Dokumentów:
python-docx: Generowanie raportów Wordpypdfidocx2txt: Odczyt plików PDF/DOCXpymupdf: Inteligentna ekstrakcja tekstu z PDFsentence-transformers: Zaawansowane embeddingi tekstowe
KoREKtor oferuje zrefaktoryzowaną architekturę (v2.1) z lepszą modularyzacją i testowalnocią, zachowując pełną kompatybilność wsteczną.
# W app.py - dodaj na górze:
USE_NEW_ARCHITECTURE = False # Ustaw True gdy chcesz przełączyć
if USE_NEW_ARCHITECTURE:
from hr_assistant_v2 import HRAssistantV2 as HRAssistant
from config import KorektorConfig
def initialize_hr_assistant():
config = KorektorConfig.from_env()
return HRAssistant(config)
else:
from hr_assistant import HRAssistant
def initialize_hr_assistant():
return HRAssistant(
openai_api_key=os.getenv("OPENAI_API_KEY"),
pdf_directory="pdfs"
)export KOREKTOR_USE_V2=true
python app.py# Testy nowej architektury
python test_refactoring.py
# Przykłady użycia
python refactoring_examples.py
# Skrypt migracji (tworzy pomocnicze pliki)
python migrate_to_v2.py- 🏗️ Modularna Struktura: Oddzielne komponenty dla dokumentów, konfiguracji i logiki
- 🧪 Łatwiejsze Testowanie: 14 testów jednostkowych, możliwość mockowania
- ⚙️ Centralna Konfiguracja: Wszystkie parametry w
config.pyz walidacją - 🔄 Kompatybilność Wsteczna: Identyczne API - istniejący kod działa bez zmian
- 🚀 Przygotowanie na Przyszłość: Async processing, event system, caching
hr_assistant_v2.py- Nowa implementacja asystentadocument_manager.py- Zarządzanie dokumentamiconfig.py- Centralna konfiguracjatest_refactoring.py- Testy nowej architekturyrefactoring_examples.py- Przykłady użyciamigrate_to_v2.py- Narzędzia migracjiREFACTORING_PROPOSALS.md- Szczegółowa analiza zmian
export OPENAI_API_KEY="sk-..." # Klucz API OpenAI (wymagany)pdfs/ # Dokumenty bazy wiedzy (PDF)
├── dokument1.pdf
├── dokument2.pdf
└── ...
README.md- Ten plik - główny przewodnik użytkownikaCHANGELOG.md- Historia zmian i nowych funkcjiDEVELOPER.md- Dokumentacja techniczna dla deweloperówproject_description.md- Szczegółowy opis projektu i architektury
W przypadku problemów lub pytań:
- Sprawdź sekcję Debugowanie w
DEVELOPER.md - Przejrzyj Changelog w
CHANGELOG.md - Sprawdź logi aplikacji w konsoli
Ten projekt jest udostępniany na licencji Creative Commons Attribution 4.0 International (CC-BY 4.0).
Autorzy: Jacek Zadrożny, Agata Gawska
Copyright © 2025
Szczegóły w pliku LICENSE.
polski polish accessibility hr-assistant inclusivity nlp ai chatbot langchain gradio
