Automatické vyplňování filtrů hledání volných míst pomocí AI a databáze
Uživatelé portálů pro hledání práce často nejsou schopni správně nastavit filtry na jobových deskách jako HH, SuperJob, Zarplata.ru nebo TrudVsem. Analýza ukazuje: návštěvníci otevřou panel filtrů, zadávají data chaoticky, dostanou nerelevantní výsledky – od tisíců nabídek uklízečů po prázdný seznam – a odejdou. Pokusy o řešení prostřednictvím upozornění, povinných polí nebo zvýraznění selhaly: konverze klesala, uživatelé se báli nebo zadávali nesmyslné dotazy jako „práce“.
Klíčový postřeh: problém je v složitosti. Každá služba používá unikátní ID pro města (HH má 1600 měst s ID, SuperJob svá vlastní), specializace, praxi. Předání všech slovníků do LLM vede k 140 000 tokenům na požadavek (25–40 Kč), halucinacím nebo bankrotu.
Architektura datově řízeného pipeline pro AI
Řešení je postaveno na existující databázi s tabulkami job_filters, job_filter_options, job_service_filters, city_master a city_source_map. Tyto struktury již mapují kanonická hodnoty na ID služeb (např. Praha: HH=1, SuperJob=4).
Systém automaticky dělí filtry do kategorií podle příznaku is_ai_eligible = true:
- Malé slovníky (≤30 hodnot): praxe (
noExperience,between1And3), zaměstnanost (FULL,PART). Předají se do promptu (~400 tokenů). - Velké slovníky (>30): města, role. LLM vrátí text („Praha“), kód vyřeší ID z DB.
- Volný text: dotaz jako „Python backend developer“.
- Čísla: plat z CV nebo LLM.
Prompt se generuje dynamicky z DB. Příklad:
== FILTRY S VÝBĚREM ==
experience: noExperience="Bez praxe", between1And3="Od 1 do 3 let"
employment_form: FULL="Plný úvazek"
== SLOVNÍKOVÁ POLA ==
city_name: "Praha"
== TEXTové ==
text: 2-8 slov
Vstup: shrnutí CV (dovednosti, praxe), požadovaná pozice, služby. Výstup – JSON bez ID:
{
"text": "Python backend developer",
"area_name": "Praha",
"experience": "between1And3",
"salary": {"from": 250000}
}
Fáze zpracování a rezolvování
Fáze 1: Generování promptu a volání LLM
BuildSearchFiltersPromptTask shromáždí instrukci. LLM (GigaChat) parsuje záměry uživatele, vybere z malých slovníků, pojmenuje velké.
Fáze 2: Postprocessing v kódu
- Rezolvování:
SearchCitiesActionhledá „Praha“ vcity_master, mapuje na ID podlecity_source_map. - Adaptace: převádí
between1And3do formátu API služby. - Sestavení:
unified_filters+filter_labelspro frontend.
Výsledek: vyplněné filtry pro všechny služby. Uživatel je zkontroluje a uloží.
Škálovatelnost: nová služba/filtr – jen data v DB, prompt a pipeline se adaptují automaticky.
Metriky efektivity
| Přístup | Tokeny | Cena požadavku | Přesnost |
|--------|--------|----------------|----------|
| Naivní (všechny slovníky) | 140 000 | 25–40 Kč | Nízká (halucinace) |
| Datově řízený | 850 + 150 | 0,1 Kč | Vysoká (DB rezolv) |
Úspora: 150x. Bounce rate na vyhledávání klesl, růst průměrného cheku z placených funkcí.
Co je důležité
- Rozdělení rolí: LLM pro sémantiku, DB pro mapování ID – minimalizuje tokeny a chyby.
- Autoklasifikace: práh 30 hodnot je dynamický, nové filtry se integrují bez kódu.
- JSON struktura: striktní výstup LLM usnadňuje parsování.
- Škálovatelnost: tisíce uživatelů bez zdražení.
- UX: automatické vyplňování snižuje bariéru vstupu.
— Editorial Team
Zatím žádné komentáře.