🤖 Service Finder - Robot Hadsereg (Workers Ecosystem)
Verzió: MB 2.0 Standard
Utolsó frissítés: 2026. február
Ez a könyvtár tartalmazza a rendszer háttérben futó aszinkron munkásait (workereit). A robotok három logikai "hadosztályra" vannak bontva, hogy a felelősségi körök (Adatgyűjtés, AI Elemzés, Validálás) szigorúan el legyenek választva.
🏛️ Rendszer Hadosztály (System Division)
Ezek a robotok a rendszer általános adatminőségéért és a felhasználói dokumentumokért felelnek.
1. robot_1_ocr_processor.py (OCR Dokumentum Elemző)
- Miért készült? A Prémium/VIP felhasználók által feltöltött számlákat és forgalmi engedélyeket dolgozza fel.
- Hogyan működik? Képeket optimalizál (max 1600px), elmenti őket a biztonságos NAS Vault-ba, majd az AI segítségével strukturált adatokat (Gold Data) von ki belőlük.
- Docker parancs (Kézi indítás):
docker compose exec api python -m app.workers.system.robot_1_ocr_processor
2. system_robot_2_service_auditor.py (A Bíró)
- Miért készült? Hogy levegye az adminisztrátorok válláról a szervizek élesítésének terhét, és karbantartsa az adatbázist.
- Hogyan működik? Két funkciója van. Egyrészt figyeli a
data.service_stagingtáblát, és ha egy szerviz eléri a megadott bizalmi ponthatárt (Trust Score), automatikusan átemeli az éles profilok közé. Másrészt időszakosan inaktiválja a megszűnt szervizeket. - Docker parancs:
docker compose exec api python -m app.workers.system.system_robot_2_service_auditor
🛠️ Szerviz Hadosztály (Service Division)
Ezek a robotok a szervizpontok felkutatásáért, dúsításáért és szakmai validálásáért felelnek.
🤖 Service Robot 0: Continental Scout (A Google Rácskereső)
🎯 A Modul Célja
Prémium, fizetős adatbázisokra támaszkodó felderítő. A data.discovery_parameters táblában megadott városokat (pl. "Debrecen") dolgozza fel. Egy bounding box-ot (befoglaló téglalapot) kér a Nominatim API-tól, majd azt kis cellákra bontva, mátrix-szerűen végigpásztázza a Google Places API-val.
🗄️ Érintett Adatbázis Komponensek
- Olvasás:
data.discovery_parameters(Miket kell pásztázni). - Írás:
data.service_staging(Várólista). Ha az ujjlenyomat már létezik, csak növeli atrust_score-t.
⚠️ Biztonsági Figyelmeztetés
A Google Places API fizetős. A maxResultCount és a cellaméret közvetlenül szorozza a költségeket. Ezt a robotot szigorú napi limittel (QuotaManager vagy GCP Console szintű hard-limit) szabad csak futtatni, 30 napos frissítési ciklussal. A mentett adatok magasabb (30) induló bizalmi pontot kapnak, mint az OSM adatok.
🤖 Service Robot 0: OSM Scout (A Térképész)
🎯 A Modul Célja
Ingyenes, geolokáció-alapú szerviz-felderítő robot. Az OpenStreetMap (OSM) Overpass API-ját használja, hogy a megadott bounding box (pl. Magyarország) területén lévő autószerelők, gumisok, mosók és benzinkutak POI (Point of Interest) adatait begyűjtse.
🗄️ Érintett Adatbázis Komponensek
- Írás:
data.service_staging(Várólista). - Zárolás/Szűrés: A
fingerprint(név + város MD5 hash-e) alapján szűri a duplikációkat.
🧠 Folyamat és Védelem
- Külön lekérdezéseket indít a javítóműhelyekre és a kényelmi szolgáltatásokra.
- Rate Limit védelem: Beépített exponenciális várakozás, ha az OSM szervere
429 Too Many Requestshibát ad. - Heti egyszer fut le (86400 * 7 mp), mivel az OSM adatok lassan változnak. A nyers adatokat betölti
pendingstátusszal aServiceStagingtáblába, alacsony (20) bizalmi pontszámmal.
- Docker parancs:
docker compose exec api python -m app.workers.service.service_robot_1_scout_osm
2. service_robot_3_enricher.py (Szakmai Címkéző)
- Miért készült? Hogy a nyers szövegekből (leírások, weboldalak) strukturált szakmai profilokat építsen.
- Hogyan működik? Keresi a projekt hivatalos
ExpertiseTagskulcsszavait a lekapart szövegekben. Ha egyezést talál, rögzíti a szerviz profiljában, és jóváírja a Gamification felfedezési pontokat. - Docker parancs:
docker compose exec api python -m app.workers.service.service_robot_3_enricher
🤖 Service Robot 4: Google Validator (A Mesterlövész)
🎯 A Modul Célja és Masterbook 2 Illeszkedés
A Szerviz-ökoszisztéma utolsó minőségbiztosítója. Nem keres vaktában (nincs rácskeresés). Azoknak a szervizeknek, amiket a Robot-1 talált (OSM) és a Robot-3 bedúsított (Szakmák), ez a robot megkeresi a hajszálpontos Google Places ID-ját. Letölti a térképi GPS koordinátákat, a nyitvatartást, a telefonszámot és az értékeléseket.
🗄️ Érintett Adatbázis Komponensek
- Zárolás/Olvasás:
data.service_profiles(aholis_verified = False). - Írás: Frissíti a PostGIS
locationgeometriát, a JSONB nyitvatartásokat, és a bizalmi pontszámot (trust_score). Ha hiteles, beállítja azis_verified = Trueértéket. - Atomi Zárolás:
FOR UPDATE SKIP LOCKEDvédi a race condition hibáktól.
🧠 Geo-logika és API Kezelés
- Google Places API (New): Célzott
searchTextalapú keresést futtat a név és a település alapján (maxResultCount=1). - QuotaManager (Pénztárcavédelem): Szigorúan számolja a hívásokat egy fizikai
.quota_google_places.jsonfájlban, és megállítja a robotot, ha eléri a.env-ben definiáltGOOGLE_DAILY_LIMIThatárt. - Ghosting: Ha a Google sem ismeri a szervizt,
ghoststátuszba helyezi (fantom szerviz, valószínűleg már bezárt).* Docker parancs:docker compose exec api python -m app.workers.service.service_robot_4_validator_google
🚗 Jármű Hadosztály (Vehicle Division)
Ezek a robotok a Master Data Management (MDM) járműkatalógusát építik fel nulláról.
🤖 Robot-0: Discovery Engine & Watchdog (A Felderítő)
🎯 A Modul Célja és Masterbook 2 Illeszkedés
A Robot-0 a Service Finder flotta-nyilvántartó ökoszisztémájának "beszállítója" és "gondnoka". Nem végez AI műveleteket és nem gyűjt részletes technikai adatokat. Két fő feladata van, amelyek biztosítják a rendszer skálázhatóságát:
- Differential Sync (Különbözeti Szinkron): Havonta egyszer letölti az RDW járműlistáját, kiszűri belőle a már kész (gold_enriched) járműveket, és csak az új típusokat helyezi el a
catalog_discoveryvárólistán, prioritás (darabszám) szerint rendezve. - Watchdog (Őrkutya): Óránként végigfésüli az adatbázist, és megkeresi azokat a feladatokat, amelyekbe a többi robot (Hunter, Researcher, Alchemist) beletört a bicskája vagy lefagyott feldolgozás közben. Ezeket visszaállítja alapállapotba.
🗄️ Érintett Adatbázis Komponensek
- Írás:
data.catalog_discovery(új modellek felvitele és státusz-visszaállítás). - Olvasás:
data.vehicle_model_definitions(létezik-e már agold_enrichedrekord?). - Olvasás/Frissítés:
data.asset_catalog(manual bootstrap ellenőrzés).
🧠 Geo-logika és API Kezelés
- Külső API:
opendata.rdw.nl(Lapozással, 10.000-es csomagokban). - Hibatűrés: Exponenciális újrapróbálkozás (Exponential Backoff) Rate Limit (
HTTP 429) esetén. - Állapotmegőrzés: A legutolsó sikeres letöltés dátumát a
/app/temp/.last_rdw_syncfájlban tárolja a felesleges API hívások és a Docker restartból adódó végtelen ciklusok elkerülése végett.
⚙️ Logikai Folyamat (Heartbeat Loop)
A program egy végtelen ciklusban fut az alábbiak szerint:
run_watchdog(): Felszabadítja az 1 óránál régebben "processing" vagy "research_in_progress" állapotban lévő rekordokat.should_run_rdw_sync(): Megvizsgálja, eltelt-e 30 nap az utolsó letöltés óta.- HA IGEN: Elindítja a
seed_from_rdw()-t. Az SQL szintű szűrés (WHERE NOT EXISTS) biztosítja, hogy a mesteradatok érintetlenek maradjanak. - Alvás: A robot 3600 másodpercre (1 óra) elalszik, majd kezdi elölről az Őrkutya futtatásával.
🧪 Tesztelési Forgatókönyv a Debugger számára
- API Teszt: A konténer logjában meg kell jelennie a "Lapozás: 0 - 10000 tételek analízise" üzenetnek, API hiba (
429) esetén pedig a késleltetett újrapróbálkozásnak. - Konzisztencia Teszt: Ha a
vehicle_model_definitionstáblában van egy "VW GOLF"gold_enrichedstátusszal, a Robot-0 nem szúrhatja be újra acatalog_discoverytáblába.
2. vehicle_robot_0_strategist.py (A Stratéga)
- Miért készült? Hogy a rendszer a leggyakoribb autókkal (pl. Suzuki, Toyota) kezdje a munkát, ne a ritka egzotikumokkal.
- Hogyan működik? Elemzi az RDW piacon lévő darabszámokat, és frissíti a várólista
priority_scoremezőjét a valós elterjedtség alapján. - Docker parancs:
docker compose exec api python -m app.workers.vehicle.vehicle_robot_0_strategist
🤖 Robot-0-GB: GB Discovery Engine (A Brit Felfedező)
🎯 Cél
Az angol piac speciális betöltője. Mivel a DVLA API nem listázható típusok szerint (csak rendszám alapján), ez a robot egy nyílt adathalmazt (CSV) olvas be. A CSV-ből kinyeri az elsődleges rendszámokat (VRM), és egy dedikált gb_catalog_discovery várólistára teszi őket, de csak azokat, amelyek még nincsenek a mesterkatalógusunkban!
🗄️ Adatbázis Érintettség
- Írás:
data.gb_catalog_discovery(id, vrm, make, model, status) - Differential Sync: Szűr a
data.vehicle_model_definitionstáblagold_enrichedstátusza alapján (meglévő autókat nem tesz a listára).
⚙️ Folyamat
Napi egyszer lefut, végignyálazza a helyi /mnt/nas/app_data/uk_mot_data.csv fájlt. Ha új modellt lát, beírja a rendszámát pending státusszal.
🤖 Robot-1: Catalog Hunter (A Vadász)
🎯 A Modul Célja és Masterbook 2 Illeszkedés
A Robot-1 az ökoszisztéma első szintű technikai adatbányásza. Feladata, hogy a Robot-0 (Discovery) által kijelölt, pending státuszú típusokhoz a lehető legpontosabb műszaki adatokat (köbcenti, lóerő, üzemanyag, motor kód, méretek) gyűjtse be az RDW hivatalos adatbázisából.
🗄️ Érintett Adatbázis Komponensek
- Olvasás/Írás:
data.catalog_discovery(Feladatok átvételepending->processing, majd lezárásaprocessedstátuszba). - Írás:
data.vehicle_model_definitions(Technikai rekordok létrehozása). - Zárolási Stratégia: Szigorú
FOR UPDATE SKIP LOCKEDhasználata. Bármennyi példány futhat párhuzamosan, nem fognak összeakadni.
🧠 Geo-logika és API Kezelés
- Külső API-k: - Fő adatok:
m9d7-ebf2.json- Üzemanyag/Károsanyag:
8ys7-d773.json - Motorblokk:
jh96-v4pq.json
- Üzemanyag/Károsanyag:
- Hibatűrés: Exponenciális újrapróbálkozás (Exponential Backoff) beépítve a Rate Limit (
HTTP 429) és a hálózati szakadások ellen. A robot nem omlik össze, hanem kivár és újra próbálkozik.
⚙️ Logikai Folyamat
- Keres egy
pendingfeladatot a várólistán (prioritás szerint csökkenve) és azonnalprocessing-re állítja. - Lekéri az RDW-ből a típushoz tartozó összes specifikus rendszámot (max 500 db/típus).
- A rendszámok alapján lekéri a motor- és üzemanyag-specifikációkat.
INSERT ... ON CONFLICT DO NOTHINGSQL logikával beszúrja az új technikai variánsokat a mestertáblába. Ha a variáns már létezik, csendben továbblép.- A feladatot
processedstátuszba helyezi, majd folytatja a következóvel.
- Docker parancs:
docker compose exec api python -m app.workers.vehicle.vehicle_robot_1_catalog_hunter
🤖 Robot-1-GB: GB Hunter (A DVLA Mesterlövész)
🎯 Cél
A gb_catalog_discovery táblában lévő pending rendszámokra küld lekérdezést a hivatalos brit kormányszerver felé (DVLA VES API). Az így kapott 100%-ig hiteles technikai adatokat betölti az európai mestertáblába (vehicle_model_definitions) ACTIVE státusszal, ahonnan a Robot-3 (Alkimista) befejezi a munkát.
🗄️ Adatbázis Érintettség
- Atomi zárolás:
FOR UPDATE SKIP LOCKEDagb_catalog_discoverytáblán. - Írás:
data.vehicle_model_definitions(INSERT ... ON CONFLICT DO NOTHING).
🧠 Biztonság és API
- API:
driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles - Kvóta Védelem: A
QuotaManagerszigorúan figyeli aDVLA_DAILY_LIMITváltozót az.envfájlból, megelőzve az API tiltást vagy túlszámlázást.
🤖 Robot-2: Vehicle Researcher (A Mesterlövész Adatgyűjtő)
🎯 A Modul Célja és Masterbook 2 Illeszkedés
A Robot-2 az "űrkitöltő" mikroszolgáltatás. Azokra a járművekre specializálódik, amelyeknél az RDW (Robot-1) nem tudott elegendő műszaki adatot biztosítani. Ahelyett, hogy ömlesztett weblapokat olvasna be (ami túlterhelné az AI GPU-t), a Robot-2 célzott "Mesterlövész" kereséseket (Targeted Searches) hajt végre strukturált autós adatbázisokban, és egy zajmentes aktát készít az Alkimista (Robot-3) számára.
🗄️ Érintett Adatbázis Komponensek
- Olvasás/Írás:
data.vehicle_model_definitions - Állapotátmenetek:
unverified/awaiting_research->research_in_progress->awaiting_ai_synthesis(vagysuspended_researchha 5 próbálkozás után sincs adat). - Zárolási Stratégia:
FOR UPDATE SKIP LOCKED, prioritást adva a Toyota modelleknek és a kevesebbet próbált rekordoknak.
🧠 Geo-logika és API Kezelés
- Tier 1 (Ingyenes): DuckDuckGo aszinkron burkolóval,
site:ultimatespecs.coméssite:auto-data.netoperátorokkal. - Tier 2 (Fizetős/Kvótás): UK DVLA API (Későbbi integrációhoz előkészítve).
- Védelmi Rendszerek: -
QuotaManager: Szigorúan naplózza a limitált API hívásokat egy lokális fájlba (.quota_dvla.json), megakadályozva a túlköltekezést.- Truncation: A kontextust maximum 2500 karakterre vágja, megelőzve az LLM Out-of-Memory (OOM) hibáit.
⚙️ Logikai Folyamat
- Zárolja a megfelelő rekordot.
- Párhuzamosan (
asyncio.gather) indít 3 keresést a neten (Műszaki adatok, Folyadékok, Típushibák). - A kapott "snippeteket" egy strukturált
[SOURCE: XYZ]formátumú szöveggé fűzi össze. - Ha a szöveg elég hosszú (>150 karakter), átadja az AI-nak. Ha nem, növeli a próbálkozások számát.
- Docker parancs:
docker compose exec api python -m app.workers.vehicle.vehicle_robot_2_researcher
🤖 Robot-3: Alchemist Pro (A Szintetizáló)
🎯 A Modul Célja és Masterbook 2 Illeszkedés
A Robot-3 a rendszer "Agya". Ő az egyetlen, aki drága AI (LLM / Ollama) erőforrásokat használ. Feladata, hogy a Robot-1 (RDW) és Robot-2 (Web) által begyűjtött, sokszor hiányos vagy zajos technikai adatokat egyetlen, tökéletesen tiszta "Arany" (gold_enriched) rekorddá olvassza össze a vehicle_catalog (Mesterkatalógus) számára.
🗄️ Érintett Adatbázis Komponensek
- Olvasás/Frissítés:
data.vehicle_model_definitions(VMD) tábla. - Írás (Insert):
data.vehicle_catalog(Az Aranytábla). - Zárolási Stratégia: Szigorú
FOR UPDATE SKIP LOCKED. Aawaiting_ai_synthesis(Robot-2 által készített) és azACTIVE(Robot-1 által készített) státuszokat veszi fel.
🧠 Geo-logika és API Kezelés
- AI Hívás:
AIService.get_clean_vehicle_data(Helyi Ollama vagy külső LLM). - Költségvetés Védelem: Beépített
daily_ai_limitfigyeli, hogy ne lépjük túl a megengedett napi hívásszámot. Ha elfogy a keret, a robot alvó módba kapcsol a következő napig. - Sane-Check (Józan ész ellenőrzés): Beépített fizikai korlátok (pl. max 18000 ccm, max 1500 kW, kivéve teherautók) védik az adatbázist az AI "hallucinációitól".
⚙️ Logikai Folyamat
- Atomi lakatolással lefoglal egy feladatot és
ai_synthesis_in_progressstátuszba teszi. - Átadja a nyers adatokat (RDW + Web Context) az AI-nak.
- Lefuttatja a "Sane Check"-et. Ha az AI hibázott, visszadobja az aktát
unverifiedstátuszba (hogy a Robot-2 újra megpróbálja). - Hibrid Merge: Az RDW hatósági adatai mindig felülírják az AI becsléseit!
- Létrehozza a
vehicle_catalogbejegyzést (ON CONFLICT DO NOTHINGvédelemmel). - Lezárja a VMD rekordot
gold_enrichedstátusszal.
- Docker parancs:
docker compose exec api python -m app.workers.vehicle.vehicle_robot_3_alchemist_pro
6. vehicle_robot_4_vin_auditor.py (Alvázszám Hitelesítő)
- Miért készült? Hogy a felhasználók által beküldött konkrét járműveket (Assets) pontosan a helyes katalógus-variánshoz kösse.
- Hogyan működik? Dekódolja a VIN (Alváz) számokat az AI segítségével. Ha a megfejtett teljesítmény (kW) eltér a jelenlegitől, új katalógus-variánst hoz létre, és oda köti a járművet.
- Docker parancs:
docker compose exec api python -m app.workers.vehicle.vehicle_robot_4_vin_auditor
🚀 Indítási Segédlet (Launch Control)
A robotok önállóan is indíthatók a fenti docker compose exec ... parancsokkal hibakeresés céljából, de a végleges működéshez a docker-compose.yml fájlban önálló szervizként (container) kell definiálni őket.
Rendszer újraindítása és a robotok aktiválása a háttérben:
docker compose up -d --build