AI Rekrutacja CLI
AI Recruiting CLI
Konsolowe narzędzie Python dla agencji rekrutacyjnej. Automatyzuje cały cykl przetwarzania ofert pracy: od surowego pliku tekstowego pracodawcy — do wiersza w Google Sheets.
Problem
Agencja codziennie otrzymuje od pracodawców pliki z ofertami pracy w dowolnych formatach — TXT, CSV, DOCX. Każda firma ma swój układ, język (ukraiński / polski / rosyjski) i swój sposób dzielenia ofert w pliku. Operatorzy ręcznie przenosili dane do tabeli — wolno i z błędami.
Rozwiązanie
Pipeline składający się z 6 etapów z interaktywnym potwierdzeniem operatora na każdym kluczowym kroku:
Plik wejściowy → Podział na bloki → Czyszczenie tekstu → Gemini LLM → Excel → Google Sheets
Parsowanie — rozpoznaje 6+ formatów dzielenia ofert: puste linie, tab-digest w pierwszej linii. Usuwa duplikaty w różnych językach (firmy wysyłają jedną ofertę w 3–4 językach jednocześnie).
Czyszczenie — wycina linki, telefony, e-maile i szablonowe tokeny przed wysłaniem do LLM, zmniejszając koszt zapytania.
Structured Output — Gemini wypełnia 13 pól przez schemat Pydantic i response_schema. Mapowanie odpowiedzi na obiekty — według vacancy_id z tagu XML, a nie według indeksu (ochrona przed utratą przy częściowej odpowiedzi wsadu). Trzy poziomy parsowania: response.parsed → model_validate_json() → JSON fallback.
Deduplikacja — SHA-256 dla dokładnych dopasowań + MinHash (próg 0.85) dla nieprecyzyjnych, z przechowywaniem w SQLite.
Excel — zapisuje wynik w .xlsx z timestamp, operator może edytować ręcznie przed załadowaniem.
Google Sheets — dopisywanie przez gspread (OAuth). Ładowanie tylko po wyraźnym potwierdzeniu operatora (y/n).
Technologie
LLM: google-genai — Gemini Flash
Structured Output: pydantic v2 + response_schema
Konsola/UI: rich
Google Sheets: gspread + google-auth (OAuth)
Excel: openpyxl
Deduplication: datasketch MinHash + sqlite3
Konfiguracja: pyyaml
Klucze API: keyring (Windows Credential Manager)
Logi: loguru
Retry: tenacity
Przy pierwszym uruchomieniu kreator pyta o klucz API Gemini i zapisuje go w Windows Credential Manager przez keyring — klucz nie jest przechowywany w plikach projektu.
Interesujące szczegóły
thinking_budget=1024 — w Gemini włączony jest tryb myślenia dla zwiększenia dokładności strukturalnego wyjścia.
Batching — oferty są wysyłane do LLM grupami (tagi XML vacancy id="...") , mapowanie po id chroni przed utratą oferty przy niepełnej odpowiedzi.
Śledzenie kosztów — liczy tokeny i USD za sesję, ostrzega przy przekroczeniu progu z konfiguracji.
Portable — kompilowane do .exe przez PyInstaller do przekazania operatorowi bez środowiska Python.
#python #automation #AI #LLM #Gemini #GoogleSheets #recruiting #CLI #pydantic #opensource
Konsolowe narzędzie Python dla agencji rekrutacyjnej. Automatyzuje cały cykl przetwarzania ofert pracy: od surowego pliku tekstowego pracodawcy — do wiersza w Google Sheets.
Problem
Agencja codziennie otrzymuje od pracodawców pliki z ofertami pracy w dowolnych formatach — TXT, CSV, DOCX. Każda firma ma swój układ, język (ukraiński / polski / rosyjski) i swój sposób dzielenia ofert w pliku. Operatorzy ręcznie przenosili dane do tabeli — wolno i z błędami.
Rozwiązanie
Pipeline składający się z 6 etapów z interaktywnym potwierdzeniem operatora na każdym kluczowym kroku:
Plik wejściowy → Podział na bloki → Czyszczenie tekstu → Gemini LLM → Excel → Google Sheets
Parsowanie — rozpoznaje 6+ formatów dzielenia ofert: puste linie, tab-digest w pierwszej linii. Usuwa duplikaty w różnych językach (firmy wysyłają jedną ofertę w 3–4 językach jednocześnie).
Czyszczenie — wycina linki, telefony, e-maile i szablonowe tokeny przed wysłaniem do LLM, zmniejszając koszt zapytania.
Structured Output — Gemini wypełnia 13 pól przez schemat Pydantic i response_schema. Mapowanie odpowiedzi na obiekty — według vacancy_id z tagu XML, a nie według indeksu (ochrona przed utratą przy częściowej odpowiedzi wsadu). Trzy poziomy parsowania: response.parsed → model_validate_json() → JSON fallback.
Deduplikacja — SHA-256 dla dokładnych dopasowań + MinHash (próg 0.85) dla nieprecyzyjnych, z przechowywaniem w SQLite.
Excel — zapisuje wynik w .xlsx z timestamp, operator może edytować ręcznie przed załadowaniem.
Google Sheets — dopisywanie przez gspread (OAuth). Ładowanie tylko po wyraźnym potwierdzeniu operatora (y/n).
Technologie
LLM: google-genai — Gemini Flash
Structured Output: pydantic v2 + response_schema
Konsola/UI: rich
Google Sheets: gspread + google-auth (OAuth)
Excel: openpyxl
Deduplication: datasketch MinHash + sqlite3
Konfiguracja: pyyaml
Klucze API: keyring (Windows Credential Manager)
Logi: loguru
Retry: tenacity
Przy pierwszym uruchomieniu kreator pyta o klucz API Gemini i zapisuje go w Windows Credential Manager przez keyring — klucz nie jest przechowywany w plikach projektu.
Interesujące szczegóły
thinking_budget=1024 — w Gemini włączony jest tryb myślenia dla zwiększenia dokładności strukturalnego wyjścia.
Batching — oferty są wysyłane do LLM grupami (tagi XML vacancy id="...") , mapowanie po id chroni przed utratą oferty przy niepełnej odpowiedzi.
Śledzenie kosztów — liczy tokeny i USD za sesję, ostrzega przy przekroczeniu progu z konfiguracji.
Portable — kompilowane do .exe przez PyInstaller do przekazania operatorowi bez środowiska Python.
#python #automation #AI #LLM #Gemini #GoogleSheets #recruiting #CLI #pydantic #opensource