Open WebUI Ollama teszt-chat felület, embedding modell ellenőrzésre
majomrag.olab.hu/
fejlesztő
él
MCP végpont itt kérdezhet rá egy AI asszisztens (Claude, Gemini) a tudásbázisra
majomrag.olab.hu/mcp
bárki, akinek van hozzáférési tokenje
él
OkosRAG portál bejelentkezés, Kérdezz felület (Gemini vagy Claude — szűrt kontextus), Dokumentumok (feltöltés+lista), Integrációk (pl. WooCommerce), szuperadminnak felhasználókezelés + globális beállítások; telefonon telepíthető (PWA)
majomrag.olab.hu/mrag
minden bejelentkezett user; Felhasználók menü csak szuperadminnak
él
Mattermost (csapat-chat) saját, self-hosted chat — csatornák, DM-ek, és egy OkosRAG nevű AI-bot tagként
chat.majomrag.olab.hu
meghívottak (a szerver nincs nyitva önregisztrációra)
él
Ez a kézikönyv
majomrag.olab.hu/userguide
mindenki
él
Új: a majomrag.olab.hu/mrag portálon most már bejelentkezéssel is lehet kérdezni a tudásbázistól (Gemini-alapú Kérdezz felület), nem csak MCP-s AI-kliensen keresztül. Mobilon telepíthető appként is felajánlja magát (PWA). A navigáció világos, semleges témára és bal oldali menüre (mobilon ☰ hamburger-menüre) váltott, és egy ❓ gomb bármikor újranyitja a gyors bevezetőt.
Új (2026-07-15): OkosRAG a Mattermost-ban. Telepítsd a Mattermost klienst (mobilon: "Mattermost" az App Store/Google Play-en; asztali gépen: mattermost.com/download, vagy egyszerűen a böngészőben a chat.majomrag.olab.hu cím), jelentkezz be a saját fiókoddal, és a OkosRAG bot-fiókkal DM-ben bármikor kérdezhetsz — csatornákban @OkosRAG megemlítésre válaszol. Rákérdezésre először egy "Gondolkodom…" üzenetet ír, majd azt szerkeszti át a végleges válaszra. Ugyanazt a tudásbázist és ugyanazt a motort (Gemini/Claude, amit a portál Beállítások fülén beállítottak) használja, mint a portál Kérdezz felülete — nincs két külön "agy". Jogosultság: 1:1 DM-ben a saját portál-szerepeddel válaszol; egy privát csoportban/csatornában csak akkor ad "Korlátozott" szintű infót, ha ott minden emberi tag szuperadmin, egyébként (és nyilvános csatornában mindig) csak "Központi" szintű adatból válaszol — attól függetlenül, ki kérdezett, mert ott mások is olvasják a választ.
2. Hogyan kérdezhetek rá a tudásbázisra — most
A) Webes portál (majomrag.olab.hu/mrag) — bejelentkezés után:
Kérdezz fülön kérdést írhatsz. A rendszer a pgvector-tárból visszakeresi a releváns dokumentum-darabokat (a központi tudásbázisból, plusz a saját személyes feltöltéseidből), és a Gemini 2.5 Flash-nek adja át kontextusként (a küldés előtt mindig lefut rajta a szűrés).
Hangbevitel/felolvasás: a szövegmező mellett 🎤 gombbal (magyarul) diktálhatod is a kérdést, a válasz felett pedig 🔊 gombbal felolvashatod — mindkettő a böngésző saját, beépített hangfelismerését/-szintézisét használja (nincs extra szerverköltség). Csak azokon az eszközökön jelenik meg, ahol a böngésző támogatja: Android Chrome-on mindkettő megy, iOS Safari-n a diktálás gomb nem jelenik meg (a böngésző nem támogatja), a felolvasás ott is működik. Ha diktálva kérdeztél, a rendszer szóban is jelzi ("Kész a válasz."), amikor megjött a válasz — nem kell a képernyőt néznie közben.
Mentés kérdés helyett: ha a mezőbe ragmentés vagy ragmentes szóval kezdve írsz (pl. "ragmentés: a nyitvatartás jövő héten..."), a rendszer NEM az LLM-nek küldi a szöveget kérdésként, hanem a szó utáni részt egyenesen dokumentumként menti el a központi tudásbázisba (ugyanaz a mechanizmus, mint a Dokumentumok fülön a beillesztett szöveg mentése) — nulla LLM-hívással.
Dokumentumok fülön feltölthetsz fájlokat (PDF, Word .docx, kép — OCR-rel —, .txt/.md), akár egyszerre többet is, vagy egyszerűen beilleszthetsz szöveget. Opcionális annotáció és időbélyeg adható hozzá, és választhatod: Központi tudásbázis (mindenki keresheti), Csak nekem (személyes) vagy Korlátozott (csak szuperadminok — pl. érzékeny ügyféladat, csak szuperadminnak látszik a rádiógomb is). A feltöltés azonnal visszaigazolást ad, a feldolgozás (kép esetén OCR is) a háttérben fut — a lista alatta automatikusan frissül "feldolgozás alatt" → "kész" állapotra. Ha egy feltöltés átmeneti hiba miatt (pl. túlterhelt szerver) hibára fut, a rendszer 30 percenként automatikusan újrapróbálja (max. 5 alkalommal) — nem kell kézzel újra feltöltened, hacsak nem valódi (nem átmeneti) hiba az ok. Szuperadmin a Dokumentumok fülön egyesével vagy tömegesen (🗑 gomb / "Hibás feltöltések törlése") törölheti a véglegesen hibásakat.
Ha ugyanazt a fájlt/URL-t/beillesztett szöveget (ugyanaz a forrás/fájlnév) újra feltöltöd — pl. mert egy hiba miatt újrapróbálod —, a rendszer felismeri és lecseréli a korábbi próbálkozást ahelyett, hogy duplikátumot hozna létre. Ha szándékosan meg akarsz tartani egy régi verziót is, adj neki eltérő címet/fájlnevet.
Weboldal importálása — ugyanitt megadhatsz egy induló URL-t (pl. a webshopod), a rendszer azonos domainen belül bejárja a linkelt oldalakat (megadott max. oldalszámig), és mindegyiket külön dokumentumként dolgozza fel. Csak szerver-renderelt HTML-t lát — erősen JS-es SPA-oldalaknál nem talál tartalmat (ehhez headless böngésző kellene, ami jelentősen több erőforrást igényelne).
Integrációk fülön látja mindenki, mely külső rendszerek vannak bekötve (státusz), szuperadmin szerkesztheti a hozzáférési adatokat. WooCommerce (majomkenyer.hu) és Gmail/Google Workspace (@mokyen.com, @majomkenyer.hu) van bekötve — ld. lent, 3. pont.
Email fül — minden bejelentkezett user beállíthatja a saját email-küldő módját (SMTP saját postafiókkal, vagy Brevo/SendGrid/Resend API-kulccsal), és írhat/küldhet emailt. Küldés előtt mindig felugrik egy megerősítő ablak a teljes, végleges szöveggel — automatikusan sosem megy ki semmi. Biztonsági korlát: max. 5 email/óra/felhasználó. Időzíthető is: megadható egy jövőbeli kiküldési időpont — a szöveg jóváhagyása most történik, csak a kiküldés csúszik, nincs újra-megerősítés a kiküldés pillanatában. A Kérdezz fülön is lehet email-vázlatot kérni természetes nyelven (pl. "holnap emailezd meg X-et, hogy…") — a rendszer felismeri, kitölti az Email fület a vázlattal (relatív dátumot is feloldva), és megnyitja ugyanazt a megerősítő ablakot.
Egyedi funkciók fül — három különálló rész:
Emberi feladatok — sima, konkrét feladat-kiadás egy kollégának (vagy magadnak), NEM AI-generált. Bejelentkezéskor a kijelölt személy fent egy sárga figyelmeztető sávban azonnal látja a nyitott feladatait — nem kell keresnie.
Nyomdai kép-prompt — önálló, megtalálható mini-eszköz: beírod, mit szeretnél, a rendszer a márka-stílus/korábbi grafikai anyagok alapján egy kimásolható promptot ad egy külső kép-generáló AI-hoz (nem generál képet).
Ismétlődő AI-feladatok — cím+utasítás+gyakoriság (pl. kétheti): a rendszer minden lefutáskor friss adatból (dokumentumok, WooCommerce-statisztika) újragenerálja a tartalmat, és egy review-listába teszi. Innen sosem megy ki/exportálódik semmi automatikusan — mindig egy embernek kell átnéznie/elvetnie.
Bárki csinálhat saját feladatot (emberit és AI-t is); szuperadmin mindenkiét látja.
Felhasználók fül (csak szuperadminnak) — új felhasználó létrehozása, lista. Szuperadmin bármelyik sima (nem-szuperadmin) felhasználó jelszavát beállíthatja (🔑 gomb a sorban) — másik szuperadmin jelszavát nem, azt csak ő maga módosíthatja a saját fiókjában. Saját profilját (felhasználónév, email, jelszó) mindenki (bármilyen szerepkörrel) szerkesztheti a topbar 👤 gombjával — a felhasználónév/email módosításához nem kell megadni a jelenlegi jelszót, a jelszó-módosításhoz igen. Bejelentkezni felhasználónévvel VAGY emaillel is lehet.
Beállítások fül (csak szuperadminnak) — melyik "agy" (Gemini vagy a cégvezető Claude-előfizetése, MCP-n keresztül) válaszol a Kérdezz kérdésekre (globális, mindenkire vonatkozik), a mai napi hívásszám becslése mindkét motorra, és a legutóbbi 👎 visszajelzések listája (tudás-hiány jelzők). 👎-nál a felhasználó opcionálisan megjegyzést is írhat ("mi hiányzott/mi volt rossz"), ez is megjelenik itt a lista mellett — konkrét javítási infó, nem csak a puszta darabszám.
🤖 OkosRAG szerint menücsoport (csak szuperadminnak) — három, egymástól független, kézzel ("Újragenerálás" gombbal) indítható AI-szintézis a teljes tudásbázisból, mindegyik ugyanazt a motort használja, amit a Beállítások fülön kiválasztottál. Mindhárom ugyanazt a bővített forrást nézi: a feltöltött dokumentumokat (videomeeting-leiratok is, ha fel vannak töltve), ÉS élőben lekérve a Mattermost minden olyan csatornáját/DM-jét (publikus, privát is), aminek a Mattermost admin-fiók (a bot mögötti token tulajdonosa) tagja — ez fontos azért, mert valaki lehet aktív/kulcsszereplő úgy is, hogy nem küld emailt, csak Mattermoston kommunikál. (Ha egy releváns privát csatorna kimarad, ellenőrizd, hogy az admin-fiók tagja-e annak — az API csak azt látja, aminek tagja.) Ez a Mattermost-lekérdezés minden generáláskor élőben történik, nem tárolódik/indexelődik sehova tartósan.
Folyamatok — a cég működését mutatja be, több (min. 5-7), kis, terület-szerinti Mermaid-folyamatábrában (gombsorral váltva köztük) + magyarázattal, hogy egyetlen zsúfolt, olvashatatlan ábra helyett áttekinthető maradjon.
Emberek, Szerepkörök — kártyánként bemutatja, kik dolgoznak/vesznek részt a cég működésében (név, 👑 vezető-e, ⭐ stakeholder-e, rövid leírás mit csinál — a Google Workspace névjegyzéket is felhasználja, ha be van kötve, hogy valós neveket adjon, ne kitaláltakat), plusz egy kis kapcsolati/szervezeti Mermaid-ábra. Ezt a szintézist a Kérdezz/OkosRAG is látja (csak szuperadminnak), így pl. "ki van a marketing csapatban" jellegű kérdésre is tud válaszolni.
PPC — a fenti bővített tudásbázis és a webshop rendelés-statisztika alapján egy "Irányok" nevű stratégiai markdown-összefoglalót, plusz egy-egy DRAFT export CSV-t készít Google Ads Editor és Meta Ads Manager bulk-importhoz (letölthető gombokkal, mellettük linkek, hova kell feltölteni). Figyelembe veszi a Beállítások fülön megadott napi PPC-keretet (alapértelmezett 2000 Ft) és a max. költés/rendelés arányt (alapértelmezett 0.3 = 30%) — ha ezeket a javaslat túllépné, az Irányok szövegben explicit figyelmeztetést ad rá. A generálás után két kipipálható feladat is megjelenik a PPC fülön ("Google/Meta Ads export feltöltése") — alapértelmezetten 7 naponta (Beállítások fülön állítható) automatikusan is újrafut, és a lejárt, még el nem végzett feladat piros háttérrel jelzi magát. Ez a funkció SOHA nem indít vagy módosít élesen semmilyen hirdetési kampányt automatikusan — nincs API-kapcsolat Google Ads-hoz vagy Meta Ads-hoz, csak fájlokat generál, amit egy embernek kézzel kell feltöltenie/ellenőriznie a hivatalos sablonokkal összevetve (a bulk-import formátumok időnként változnak; mindkét platform a Campaign/Ad Set/Ad neve alapján dönti el, hogy meglévő kampányt frissít vagy újat hoz létre).
Mindháromnál minden generálás megmarad (nem törlődik/íródik felül) — a korábbiak a lista alján kattinthatóan visszanézhetők, így nyomon követhető, mi változott. A Folyamatok/Emberek diagramjait egy 🔍 gomb közel teljes képernyőn is megnyitja. Fontos korlát mindháromra: ez az AI értelmezése a leíró dokumentumokból/üzenetekből, NEM hivatalos szervezeti ábra, valódi process mining, vagy szakértői marketing-terv — ellenőrizendő, nem garantáltan pontos, főleg ha egy terület/csatorna alulreprezentált a tudásbázisban.
B) MCP-kompatibilis AI kliens — pl. Claude Desktop, Claude Code, vagy claude.ai "remote connector" a majomrag.olab.hu/mcp végponton, hozzáférési tokennel. Ez a mai napig csak a központi tudásbázist látja, személyes dokumentumokat nem (mert nincs hozzá bejelentkezett portál-felhasználó kontextus).
Beállítás Claude-dal:
Nyisd meg a Coolify UI-t → Applications → aios-rag-mcp → Environment variables → másold ki a MCP_BEARER_TOKEN értéket.
Claude Desktop / claude.ai-ban add hozzá remote MCP connectorként: URL = https://majomrag.olab.hu/mcp, Authorization header = Bearer <token>.
Ezután Claude-tól kérdezhetsz a cég dokumentumairól — a search_knowledge_base eszközt fogja használni.
Gemini 2.5 Flash — élesben fut a portál Kérdezz fülén:
Költség-optimalizálás miatt a portál a Claude-előfizetés helyett egy saját kiszolgáló Gemini 2.5 Flash API-hívását használja (ingyenes limitig). Mivel a Gemini API ingyenes szintje esetén Google a beküldött adatokat modellfejlesztésre használhatja, a rendszer minden dokumentum-darabot előszűr, mielőtt kiküldi. Ez egy tudatos, elfogadott kockázat — ld. lent a döntés indoklását.
3. Hogyan lesz egy dokumentumból kereshető adat?
Amikor egy dokumentum bekerül a rendszerbe (jelenleg kézzel/scriptből, később n8n-es automatikus behúzással), ez történik vele:
1
BeérkezésA dokumentum szövege (jelenleg egy szöveges mező) bekerül a feldolgozó folyamatba — forrás és cím megjelölésével.
2
Darabolás (chunking)Hosszú dokumentumnál a szöveg kisebb, kb. néhány bekezdésnyi darabra bomlik — így a keresés pontosabb, nem az egész dokumentumot, hanem a releváns részt találja meg.
3
Vektorizálás (embedding)Minden darab szövegét egy lokálisan futó AI-modell (Ollama, nomic-embed-text) egy 768 számból álló vektorrá alakítja. A hasonló jelentésű szövegek vektora közel esik egymáshoz — ez teszi lehetővé a "jelentés szerinti" keresést, nem csak kulcsszavas egyezést.
4
TárolásA szöveg, a vektor, a forrás és egyéb metaadat egy Postgres adatbázisban landol, a pgvector bővítménnyel — ez egy speciálisan vektorokra optimalizált keresőindexet (HNSW) tart fenn.
5
KeresésAmikor kérdés érkezik, a kérdés szövege is átmegy ugyanazon a vektorizáláson, majd az adatbázis megkeresi a hozzá legközelebb eső dokumentum-darabokat ("cosine similarity" alapján).
6
VálaszadásA legjobban egyező darabokat egy nagy nyelvi modell (jelenleg Claude, az MCP-n keresztül) megkapja kontextusként, és ebből fogalmaz emberi választ a kérdésre.
Élesben: minden dokumentum-darabhoz tartozik egy "effektív dátum" (a dokumentum saját időbélyege, ha van megadva, különben a feltöltés ideje). A keresési rangsor 85% szemantikai hasonlóság + 15% frissesség-súllyal rendez, és a Kérdezz felület a nagy nyelvi modellnek is megadja minden forrás dátumát, explicit utasítással: ha két forrás ellentmond egymásnak, a frissebbet vegye figyelembe, és jelezze is ezt a válaszban. Teszteltem: egy 2020-as és egy 2026-os, egymásnak ellentmondó dokumentumnál a rendszer helyesen a frissebbre hivatkozva válaszolt.
Az Integrációk fülön beállított WooCommerce-hozzáféréssel a rendszer be tudja húzni az áruház termékeit és rendeléseit a tudásbázisba, hogy a Kérdezz felület PPC-kampány-elemzéshez is tudjon válaszolni ("melyik vásárló mekkora összegből milyen rendelést adott le" jellegű kérdésekre).
Mit húz be: minden termék (ár, készlet, kategória, leírás) és minden rendelés (tételek, összeg, fizetési mód, vevő neve/emailje/telefonja/címe).
Inkrementális: az első futás mindent behúz, minden további "Szinkronizálás most" (Integrációk fül, szuperadmin) csak az azóta módosult termékeket/rendeléseket kéri le a WooCommerce API-tól (modified_after szűréssel) — nem tölti le újra az egészet minden alkalommal.
Duplikáció nincs: egy már behúzott termék/rendelés újraszinkronizálásakor a régi verzió törlődik/frissül, mielőtt az új bekerülne (nem halmozódik).
Hibás elemek automatikus újrapróbálása és takarítása: ha egy rendelés/termék feldolgozása hibára fut (pl. átmeneti timeout), a rendszer minden következő szinkronnál újra megpróbálja — nem csak a "módosultakat" nézi, a korábban hibázottakat is. Ha egy elem kb. 2 napon (több szinkron-cikluson) át folyamatosan hibázik, a hiba-sor automatikusan törlődik a Dokumentumok listából, hogy ne halmozódjon a zaj.
Automatikus ütemezés — a WooCommerce naponta kétszer (12 óránként), a Gmail 6 óránként frissül magától; a rendszer 30 percenként ellenőrzi, esedékes-e. A "Szinkronizálás most" gomb csak soron kívüli, azonnali frissítéshez kell.
Ismert korlát: a WooCommerce rendelések jelenleg nem tartalmaznak kampány/UTM-attribúciót (a "Order Attribution" funkciót még nem konfigurálták az áruházban) — enélkül a "melyik PPC kampányból jött ez a vásárló" kérdésre a rendszer nem tud pontos választ adni, csak a rendelés/vevő adatokra.
Láthatóság: "Központi", minden bejelentkezett usernek — a rendelési adatok valódi ügyfél-PII-t (név, email, telefon, cím) tartalmaznak, de a projekt tudatos döntése (2026-07-15), hogy ez cégen belül nem számít érzékenynek, ezért bárki (portálon vagy OkosRAG-n keresztül Mattermost-ban) kérdezhet konkrét rendelésekre/vevőkre is. Ez eltér a Gmail-szinkrontól, ami továbbra is Korlátozott (csak szuperadmin) — ld. lent és a 4. pontot.
Gmail / Google Workspace szinkron (@mokyen.com, @majomkenyer.hu)
Egy dedikált, csak-olvasási jogú Google service account (domain-wide delegation) olvassa be a céges postafiókokat, hogy a Kérdezz felület tartalmi ("volt-e ilyen tárgyú emailünk") és statisztikai ("hány emailt küldött X Y-nak") kérdésekre is tudjon válaszolni.
Garantáltan csak olvasás, sosem jelöl olvasottnak — a gmail.readonly OAuth scope strukturálisan nem tartalmaz írási/módosítási jogot (ha a kód véletlenül próbálna ilyet, a Google API elutasítaná). Az olvasott/olvasatlan állapotot kizárólag egy explicit "modify" hívás változtatná meg, amit a kód sosem hív.
Mellékletek sosem kerülnek letöltésre — csak a fejlécek (feladó, címzett, tárgy, dátum) és a szöveges törzs kerül feldolgozásra.
A postafiók-lista automatikusan felismerve — a Google Admin Directory API-val (egy Super Admin fiók "mögött" lekérdezve) minden szinkronnál újra lekérdezi az összes céges postafiókot mindkét domainen, így egy új kolléga postafiókja is automatikusan bekerül, kézi listakarbantartás nélkül. A kizárólag technikai admin-fiókok (pl. a Super Admin maga) kizárhatók.
Csak friss levelek — az első szinkron egy megadható napszámra (alapértelmezett 90 nap) megy vissza, utána mindig csak az azóta érkezettek/módosultak, postafiókonként külön nyilvántartva.
Automatikusan is fut, nem csak gombnyomásra — 6 óránként automatikusan frissül (a WooCommerce naponta kétszer, 12 óránként), a "Szinkronizálás most" csak soron kívüli frissítéshez kell. A Gmail API-nál levelenként kell külön lekérdezés, ezért ez a szinkron a háttérben fut, percekig is eltarthat sok postafióknál.
Friss-ha-régi ellenőrzés kérdéseknél is — ha a Kérdezz felület email-statisztikát/listát kérdez le, és a legutóbbi Gmail-szinkron 20 percnél régebbi, egy háttér-frissítés indul (nem blokkolja a választ — a jelenlegi kérdésre a meglévő adatból válaszol, a következő kérdés már a frissebbet kapja).
Korlátozott láthatóság — a levelek tartalma és a feladó/címzett metaadat is csak szuperadminnak elérhető (portálon és Mattermost/OkosRAG-n keresztül is), a belső, érzékeny kommunikáció védelme miatt (a Gemini free tier-től is). Ez eltér a WooCommerce-től, amit 2026-07-15 óta mindenki kérdezhet — az emailek maradnak a szűkebb szinten.
Feladó szerinti rangsor egy hívással — "ki küldött a legtöbb emailt/ki a legaktívabb az elmúlt X napban" jellegű kérdésekhez a rendszer egyetlen eszközhívással (nem személyenként külön lekérdezve) rangsorolja a feladókat email-darabszám szerint egy időszakra; a stílus/hangvétel megítéléséhez ezután a releváns feladókra szűrve lekéri a legutóbbi emailek rövid szöveg-előnézetét (snippet) is.
Céges névjegyzék — ha egy névhez (pl. "Salgó Andi") email címet kell találnia (pl. mielőtt emailt írna neki), a rendszer lekérheti a Google Workspace névjegyzéket (név+email pár mindenkiről), nem kell a címnek a kontextusban szerepelnie.
Tárolás módja — miért nem tudott korábban összesítő kérdésekre válaszolni
A vektor-alapú keresés (RAG) a "leginkább hasonló szöveg-darabokat" adja vissza egy kérdésre — ez remek "miről szól ez a dokumentum" kérdésekhez, de szerkezetileg alkalmatlan összesítésre ("hány rendelés volt a héten", "mennyi az átlag kosárérték egy hónapban"): nem tud számolni/összegezni egy teljes adathalmazon, csak néhány "hasonló" darabot mutat.
Ezért minden connectornál (elsőként a WooCommerce-nél) beállítható a Tárolás módja (Integrációk fül, szuperadmin):
RAG — a mostani módszer: szöveggé alakítva, chunkolva, vektorizálva, korlátozott láthatósággal. Jó tartalmi kérdésekhez.
Tábla — a forrás natural mezői (dátum, összeg, vevő, tételek) saját, tipizált Postgres táblába kerülnek (wc_orders, wc_products) — ez teszi lehetővé a valódi SQL-összesítést.
Mindkettő (alapértelmezett) — egyszerre mindkettő fut.
"Tábla" módban a Kérdezz motor (jelenleg Gemini) három fix, biztonságos "eszközt" hívhat, ha a kérdés ezt igényli: rendelés-statisztika (darabszám, bevétel, átlag kosárérték egy időszakra), top termékek (mennyiség/bevétel szerint) és konkrét rendelések listája (pl. "utolsó 3 rendelés" — ez más, mint az összesítés, mert tételes adatot ad, nem darabszámot). Ezek nem szabad SQL-t generálnak — fix, paraméterezett lekérdezések, amit a modell csak dátum-szűrővel hívhat meg, sosem szabad szöveggel. Ez a mechanizmus a sablon minden jövőbeli connectorhoz (pl. Gmail: email-darabszám, gyakoriság egy partnerrel).
Összetett kérésekhez (adatlekérés + email) az eszközök láncolhatók: egy kérdésen belül a modell akár több eszközt is hívhat sorban — pl. előbb lekéri az utolsó 3 rendelést, majd azzal az adattal tölti ki a draft_email-t. Ez max. 4 lépésig mehet egy kérdésen belül; ha ennél is összetettebb lenne, inkább bontsd szétebb, egyszerűbb kérdésekre.
Tárolt adat + automatikus frissítés, nem élő API-hívás minden kérdésnél: egy összesítő kérdés (pl. "mennyi volt az átlag kosárérték egy hónapban") úgyis az adott időszak összes rendelését kellene átnézze — ez a WooCommerce API-n élőben lassabb és a bolt leállásának is kiszolgáltatott lenne. Ezért a tárolt táblákat használja, de ha a legutóbbi frissítés 20 percnél régebbi, egy gyors, csak-a-változásokat-lekérő frissítést futtat a válasz előtt — így a friss kérdések sem mutatnak órákkal elmaradt adatot.
A Kérdezz felület egy másik, hasonló elven működő eszközt is használ: ha a kérdés valójában egy email megírására vonatkozik (pl. "holnap emailezd meg X-et, hogy…"), felismeri, és az Email fülön nyit egy előre kitöltött vázlatot (a relatív időpontot pontos dátummá alakítva) — a kiküldés ugyanúgy emberi jóváhagyáshoz kötött, mint a kézzel írt emaileknél. Hasonlóan, egy nyomdai/grafikai kép-generáláshoz szükséges promptot is meg tud írni (a márka-stílus és korábbi grafikai anyagok alapján) — nem képet generál, csak egy kimásolható promptot egy külső kép-generáló AI-hoz.
Motor-független eszközök: ugyanezek az eszközök (rendelés-statisztika/lista, email-vázlat, kép-prompt) Claude (helyi, előfizetéses) motorral is működnek, nem csak Geminivel — a Claude Code CLI saját, egyszer-használatos MCP-kapcsolatot kap vissza a szerverre, a kérdező felhasználóhoz kötve. Ha a motort a Beállítások fülön átváltod, ugyanaz a képességi kör marad, csak más LLM dönt a háttérben.
4. Biztonsági alapelvek
Szerepkörök összefoglalva — ki mit lát
Csak kétféle szerepkör van: munkatárs (user) és szuperadmin. Ugyanez a két szint érvényes a portálon ÉS a Mattermost-beli OkosRAG-n keresztül is — nincs külön, Mattermost-specifikus jogosultsági rendszer.
Szerepkör
Portálon
Mattermost / OkosRAG-n keresztül
Munkatárs (user)
Kérdezz/keresés: Központi tudásbázis (mindenki adata, ide tartozik 2026-07-15 óta a WooCommerce/webshop adat is) + saját Személyes doksijai. Nem éri el a Korlátozott (email) tartalmat/eszközöket. A Dokumentumok fülön (lista) viszont 2026-07-23 óta csak a SAJÁT feltöltéseit látja (nem másokét is, még a Központi láthatóságúakat sem) — ez csak a lista-nézetet szűkíti, a keresésben/válaszban a mások Központi doksijai továbbra is elérhetők neki. Nincs hozzáférése a Felhasználók/Beállítások/🤖 OkosRAG szerint (Folyamatok, Emberek/Szerepkörök) fülekhez.
DM-ben a saját portál-szerepe szerint válaszol (Központi + saját Személyes). Csoportos/publikus csatornában mindig csak Központi szintű adatot kap — akkor is, ha a csoportban van szuperadmin is, mert ott más is olvashatja a választ.
Szuperadmin
Minden a munkatárs-szintből, PLUSZ a Korlátozott (email) tartalom/eszközök, és a Felhasználók/Beállítások/🤖 OkosRAG szerint fülek (felhasználó-kezelés, motorváltás, folyamatábra- és szervezeti-ábra-generálás). A Dokumentumok fülön (lista) mindenki feltöltését látja, nem csak a saját magáét — ez a szuperadmin egyetlen kivétele a fenti "csak saját feltöltés" listázási szabály alól.
DM-ben teljes hozzáférés, a Korlátozott adat is. Csoportban/privát csoportos üzenetben (Mattermost "group message") csak akkor ad Korlátozott szintű választ, ha a beszélgetés MINDEN emberi tagja szuperadmin — ha akár egy sima munkatárs is jelen van, Központi-only. Publikus csatornában mindig Központi-only, függetlenül a taglistától (mert oda bárki beléphet később).
Mattermost-fiók összekötése a portál-fiókkal: a OkosRAG a kérdező Mattermost-email címe alapján ismeri fel, melyik portál-fiókhoz (és így melyik szerepkörhöz) tartozik — ezt a Felhasználók fülön (szuperadmin) kell beállítani minden usernél (kattintás az email-cellára). Ha egy Mattermost-user emailje nincs összekötve egy portál-fiókkal, a OkosRAG a legszűkebb, biztonságos alapértelmezést használja (Központi-only, mintha sima, nem-azonosított user kérdezne).
Külső LLM-nek (Gemini, vagy bármi nem-lokális) csak a releváns dokumentum-darabok mennek ki, nem a teljes adatbázis — de ez önmagában nem garancia, ha egy releváns darab pont jelszót vagy belső infót tartalmaz.
Ingyenes/free-tier külső AI API-k (pl. Gemini free) adatvédelmi feltételei eltérnek a fizetős szinttől — a free tier promptjait/válaszait a szolgáltató felhasználhatja modellfejlesztésre.
A MCP végpont hozzáférés-védett: Bearer tokennel, ami a Coolify UI-n keresztül kezelhető.
Három láthatósági szint a dokumentumokon: Központi (minden bejelentkezett user — ide tartozik 2026-07-15 óta a WooCommerce rendelési adat is, tudatos döntéssel), Személyes (csak a feltöltő), Korlátozott (csak szuperadmin — pl. Gmail-tartalom). A rendszerszintű/MCP-s hozzáférés (bearer token, nincs mögötte konkrét user) csak a Központi szintet éri el. Ugyanez a szintezés érvényes a Mattermost-beli OkosRAG botra is — ld. az 1. és 5. pontot.
Email-küldés — mindig emberi jóváhagyással. A rendszer sosem küld emailt automatikusan/láthatatlanul: a portál a végleges, teljes szöveget mindig megjeleníti egy megerősítő ablakban ("Egyetértek, mehet" gomb), és csak ezután hívja meg a valódi küldést — időzített emailnél is a jóváhagyás a szöveg elfogadásakor történik, nem a tényleges kiküldéskor. Mindenki a saját email-küldő hozzáférésével (SMTP jelszó vagy API-kulcs) küld, nem egy közös céges fiókból. Visszaélés/hiba ellen véd az óránkénti 5 emailes limit is (felhasználónként).
Ismétlődő feladatok — sosem automatikus kimenet. Egy kétheti/rendszeres feladat minden lefutáskor újragenerálja a tartalmát friss adatból, de ez mindig egy review-listába kerül — a rendszer innen semmit sem küld ki vagy exportál magától, egy embernek kell átnéznie/felhasználnia az eredményt.
Audit-napló. Minden Kérdezz-kérdés (nem csak a 👍/👎-vel értékeltek) naplózódik: ki, mit, mikor, melyik motorral — a Beállítások fülön (szuperadmin) visszakereshető, a legutóbbi 100 bejegyzés.
Cégazonosság konfigurálható, nem hardcode-olt (2026-07-30). Ugyanez a kódbázis (ez a repó) más VPS-eken, más cégekre is fut — ugyanaz a felület/funkciókör, csak más adatok/kapcsolók (AI API-kulcsok, WooCommerce/Gmail-fiókok stb.). A Beállítások fülön a cégnév/rövid leírás/céges email-domain(ek) szerkeszthető — ez alapján hivatkoznak rá az AI-generált folyamat-/szervezeti-ábrák és a PPC-stratégia, nem egy fixen beégetett cégnévre.
Döntés (2026-07-07): Gemini elfogadva érzékeny adatra is, előszűréssel
A projekt úgy döntött, hogy a Gemini API-t (free tier) használjuk érzékeny/céges tartalomra is, de előfeldolgozó szűrővel a kiküldés előtt. Megépített kétrétegű megoldás:
A
Strukturált szűrő (regex)Gyors, determinisztikus mintaillesztés: jelszó-szerű string, API kulcs formátumok, bankkártyaszám, IBAN, magyar adószám (8-1-2 számjegy), magyar bankszámlaszám, magyar telefonszám (+36/06) — ez a "könnyű" eseteket biztosan elkapja, mielőtt a szabad szöveg egyáltalán eljutna a következő réteghez.
B
Lokális LLM-es szűrő (Ollama, a szerveren belül marad)Egy a szerveren futó, kifelé sosem küldött modell átolvassa a már regex-szűrt szabad szöveget, és kigyomlálja/kitakarja, amit érzékenynek ítél (pl. "ez egy fizetésről szóló bekezdés" jellegű felismerés) — csak a megtisztított szöveg megy ki a Gemini API-nak.
Fontos korlát, amit el kell fogadni: ez a két réteg együtt is csökkenti, nem garantálja nullára a kockázatot — egy szabadszöveges, mintát nem követő érzékeny mondat átcsúszhat. Ezért ajánlott egy kézi "sosem küldhető ki" jelölő mező is minden dokumentumon/darabon, amit a feltöltő vagy admin explicit be tud kapcsolni — ez egy kemény, szoftveres véletlentől nem függő védőháló a legérzékenyebb tartalmakra. Ez a szűrő maga még nincs megépítve — tervezési döntés, a következő fejlesztési kör része lesz.
5. Tervezett funkciók — még nem élnek
Az alábbiak megbeszélés/tervezés alatt állnak, jelenleg semelyik nincs megépítve. Ez a lista él, ahogy a projekt halad.
Per-user jogosultság-finomításjelenleg a "központi" láthatóságú dokumentumokat minden bejelentkezett user látja/kérdezheti — ez egy tudatos, ideiglenes egyszerűsítés. A "személyes" doksik már elkülönülnek, de a központi részen belüli finomabb, dokumentum-szintű jogosultság még nincs.
Személyes naptár-konnektor (Google Calendar)folyamatban — minden user a saját (nem közös) naptárát kötné be, OAuth-bejelentkezéssel (nem service accounttal, mint a Gmail-nél, mert ez személyes hozzájárulást igényel). Csak strukturált lekérdezés (Tábla mód), RAG nélkül — pl. "mikor van a következő megbeszélésem". Várjuk egy Google OAuth Client ID + Secret létrehozását.
Meeting-átirat automatizálásplatform még nincs kiválasztva — tisztázandó, melyik videohívó rendszert használjátok
Elvetve: Bitrix24 CRM bekötés — a free csomag nem engedi a fejlesztői API-t/MCP-t, a fizetős upgrade nem opció. Kézi CSV-export+feltöltés maradt volna workaroundként, ezt sem választottuk. Facebook Messenger (személyes/csoportos) bekötés is elvetve — ToS-sérő és technikailag instabil lenne. Túlhaladott terv, ezért törölve a listából: "Csapat-chat (Slack)" — a csapat végül nem Slackre állt át, hanem a Mattermost self-hosted alternatívát választottuk, ami élesben megvalósult, ld. lent. Elkészült azóta: dokumentumfeltöltés a portálon (fájlok — PDF/DOCX/kép-OCR —, annotációval, opcionális időbélyeggel, feldolgozás-státusszal, feltöltő névvel, újrafeltöltéskor automatikus duplikátum-csere), személyes/központi/korlátozott dokumentum-elkülönítés, weboldal-import (crawl), recency-súlyozott rangsorolás, Integrációk fül + WooCommerce termék/rendelés-szinkron (2026-07-15 óta Központi láthatósággal, mindenki kérdezheti — PPC-elemzéshez, RAG/Tábla/Mindkettő tárolás-móddal + automatikus friss-ha-régi frissítéssel + rendelés-statisztika/top-termékek eszközök az összesítő kérdésekhez), Gmail/Google Workspace szinkron (@mokyen.com + @majomkenyer.hu, garantáltan csak-olvasás, automatikus postafiók-felismerés, RAG + email-statisztika/lista eszközök, Korlátozott láthatósággal), választható Kérdezz-motor (Gemini vagy a cégvezető Claude-előfizetése, mindkettő ugyanazokat az eszközöket éri el — motor-független működés) + napi használat-becslés a Beállítások fülön, Email fül (saját SMTP/Brevo/SendGrid/Resend beállítással, jóváhagyás-köteles + időzíthető küldéssel, óránkénti limittel, teszt-email gombbal, chat-ből induló email-vázlat felismeréssel), nyomdai kép-generáláshoz prompt-író eszköz (Kérdezz-ben és önálló mini-eszközként is), Egyedi funkciók fül (emberi feladatok belépési figyelmeztetéssel + ismétlődő AI-feladatok, mindig emberi jóváhagyást igénylő review-sorral — PPC-áttekintés-alap most tesztelés alatt), 👍/👎 visszajelzés a Kérdezz válaszokra, Mattermost csapat-chat + OkosRAG bot (self-hosted, chat.majomrag.olab.hu, DM-ben mindig / csatornában @OkosRAG említésre válaszol, ugyanazt a tudásbázist/motort használja mint a portál, tagság-alapú jogosultsággal).