AI Recruiting CLI
AI Recruiting CLI
Консольный Python-инструмент для рекрутингового агентства. Автоматизирует весь цикл обработки вакансий: от сырого текстового файла работодателя — до строки в Google Sheets.
Проблема
Агентство ежедневно получает от работодателей файлы с вакансиями в произвольных форматах — TXT, CSV, DOCX. У каждой компании свой макет, язык (украинский / польский / русский) и свой способ разделять вакансии внутри файла. Операторы вручную переносили данные в таблицу — медленно и с ошибками.
Решение
Пайплайн из 6 этапов с интерактивным подтверждением оператора на каждом ключевом шаге:
Входящий файл → Разбивка на блоки → Очистка текста → Gemini LLM → Excel → Google Sheets
Парсинг — распознаёт 6+ форматов разделения вакансий: пустые строки, tab-дайджест в первой строке. Убирает дубли на разных языках (компании присылают одну вакансию на 3–4 языках сразу).
Очистка — вырезает ссылки, телефоны, email и шаблонные токены перед отправкой в LLM, снижая стоимость запроса.
Structured Output — Gemini заполняет 13 полей через Pydantic-схему и response_schema. Маппинг ответа на объекты — по vacancy_id из XML-тега, а не по индексу (защита от потерь при частичном ответе батча). Три уровня парсинга: response.parsed → model_validate_json() → JSON fallback.
Дедупликация — SHA-256 для точных совпадений + MinHash (порог 0.85) для нечётких, с хранением в SQLite.
Excel — сохраняет результат в .xlsx с timestamp, оператор может отредактировать вручную перед загрузкой.
Google Sheets — дозапись через gspread (OAuth). Загрузка только после явного подтверждения оператора (y/n).
Технологии
LLM: google-genai — Gemini Flash
Structured Output: pydantic v2 + response_schema
Консоль/UI: rich
Google Sheets: gspread + google-auth (OAuth)
Excel: openpyxl
Дедупликация: datasketch MinHash + sqlite3
Конфиг: pyyaml
Ключи API: keyring (Windows Credential Manager)
Логи: loguru
Retry: tenacity
При первом запуске мастер-визард запрашивает API-ключ Gemini и сохраняет его в Windows Credential Manager через keyring — ключ не хранится в файлах проекта.
Интересные детали
thinking_budget=1024 — у Gemini включен режим размышлений для повышения точности структурированного вывода.
Батчинг — вакансии отправляются в LLM группами (XML-теги vacancy id="..."), маппинг по id защищает от потери вакансии при неполном ответе.
Трекинг стоимости — считает токены и USD за сессию, предупреждает при превышении порога из конфига.
Portable — собирается в .exe через PyInstaller для передачи оператору без Python-окружения.
#python #automation #AI #LLM #Gemini #GoogleSheets #recruiting #CLI #pydantic #opensource
Консольный Python-инструмент для рекрутингового агентства. Автоматизирует весь цикл обработки вакансий: от сырого текстового файла работодателя — до строки в Google Sheets.
Проблема
Агентство ежедневно получает от работодателей файлы с вакансиями в произвольных форматах — TXT, CSV, DOCX. У каждой компании свой макет, язык (украинский / польский / русский) и свой способ разделять вакансии внутри файла. Операторы вручную переносили данные в таблицу — медленно и с ошибками.
Решение
Пайплайн из 6 этапов с интерактивным подтверждением оператора на каждом ключевом шаге:
Входящий файл → Разбивка на блоки → Очистка текста → Gemini LLM → Excel → Google Sheets
Парсинг — распознаёт 6+ форматов разделения вакансий: пустые строки, tab-дайджест в первой строке. Убирает дубли на разных языках (компании присылают одну вакансию на 3–4 языках сразу).
Очистка — вырезает ссылки, телефоны, email и шаблонные токены перед отправкой в LLM, снижая стоимость запроса.
Structured Output — Gemini заполняет 13 полей через Pydantic-схему и response_schema. Маппинг ответа на объекты — по vacancy_id из XML-тега, а не по индексу (защита от потерь при частичном ответе батча). Три уровня парсинга: response.parsed → model_validate_json() → JSON fallback.
Дедупликация — SHA-256 для точных совпадений + MinHash (порог 0.85) для нечётких, с хранением в SQLite.
Excel — сохраняет результат в .xlsx с timestamp, оператор может отредактировать вручную перед загрузкой.
Google Sheets — дозапись через gspread (OAuth). Загрузка только после явного подтверждения оператора (y/n).
Технологии
LLM: google-genai — Gemini Flash
Structured Output: pydantic v2 + response_schema
Консоль/UI: rich
Google Sheets: gspread + google-auth (OAuth)
Excel: openpyxl
Дедупликация: datasketch MinHash + sqlite3
Конфиг: pyyaml
Ключи API: keyring (Windows Credential Manager)
Логи: loguru
Retry: tenacity
При первом запуске мастер-визард запрашивает API-ключ Gemini и сохраняет его в Windows Credential Manager через keyring — ключ не хранится в файлах проекта.
Интересные детали
thinking_budget=1024 — у Gemini включен режим размышлений для повышения точности структурированного вывода.
Батчинг — вакансии отправляются в LLM группами (XML-теги vacancy id="..."), маппинг по id защищает от потери вакансии при неполном ответе.
Трекинг стоимости — считает токены и USD за сессию, предупреждает при превышении порога из конфига.
Portable — собирается в .exe через PyInstaller для передачи оператору без Python-окружения.
#python #automation #AI #LLM #Gemini #GoogleSheets #recruiting #CLI #pydantic #opensource