Mennyire tud magyarul egy helyi AI?
Frissítés: egy alaposabb, 13 feladatos teszt után a brAInharbor alapmodellje a qwen3.5:35b-a3b lett, a gemma4:26b pedig a kisebb gépekre ajánlott változat. A részletek a második bejegyzésben vannak.
Miért kérdés ez egyáltalán?
Egyre több kisvállalkozás íratna mesterséges intelligenciával leveleket, válaszokat és összefoglalókat, de nem szívesen küldi el az ügyfelei adatait egy külföldi felhőszolgáltatásnak. Kézenfekvő megoldás egy nyílt modell, amely a saját gépen fut: az adat nem hagyja el az irodát, és nincs havidíj.
Csakhogy a nagy felhős modellek jól írnak magyarul, a kicsik viszont kitalált szavakat, rossz ragokat, idegen betűket adnak. Arra voltam kíváncsi, hogy egy otthon is elérhető gépen futó modell tud-e annyira magyarul, hogy a szövegét egy ügyfélnek is el lehessen küldeni.
A gép: egy RTX 5070 videokártya 12 GB memóriával és 32 GB RAM. A rövid válasz: a gemma4:26b jó beállításokkal használható és gyors, de nem hibátlan. Ami ügyfélhez megy, azt egy embernek el kell olvasnia.
Az alábbiakban leírom, hogyan teszteltem, mi meglepett, és melyik beállítás lett végül az alapértelmezett a brAInharbor nevű csomagban.
Hogyan teszteltem
Eleinte a csevegőfelületen próbálgattam a modelleket, de egy-egy válaszból nem lehet következtetni: ugyanaz a modell egyszer hibátlan levelet ír, máskor kitalál egy szót. Ezért írtam egy kis Python-szkriptet, amely minden modellnek pontosan ugyanazokat a feladatokat adja, többször is.
Hat feladat van benne, olyanok, amilyeneket egy kis iroda tényleg kérne:
- rövid, hivatalos levél egy ügyfélnek késedelmes szállításról;
- válasz egy panaszra (sérülten érkezett kávéfőző, csere vagy visszatérítés);
- tegeződő meghívó a kollégáknak egy értekezletre;
- a GDPR egyszerű elmagyarázása egy tízfős cégnek;
- egy belső közlemény összefoglalása három pontban;
- egy angol e-mail fordítása hivatalos magyarra.
Minden feladat háromszor fut, így egy beállítás 18 választ ad. A szkript méri az időt, és minden választ automatikusan ellenőriz:
- helyesírás a Hunspell magyar szótárával;
- idegen betűk: cirill, kínai, koreai vagy japán karakterek a szövegben;
- ismert hibák listája, amelyet a válaszok olvasása közben bővítettem;
- kötelező tények: benne van-e például a meghívóban az időpont és a helyszín;
- másolás: nem veszi-e át szó szerint a rendszerpromptban kapott példát.
Az ismert hibák listájára azért van szükség, mert a helyesírás-ellenőrző nem lát mindent. A „késedelmééről” például létező szóalak, csak értelmetlen. A „ki kell végezni” is helyes, csak éppen kivégzést jelent, nem azt, hogy valamit el kell végezni. Ezeket csak olvasás közben lehet észrevenni.
A futások megismételhetők: azonos beállítással és véletlenmaggal (seed) a modell pontosan ugyanazt válaszolja. Így egy prompt módosítása után látszik, hogy a változás tényleg a módosítástól jön, nem a véletlentől.
A kisebb modell nem elég: 12b kontra 26b
Két modellt hasonlítottam össze a Google Gemma 4 családjából. A gemma4:12b kényelmesen elfér a 12 GB-os kártyán, és nagyon gyors: körülbelül 130 tokent ír másodpercenként. A gemma4:26b nagyobb, és nem fér el teljesen a videokártya memóriájában. Mégis használhatóan gyors, mert úgynevezett mixture-of-experts modell: minden szóhoz a paramétereinek csak kis részét, nagyjából 4 milliárdot használja. Így másodpercenként 45–70 tokent ír, ami bőven gyorsabb, mint ahogy olvasunk.
Az első benyomás csalt. Néhány kézi próba után a 12b majdnem hibátlannak tűnt, és már azt terveztem, hogy ez lesz az alapértelmezett. A szkriptes futások mást mutattak:
- A 12b szavakat talál ki, és néha a jelentést is elrontja. A panaszra adott válaszban például azt írta, hogy a vételárat „visszautasítjuk”, vagyis elutasítjuk, pedig vissza kellett volna téríteni. Egy ügyfélnek elküldve ez nem helyesírási hiba, hanem az ellenkezője annak, amit mondani akartunk.
- Bekapcsolt gondolkodással a 12b néha végtelen ciklusba került: addig gondolkodott, amíg meg nem telt a kontextusablaka, és végül semmit sem válaszolt.
- A 26b sokkal kevesebbet hibázott, és a hibái inkább ragozási hibák voltak, nem értelemzavarók.
A tanulság: egy-két próba alapján nem szabad modellt választani, mert a hibák véletlenszerűen jönnek elő.
A gondolkodás ötször lassabb, és nem jobb
A Gemma 4 modellek tudnak „gondolkodni”: válasz előtt végiggondolják, hogyan oldják meg a feladatot, és ezt le is írják. Matematikában vagy többlépéses feladatokban ez segíthet. Egy rövid levélnél viszont mást mutattak a számok:
| Gondolkodással | Gondolkodás nélkül | |
|---|---|---|
| Válaszidő (medián) | kb. 17 mp | kb. 3,3 mp |
| A kimenet mekkora része gondolkodás | 85–95% | 0% |
| Magyar hibák | ugyanannyi | ugyanannyi |
A modell tehát a munkája nagy részét olyan szövegre fordította, amelyet senki sem olvas el, a végeredmény pedig nem lett jobb. Ezért a brAInharborban a gondolkodás alapból ki van kapcsolva. Aki bonyolultabb feladatot ad, a csevegés beállításaiban visszakapcsolhatja.
A pontosabb változat sem lett jobb
A helyben futtatott modelleket tömörítve (kvantálva) szokás letölteni. Az alapértelmezett q4 változat nagyjából 4 biten tárolja a modell súlyait, a q8 8 biten. A q8 kétszer akkora, és a várakozás az, hogy kevesebbet hibázik. Úgy gondoltam, a magyar ragozási hibák egy része talán a tömörítésből jön.
A 18 válasz alapján nem így van:
- A q8 lassabb: a medián válaszidő 4,2 mp volt a q4 3,3 másodpercével szemben, mert még kevésbé fér el a videokártya memóriájában.
- 18 válaszból háromban koreai vagy kínai karakterek jelentek meg a magyar szöveg közepén.
- Értelemzavaró hibákat is ejtett. Egy levélben azt írta, hogy „Elnézzük a kellemetlenséget”, vagyis mi bocsátunk meg az ügyfélnek, ahelyett hogy elnézést kérnénk tőle.
Ez kis minta, és nem bizonyítja, hogy a q8 általában rosszabb. Azt viszont igen, hogy ezen a gépen nem éri meg a dupla méretet és a lassabb válaszokat. Maradt a q4.
Mire jó a rendszerprompt, és hol a határa
A legnagyobb javulást nem a modellválasztás hozta, hanem a magyar nyelvű rendszerprompt, vagyis az az állandó utasítás, amelyet a modell minden beszélgetés elején megkap. Nélküle a 26b is rosszul ragozott, és angol szavakat, néha kínai írásjeleket kevert a szövegbe. Egy rövid magyar utasítás és alacsonyabb hőmérséklet (0,3, vagyis kevesebb véletlenszerűség) sokat segített.
Utána több változatot is kipróbáltam, és mindegyik tanított valamit:
- Mintalevéllel: a stílus jobb lett, de a modell innentől mindenre levelet írt, a GDPR-magyarázatra is, tárggyal és megszólítással.
- „Levelet csak akkor, ha kérik”: ez megoldotta a formát, de mivel megengedtem a bevett idegen szakszavakat, a modell ezt tágan értelmezte, és angol szavak csusszantak be.
- Rövid mondatok és szigorú „csak magyarul” szabály: ez lett a legjobb egyensúly. Ez a változat került a brAInharborba.
- Rövidítések tiltása: a modell a „kb.” rövidítésből néha „Kbán”-t csinált, ezért megtiltottam a rövidítéseket. Az a hiba eltűnt, de helyette újak jöttek: „Kés delayed”, japán karakterek és olyan dátumok, mint a „novemberét kilencedik napja”.
A tanulság: egy kis modellnél a prompt minden módosítása újrakeveri a hibákat. Egy hibát meg lehet szüntetni, de a helyette érkező újakat csak több futás után látni. Egy ponton abba kell hagyni a csiszolást, és a maradék hibákat máshogy kezelni.
A végleges rendszerprompt:
Mindig kizárólag helyes, természetes magyar nyelven válaszolj, idegen szavak és más írásrendszerek betűi nélkül. Kivételt csak a bevett rövidítések és szakszavak jelentenek (például GDPR, e-mail). Írj rövid, egyszerű mondatokat, és kerüld a tükörfordításokat (például „meg fog történni”).
Csak akkor írj levelet tárggyal, megszólítással és elköszönéssel, ha levelet vagy e-mailt kérnek tőled. Hivatalos levélben magázódj; ha a feladat tegeződést kér, tegeződj.
Példa egy jó hivatalos levél stílusára: [egy háromsoros értesítés egy rendelés késéséről]
A rejtett 6000 token az Open WebUI-ban
A modellt a felhasználók az Open WebUI csevegőfelületén keresztül érik el. Ott feltűnt valami furcsa: egy „Helló! Mennyi 1x1?” kérdésre a modell több másodpercig hallgatott, mielőtt válaszolni kezdett, és a statisztika szerint több mint 6000 tokent kapott bemenetként.
Kiderült, hogy az Open WebUI új, alapértelmezett (natív) függvényhívási módja minden üzenethez mellékeli a beépített eszközei leírását, hogy a modell maga dönthessen a használatukról. Egy nagy felhős modellnek ez alig számít, egy helyi gépen viszont minden token idő:
| Natív mód (alapértelmezett) | Régi (legacy) mód | |
|---|---|---|
| Bemeneti tokenek | 6028 | 293 |
| Idő a válasz első szaváig | 7,2 mp | 0,4 mp |
A régi módban az Open WebUI maga keres a feltöltött dokumentumokban, és csak a találatokat adja a modellnek. Kipróbáltam egy feltöltött PDF-fel is: a válasz magyarul jött, forrásmegjelöléssel. A brAInharbor ezért a régi módot állítja be alapértelmezettnek, a modell kontextusablakát pedig 16 ezer tokenre emeli, hogy a dokumentumrészletek is elférjenek.
Egy másik apróság: ha az Open WebUI a saját rendszerüzenetét küldi (például dokumentumkeresésnél), az Ollama elhagyja a modellbe épített magyar rendszerpromptot. Ezért a prompt két helyen is szerepel, és egy automatikus ellenőrzés figyeli, hogy a két példány ne térjen el egymástól.
Ami megmaradt: az ember nem spórolható meg
A végső beállítás (gemma4:26b, q4, gondolkodás nélkül, 0,3-es hőmérséklet, a fenti prompt) gyors, és a válaszai többségében nincs hiba. Néhány visszatérő hiba azonban minden prompttal megmaradt, ezek a modell saját gyengeségei:
- „késedelmééről” a „késedelméről” helyett, gyakorlatilag minden késésről szóló levélben;
- „Kbán” és „Kbuk” a „kb.” rövidítésből, nagyjából minden harmadik meghívóban;
- elvétve rossz toldalék, például „adatokot”.
Ezek apróságnak tűnnek, de egy ügyfélnek küldött levélben rossz benyomást keltenek. Ezért a helyes hozzáállás az, hogy a helyi modell piszkozatot ír, mint egy ügyes, de még betanítás alatt álló kolléga. Időt spórol, de amit kiküldünk, azt egy embernek el kell olvasnia.
Két irányban lehet továbblépni:
- Utószűrő: a visszatérő hibák ismertek, így egy helyesírás-ellenőrzőre és egy hibalistára épülő szűrő jelezhetné vagy javíthatná őket, mielőtt a felhasználó látja a választ.
- Nagyobb gép: egy 24 GB-os videokártyán nagyobb modellek is futnak. Hogy azok mennyivel jobbak magyarul, azt még nem mértem meg, de ugyanez a tesztcsomag megmondja majd.
Próbáld ki
Minden, amiről itt szó volt, benne van a brAInharbor első kiadásában (v0.1.0). Ez egy nyílt forrású csomag, amely egyetlen linuxos gépre telepíti az Ollamát, az Open WebUI-t és a Caddy webszervert, a fenti magyar beállításokkal és HTTPS-sel. Van benne mentés és visszaállítás is, amelyet egy üres gépen is kipróbáltam.
git clone https://github.com/brainharbor/brainharbor.git
cd brainharbor
cp .env.example .env # DOMAIN és WEBUI_SECRET_KEY beállítása
scripts/preflight.sh # ellenőrzi a gépet
docker compose up -d
scripts/pull-models.sh # letölti a modelleket
A tesztcsomag is benne van (tests/hu/). Ha más modellt vagy más promptot próbálnál ki, ugyanazokkal a feladatokkal és ellenőrzésekkel mérheted meg, például:
python3 tests/hu/run.py --models gemma4:26b,gemma4:12b --runs 3
Ha találsz egy modellt, amely jobban ír magyarul ezen a méretben, vagy egy hibát, amelyet a lista nem ismer, szívesen hallok róla.