[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"blog-text-to-sql-llm-guardrails-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":34,"cover":53,"og":54,"expertise":55,"locales":56,"lang":59,"title":60,"description":61,"coverAlt":62,"metaTitle":63,"takeaways":64,"faq":70,"toc":86,"blocks":116,"others":346},"text-to-sql-llm-guardrails","2026-10-16",8,"rag",[9,10,11,12,13],"Text-to-SQL","LLM security","PostgreSQL","Agents","Analytics",[15,16,17,18,19,20,21,22,23,24],"text to sql llm","text-to-sql guardrails","llm sql agent security","natural language to sql production","read only database role llm","bird benchmark text to sql","spider 2.0 benchmark","sqlglot validate sql","row level security llm","chat with your database",[26,29,32],{"name":27,"url":28},"SQL","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSQL",{"name":30,"url":31},"Natural language interface to databases","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNatural-language_user_interface",{"name":11,"url":33},"https:\u002F\u002Fwww.postgresql.org\u002F",[35,38,41,44,47,50],{"title":36,"url":37},"BIRD-bench: leaderboard and dataset description","https:\u002F\u002Fbird-bench.github.io\u002F",{"title":39,"url":40},"Lei et al.: Spider 2.0: Evaluating Language Models on Real-World Enterprise Text-to-SQL Workflows (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2411.07763",{"title":42,"url":43},"PostgreSQL 18 Documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":45,"url":46},"PostgreSQL 18 Documentation: Client Connection Defaults (read-only and timeouts)","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fruntime-config-client.html",{"title":48,"url":49},"SQLGlot: SQL parser, transpiler and optimizer (GitHub)","https:\u002F\u002Fgithub.com\u002Ftobymao\u002Fsqlglot",{"title":51,"url":52},"OWASP Gen AI Security Project: LLM06:2025 Excessive Agency","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm062025-excessive-agency\u002F","\u002Fimages\u002Fblog\u002Ftext-to-sql-llm-guardrails\u002Fcover.webp","\u002Fimages\u002Fblog\u002Ftext-to-sql-llm-guardrails\u002Fog.jpg","ai-engineer",[57,58,59],"en","de","hu","Text-to-SQL LLM-mel: sémakontextus, csak olvasható szerepkörök és működő validálás","Mennyire pontos valójában a text-to-SQL, hogyan kapjon sémakontextust a modell, és milyen adatbázis- és kódszintű korlátok teszik biztonságossá az SQL-t.","Egy kérdés sémakontextuson, SQL-generáláson, egy validátoron és egy csak olvasható adatbázis-szerepkörön halad át, mielőtt visszajön az eredménytáblázat.","Text-to-SQL LLM-mel: korlátok, melyek tartanak · Balázs Csorba",[65,66,67,68,69],"A legjobb BIRD-rendszerek nagyjából 83%-os végrehajtási pontosságot érnek el a szakértők 93%-ával szemben, a Spider 2.0 ágensalapú vállalati feladatai pedig sokkal nehezebbek.","A pontosság főleg a sémakontextusból jön: válogatott nézetek, oszlopleírások, mintaértékek, szószedet és ellenőrzött példalekérdezések.","A biztonságot először az adatbázisban kényszerítsd ki: csak a válogatott nézetekre SELECT-jogú szerepkör, csak olvasható tranzakciók, időkorlátok és sorszintű biztonság.","Második rétegként validálj kódban: elemezd az SQL-t, egyetlen SELECT utasítást engedj, a táblákat engedélylistán ellenőrizd, és tegyél rá sorlimitet.","Mutasd meg a felhasználónak a generált SQL-t és az eredménytáblázatot, és a saját kérdéseiden értékelj a végrehajtott eredmények összevetésével.",[71,74,77,80,83],{"q":72,"a":73},"Mennyire pontos a text-to-SQL 2026-ban?","A BIRD benchmarkon a legjobb közzétett rendszerek a tesztkészleten nagyjából 83%-os végrehajtási pontosságot érnek el, az adatmérnökök és adatbázis-szakos hallgatók nagyjából 93%-ot. A több mint 1000 oszlopos vállalati adatbázisokat használó Spider 2.0-n egy o1-preview alapú ágens a megjelenéskor a feladatok mindössze 21,3%-át oldotta meg. A saját sémád valahol a kettő között lesz.",{"q":75,"a":76},"Biztonságos LLM-mel SQL-t futtatni éles adatbázison?","Csak adatbázisszintű kontrollok mögött. Csatlakozz egy külön szerepkörrel, amely csak a válogatott nézetekből olvashat, kényszeríts csak olvasható tranzakciókat, állíts be utasítás-időkorlátot, alkalmazz felhasználónkénti vagy bérlőnkénti sorszintű biztonságot, és lehetőleg replikát kérdezz le. A promptba írt utasítás önmagában nem kontroll.",{"q":78,"a":79},"Kell SQL-validálás, ha a szerepkör csak olvasható?","Igen, második rétegként. Az elemzéssel még az adatbázis előtt elutasíthatod a többszörös utasításokat, az ismeretlen táblákat és függvényeket és a drága mintákat, a modell pedig egyértelmű hibaüzenetet kap, amellyel javíthatja a lekérdezést.",{"q":81,"a":82},"Mi az a szemantikai réteg, és kell-e?","A szemantikai réteg az üzleti mutatókat, például a bevételt vagy az aktív ügyfeleket, egyszer, kódban definiálja. Ha a felhasználók főleg definiált mutatókra kérdeznek, a modell ebből a rétegből válasszon mutatót és szűrőt szabad SQL írása helyett; ez pontosabb és következetesebb.",{"q":84,"a":85},"Támadhatják az adatbázisban lévő adatok a modellt?","Igen. A szöveges oszlopok, például a termékleírások vagy a jegyek szövege tartalmazhatnak utasításokat, amelyeket a modell az eredményekben elolvas. A lekérdezési eredményeket kezeld nem megbízható bemenetként, és ugyanannak az ágensnek ne adj olyan eszközt, amely adatot küldhet kifelé.",[87,90,93,96,99,102,104,107,110,113],{"id":88,"title":89},"how-accurate-is-text-to-sql","Mennyire pontos ma a text-to-SQL?",{"id":91,"title":92},"architecture","Hogyan néz ki egy biztonságos text-to-SQL architektúra?",{"id":94,"title":95},"schema-context","Milyen sémakontextusra van szüksége a modellnek?",{"id":97,"title":98},"database-guardrails","Mely korlátok tartoznak az adatbázisba?",{"id":100,"title":101},"validate-in-code","Hogyan validáld kódban a generált SQL-t?",{"id":103,"title":84},"prompt-injection-through-data",{"id":105,"title":106},"show-the-sql","Miért lássa a felhasználó a generált SQL-t?",{"id":108,"title":109},"evaluate","Hogyan értékeld a text-to-SQL funkciót?",{"id":111,"title":112},"when-not-to-use-free-sql","Mikor ne generálj egyáltalán szabad SQL-t?",{"id":114,"title":115},"sources","Források",[117,121,124,127,135,141,142,151,154,155,171,213,216,217,230,232,273,279,280,287,289,292,293,301,308,309,312,313,321,322,325,326],{"type":118,"content":119},"paragraph",[120],"Minden adatbázissal rendelkező cégnél van valaki, aki hétköznapi nyelven szeretne kérdezni tőle: hány rendelés jött Ausztriából az előző negyedévben, mely ügyfelek hagytak fel a vásárlással, mely cikkek vannak a minimális készlet alatt. Az LLM-ek elfogadható SQL-t írnak, így a demó egy délután alatt elkészül. Az éles üzem tovább tart, mert a nehéz rész nem a generálás, hanem a megfelelő sémakontextus, és annak biztosítása, hogy egy hibás vagy manipulált lekérdezés ne okozhasson kárt.",{"type":118,"content":122},[123],"A cikk azzal kezd, mit mondanak a benchmarkok a pontosságról, majd végigmegy az általam használt architektúrán: válogatott sémakontextus, egy adatbázis-szerepkör, amely csak azt olvashatja, amit kell, validálás kódban, és egy ellenőrző kör a felhasználóval. A példák PostgreSQL-t használnak, de a rétegek bármely SQL-adatbázisra érvényesek.",{"type":125,"level":126,"id":88,"text":89},"heading",2,{"type":118,"content":128},[129,130,134],"A ",{"tag":131,"href":37,"children":132},"a",[133],"BIRD"," a valósághű adatbázisok szabványos benchmarkja: 12 751 kérdés–SQL pár 95 adatbázison, összesen 33,4 GB-on, piszkos értékekkel és külső tudást igénylő kérdésekkel. A ranglista szerint az emberek (adatmérnökök és adatbázis-szakos hallgatók) a tesztkészleten 92,96%-os végrehajtási pontosságot érnek el. A legjobb rendszerek 2026 szeptemberében nagyjából 83%-nál tartanak, és olyan „oracle” tudásbeli segítséget kapnak, amelyet a saját felhasználóid nem fognak megadni.",{"type":118,"content":136},[129,137,140],{"tag":131,"href":40,"children":138},[139],"Spider 2.0"," a vállalati véglet: 632 munkafolyamat-feladat valódi adatbázisokon BigQueryben, Snowflake-ben és máshol, gyakran több mint 1000 oszloppal és 100 sornál hosszabb SQL-lel. A megjelenéskor egy o1-preview alapú kódágens ezek 21,3%-át oldotta meg, szemben az eredeti Spider 91,2%-ával és a BIRD 73,0%-ával. A tanulság nem az, hogy a text-to-SQL kudarc, hanem hogy a pontosság azon múlik, mennyit talál meg a modell a séma jelentéséből.",{"type":125,"level":126,"id":91,"text":92},{"type":143,"attrs":144,"inner":148,"caption":149},"diagram",{"viewBox":145,"role":146,"aria-labelledby":147},"0 0 720 170","img","t2s1-t t2s1-d","\u003Ctitle id=\"t2s1-t\">Egy text-to-SQL rendszer rétegei\u003C\u002Ftitle>\u003Cdesc id=\"t2s1-d\">A kérdést összekapcsoljuk a visszakeresett sémakontextussal, a modell SQL-t generál, egy validátor elemzi és ellenőrzi, a lekérdezés csak olvasható szerepkörrel, időkorláttal és sorszintű biztonsággal fut, a felhasználó pedig látja az SQL-t és az eredménytáblázatot.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"t2s1-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Kérdés\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">+ sémakontextus\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#t2s1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Generálás\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">egy SELECT\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#t2s1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Validálás\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">elemzés, lista\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#t2s1-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Futtatás\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">csak olvasható\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#t2s1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Megjelenítés\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">SQL + táblázat\u003C\u002Ftext>",[150],"Ha a validálás vagy a futtatás elbukik, a hiba egy-két javítási kísérletre visszamegy a modellhez, soha nem többre.",{"type":118,"content":152},[153],"A sorrend számít. Az adatbázisréteg a garancia; a validátor gyors második réteg, amely hasznos hibákat ad a modellnek; a felhasználói ellenőrzés pedig azokat a lekérdezéseket fogja meg, amelyek érvényesek és biztonságosak, mégis rossz kérdésre válaszolnak.",{"type":125,"level":126,"id":94,"text":95},{"type":118,"content":156},[157,158,162,163,166,167,170],"A nyers ",{"tag":159,"children":160},"code",[161],"CREATE TABLE"," utasítások nem elegendők. Az olyan oszlopnevek, mint a ",{"tag":159,"children":164},[165],"kz_status"," vagy az ",{"tag":159,"children":168},[169],"art_typ",", semmit sem mondanak a modellnek, és az új munkatársaknak is keveset. Ami segít, nagyjából hatás szerint sorba rendezve:",{"type":172,"ordered":173,"items":174},"list",true,[175,185,190,203,208],[176,180,181,184],{"tag":177,"children":178},"strong",[179],"Válogatott nézetek"," olvasható nevekkel, amelyek összekapcsolják azokat a táblákat, amelyekre ténylegesen kérdeznek, például egy ",{"tag":159,"children":182},[183],"v_orders"," nézet az ügyfél országával és az euróban kifejezett nettó összeggel.",[186,189],{"tag":177,"children":187},[188],"Oszlopleírások"," mértékegységekkel, kódokkal és jelentésükkel: a 3-as státusz kiszállítottat jelent, az összegek nettók, a dátumok helyi időben vannak.",[191,194,195,198,199,202],{"tag":177,"children":192},[193],"Mintaértékek"," a kevés különböző értékű oszlopokhoz, hogy a modell ",{"tag":159,"children":196},[197],"country = 'AT'"," feltételt írjon, ne ",{"tag":159,"children":200},[201],"country = 'Austria'","-t.",[204,207],{"tag":177,"children":205},[206],"Üzleti szószedet:"," ki számít aktív ügyfélnek, mely rendelések számítanak bevételnek, hogyan definiált az üzleti év.",[209,212],{"tag":177,"children":210},[211],"Ellenőrzött példalekérdezések:"," valaki által átnézett kérdés–SQL párok, az új kérdéshez való hasonlóság alapján visszakeresve.",{"type":118,"content":214},[215],"Nagy sémánál ne másold az egészet a promptba. Kérdésenként keresd vissza a releváns nézeteket és leírásokat, ugyanúgy, ahogy RAG-nál a dokumentumokat. A folyamatos munka nagy része is a szószedetbe és a példákba megy: minden hibás válaszból, amelyet egy felhasználó jelez, új ellenőrzött példa vagy javított leírás legyen.",{"type":125,"level":126,"id":97,"text":98},{"type":118,"content":218},[219,220,223,224,229],"Az OWASP a ",{"tag":131,"href":52,"children":221},[222],"túlzott cselekvési jogkört"," (excessive agency) az LLM-alkalmazások fő kockázatai közé sorolja, és szinte pontosan ezt az esetet hozza példának: egy ágens, amelynek csak olvasási jog kell egy terméktáblához, ne férjen hozzá más táblákhoz, és ne módosíthasson rekordokat, és ezt az ágens által használt identitás adatbázis-jogosultságaival kell kikényszeríteni. Ez ugyanaz az elv, mint az ",{"tag":225,"to":226,"children":227},"link","\u002Fblog\u002Fai-agent-identity-least-privilege",[228],"AI-ágensek is identitások"," cikkben.",{"type":159,"code":231},"-- A role for the assistant: SELECT on curated views, nothing else\nCREATE ROLE sql_assistant LOGIN PASSWORD :'pw' NOSUPERUSER NOCREATEDB NOCREATEROLE;\nREVOKE ALL ON SCHEMA public FROM sql_assistant;\nGRANT USAGE ON SCHEMA reporting TO sql_assistant;\nGRANT SELECT ON reporting.v_orders, reporting.v_customers, reporting.v_stock TO sql_assistant;\n\n-- Every transaction read-only, every statement time-limited\nALTER ROLE sql_assistant SET default_transaction_read_only = on;\nALTER ROLE sql_assistant SET statement_timeout = '5s';\nALTER ROLE sql_assistant SET transaction_timeout = '10s';\n\n-- Row-level security on the base table: each session sees only its tenant\n-- (views need security_invoker = true so the policy applies to the caller)\nALTER TABLE orders ENABLE ROW LEVEL SECURITY;\nCREATE POLICY tenant_only ON orders FOR SELECT TO sql_assistant\n  USING (tenant_id = current_setting('app.tenant_id')::int);\nALTER VIEW reporting.v_orders SET (security_invoker = true);\n",{"type":233,"head":234,"rows":239},"table",[235,237],[236],"Kontroll",[238],"Mit akadályoz meg",[240,245,252,263,268],[241,243],[242],"SELECT csak a válogatott nézetekre",[244],"Fizetések, jelszó-hashek, más sémák olvasása",[246,250],[247],{"tag":159,"children":248},[249],"default_transaction_read_only",[251],"Írás, még túl tág jogosultság esetén is",[253,261],[254,257,258],{"tag":159,"children":255},[256],"statement_timeout",", ",{"tag":159,"children":259},[260],"transaction_timeout",[262],"Descartes-szorzatos joinok és elszabadult táblabejárások",[264,266],[265],"Sorszintű biztonság",[267],"Hogy egy ügyfél vagy bérlő a másik sorait lássa",[269,271],[270],"Olvasási replika",[272],"Hogy az elemzési terhelés lassítsa a webshopot vagy az ERP-t",{"type":118,"content":274},[129,275,278],{"tag":131,"href":43,"children":276},[277],"PostgreSQL sorszintű biztonsági dokumentációjának"," két részlete könnyen elsikkad: a tábla tulajdonosára a sorszintű szabályok általában nem vonatkoznak, ezért az asszisztens soha ne csatlakozzon tulajdonosként, és ha az RLS be van kapcsolva, de nincs szabály, az alapértelmezés a tiltás.",{"type":125,"level":126,"id":100,"text":101},{"type":118,"content":281},[282,283,286],"Az SQL-t valódi parserrel elemezd, ne reguláris kifejezésekkel. A ",{"tag":131,"href":49,"children":284},[285],"SQLGlot"," több mint 30 dialektust alakít ellenőrizhető szintaxisfává. Az alábbi ellenőrzések mindent elutasítanak, ami nem egyetlen olvasó lekérdezés engedélyezett nézeteken, és sorlimitet adnak hozzá.",{"type":159,"code":288},"# Illustrative validator with sqlglot (second layer; the database role is the guarantee)\nimport sqlglot\nfrom sqlglot import exp\n\nALLOWED = {\"v_orders\", \"v_customers\", \"v_stock\"}\nWRITE_NODES = (exp.Insert, exp.Update, exp.Delete, exp.Merge, exp.Create, exp.Drop, exp.Alter, exp.Command)\nMAX_ROWS = 1000\n\ndef validate(sql: str) -> str:\n    statements = sqlglot.parse(sql, read=\"postgres\")\n    if len(statements) != 1 or statements[0] is None:\n        raise ValueError(\"exactly one statement is allowed\")\n    tree = statements[0]\n    if not isinstance(tree, exp.Query):\n        raise ValueError(\"only SELECT queries are allowed\")\n    if any(tree.find_all(*WRITE_NODES)):\n        raise ValueError(\"data-modifying statements are not allowed\")\n    ctes = {c.alias_or_name for c in tree.find_all(exp.CTE)}\n    tables = {t.name for t in tree.find_all(exp.Table)} - ctes\n    if unknown := tables - ALLOWED:\n        raise ValueError(f\"unknown tables: {sorted(unknown)}; allowed: {sorted(ALLOWED)}\")\n    if not tree.args.get(\"limit\"):\n        tree = tree.limit(MAX_ROWS)\n    return tree.sql(dialect=\"postgres\")\n",{"type":118,"content":290},[291],"A hibaüzenetet add vissza a modellnek, és engedj egy-két javítási kísérletet. Az üzenetek a modellnek szólnak: gyakran elég megnevezni az engedélyezett nézeteket, hogy kijavítsa a lekérdezést.",{"type":125,"level":126,"id":103,"text":84},{"type":118,"content":294},[295,296,300],"Igen. Az eredmények visszakerülnek a modell kontextusába, a szöveges oszlopok – termékleírások, ügyfélmegjegyzések, jegyszövegek – pedig bárki által írt utasításokat tartalmazhatnak, aki szerkeszthette őket. Ha ugyanez az ágens e-mailt is küldhet vagy külső API-t is hívhat, a ",{"tag":225,"to":297,"children":298},"\u002Fblog\u002Fprompt-injection-lethal-trifecta-patterns",[299],"halálos hármas"," mindhárom eleme megvan: privát adat, nem megbízható tartalom és kifelé vezető út. Az SQL-asszisztens eszközei maradjanak a lekérdezésnél és a megjelenítésnél, a szabad szöveges oszlopokat pedig csak akkor foglalja össze, ha a felhasználó kifejezetten kéri.",{"type":302,"variant":303,"title":304,"body":305},"callout","warn","A „csak SELECT-et futtass” a promptban nem korlát",[306],[307],"A promptba írt utasítás kérés, amelyet a modell általában betart. Egy írási jog nélküli szerepkör és egy csak olvasható tranzakció garancia. Minden korlátot, amelyre támaszkodsz, az adatbázisba vagy a kódba tegyél.",{"type":125,"level":126,"id":105,"text":106},{"type":118,"content":310},[311],"A legveszélyesebb hiba egy lekérdezés, amely hibátlanul lefut, de egy kicsit más kérdésre válaszol: nettó bruttó helyett, rendelési dátum számla dátuma helyett, a lemondott rendelésekkel együtt. Az eredménytáblázat mellett mutasd meg az SQL-t vagy a szűrőinek közérthető összefoglalását, és adj a felhasználónak egykattintásos lehetőséget a hibás válasz jelzésére. Ezek a jelzések táplálják a szószedetet és az ellenőrzött példákat.",{"type":125,"level":126,"id":108,"text":109},{"type":118,"content":314},[315,316,320],"Használd a végrehajtási pontosságot, a BIRD metrikáját: futtasd le a generált és a referencia-lekérdezést, és az eredményhalmazokat hasonlítsd össze, ne az SQL szövegét. Építs 50–100 kérdést valódi kérésekből, mindegyikhez referencia-lekérdezéssel, és futtasd őket a CI-ban, valahányszor változik a modell, a prompt vagy a sémakontextus, ahogy az ",{"tag":225,"to":317,"children":318},"\u002Fblog\u002Fllm-evals-for-product-features",[319],"LLM-értékelés termékfunkciókhoz"," cikkben. Tarts meg egy szeletet olyan kérdésekből, amelyeket el kell utasítani, például olyan adatra vonatkozókat, amelyet a szerepkör nem lát, és ellenőrizd, hogy a rendszer ezt mondja-e, ahelyett hogy találgatna.",{"type":125,"level":126,"id":111,"text":112},{"type":118,"content":323},[324],"Ha a kérdések többsége néhány definiált mutatóra vonatkozik – bevétel, árrés, nyitott rendelések –, akkor egy szemantikai réteg vagy paraméterezett lekérdező eszközök készlete pontosabb, mint a szabad SQL: a modell választja ki a mutatót, a dimenziókat és a szűrőket, a lekérdezést pedig kód építi fel. A szabad SQL a kockázatát a kritikusan olvasni tudó elemzők felfedező kérdéseinél éri meg, nem olyan számoknál, amelyek ellenőrzés nélkül kerülnek egy vezetői jelentésbe.",{"type":125,"level":126,"id":114,"text":115},{"type":172,"ordered":173,"items":327},[328,331,334,337,340,343],[329],{"tag":131,"href":37,"children":330},[36],[332],{"tag":131,"href":40,"children":333},[39],[335],{"tag":131,"href":43,"children":336},[42],[338],{"tag":131,"href":46,"children":339},[45],[341],{"tag":131,"href":49,"children":342},[48],[344],{"tag":131,"href":52,"children":345},[51],[347,405,462,506],{"slug":348,"published":5,"minutes":349,"category":7,"tags":350,"keywords":356,"about":367,"sources":377,"cover":399,"og":400,"expertise":55,"locales":401,"lang":59,"title":402,"description":403,"coverAlt":404},"pdf-document-parsing-for-rag",9,[351,352,353,354,355],"RAG","PDF parsing","OCR","Docling","Document AI",[357,358,359,360,361,362,363,364,365,366],"pdf parsing for rag","best pdf parser for rag","docling vs marker","marker vs mineru","pdf to markdown for llm","extract tables from pdf for rag","ocr for rag pipeline","olmocr bench","scanned pdf rag","document parsing llm",[368,371,374],{"name":369,"url":370},"PDF","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPDF",{"name":372,"url":373},"Optical character recognition","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOptical_character_recognition",{"name":375,"url":376},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",[378,381,384,387,390,393,396],{"title":379,"url":380},"Docling: README, features and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fdocling-project\u002Fdocling",{"title":382,"url":383},"Auer et al.: Docling: An Efficient Open-Source Toolkit for AI-driven Document Conversion (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.17887",{"title":385,"url":386},"Datalab: Marker README, olmOCR-bench results and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fdatalab-to\u002Fmarker",{"title":388,"url":389},"OpenDataLab: MinerU README and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fopendatalab\u002FMinerU",{"title":391,"url":392},"Poznanski et al.: olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.18443",{"title":394,"url":395},"Claude Platform Docs: PDF support","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fpdf-support",{"title":397,"url":398},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval","\u002Fimages\u002Fblog\u002Fpdf-document-parsing-for-rag\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpdf-document-parsing-for-rag\u002Fog.jpg",[57,58,59],"PDF-feldolgozás RAG-hoz: layout-pipeline-ok, OCR és vizuális modellek összevetve","Miért a PDF-feldolgozáson múlik a RAG minősége, miben más a Docling, a Marker, a MinerU és a VLM-OCR, és hogyan teszteld a parsert saját dokumentumokon.","Egy PDF-oldal layout-felismerésen, OCR-en és táblázat-helyreállításon át tiszta Markdown-darabokká alakul egy keresőindex számára.",{"slug":406,"published":5,"minutes":407,"category":7,"tags":408,"keywords":413,"about":424,"sources":434,"cover":456,"og":457,"expertise":55,"locales":458,"lang":59,"title":459,"description":460,"coverAlt":461},"multilingual-rag-german-hungarian",7,[351,409,410,411,412],"Multilingual","Embeddings","German","Hungarian",[414,415,416,417,418,419,420,421,422,423],"multilingual rag","german rag embeddings","hungarian nlp search","cross-lingual retrieval","multilingual embedding model","bge-m3 german","german compound words search","hungarian stemming postgres","multilingual-e5-large-instruct","qwen3 embedding multilingual",[425,428,431],{"name":426,"url":427},"Cross-language information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-language_information_retrieval",{"name":429,"url":430},"Agglutinative language","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgglutinative_language",{"name":432,"url":433},"Compound (linguistics)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCompound_(linguistics)",[435,438,441,444,447,450,453],{"title":436,"url":437},"Enevoldsen et al.: MMTEB: Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":439,"url":440},"Chen et al.: M3-Embedding (BGE-M3): Multi-Linguality, Multi-Functionality, Multi-Granularity (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.03216",{"title":442,"url":443},"Zhang et al.: Qwen3 Embedding: Advancing Text Embedding and Reranking Through Foundation Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.05176",{"title":445,"url":446},"Hugging Face: intfloat\u002Fmultilingual-e5-large-instruct model card","https:\u002F\u002Fhuggingface.co\u002Fintfloat\u002Fmultilingual-e5-large-instruct",{"title":448,"url":449},"Elasticsearch Reference: Hyphenation decompounder token filter","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Freference\u002Ftext-analysis\u002Fanalysis-hyp-decomp-tokenfilter",{"title":451,"url":452},"PostgreSQL 18 Documentation: Text search dictionaries","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Ftextsearch-dictionaries.html",{"title":454,"url":455},"Snowball: stemming algorithms by language","https:\u002F\u002Fsnowballstem.org\u002Falgorithms\u002F","\u002Fimages\u002Fblog\u002Fmultilingual-rag-german-hungarian\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmultilingual-rag-german-hungarian\u002Fog.jpg",[57,58,59],"Többnyelvű RAG német és magyar tartalomra: embeddingek, összetett szavak és nyelvek közötti keresés","RAG német és magyar tartalom fölött: többnyelvű embeddingek, összetett szavak, szótövezés, ékezetek és nyelvenkénti értékelés.","Egy német és egy magyar kérdés egy közös többnyelvű vektortérben találkozik a nyelvenkénti kulcsszóindexek mellett, majd reranker és válasz következik.",{"slug":463,"published":5,"minutes":464,"category":7,"tags":465,"keywords":469,"about":480,"sources":490,"cover":500,"og":501,"expertise":55,"locales":502,"lang":59,"title":503,"description":504,"coverAlt":505},"embedding-quantization-binary-matryoshka",5,[410,466,467,468,351],"Vector search","Quantization","pgvector",[470,471,472,473,474,475,476,477,478,479],"embedding quantization","binary quantization embeddings","int8 embeddings","matryoshka embeddings","reduce vector database memory","pgvector halfvec","pgvector binary_quantize","embedding dimensions reduction","rescoring binary embeddings","vector index memory cost",[481,484,487],{"name":482,"url":483},"Quantization (signal processing)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FQuantization_(signal_processing)",{"name":485,"url":486},"Nearest neighbor search","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNearest_neighbor_search",{"name":488,"url":489},"Hamming distance","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHamming_distance",[491,494,497],{"title":492,"url":493},"Hugging Face: Binary and Scalar Embedding Quantization for Significantly Faster and Cheaper Retrieval (Mar 2024)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Fembedding-quantization",{"title":495,"url":496},"Kusupati et al.: Matryoshka Representation Learning (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2205.13147",{"title":498,"url":499},"pgvector README: halfvec, bit, binary quantization and subvector indexing","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector","\u002Fimages\u002Fblog\u002Fembedding-quantization-binary-matryoshka\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-quantization-binary-matryoshka\u002Fog.jpg",[57,58,59],"Embedding-kvantálás: bináris, int8 és Matryoshka vektorok a visszakeresés minőségének elvesztése nélkül","Hogyan zsugorítja 4–32-szeresére a vektorindexet a bináris és int8 kvantálás és a Matryoshka-vágás, mennyibe kerül ez, és hogyan hozza vissza a rescoring.","Egy float32 embedding félpontosságúvá, int8-cá és bináris bitekké zsugorodik, egy rescoring lépés pedig visszaállítja a rangsorolás minőségét.",{"slug":507,"published":508,"minutes":509,"category":7,"tags":510,"keywords":514,"about":524,"sources":532,"cover":569,"og":570,"expertise":55,"locales":571,"lang":59,"title":572,"description":573,"coverAlt":574},"graphrag-knowledge-graph-rag","2026-10-02",13,[511,512,513,351],"GraphRAG","Knowledge graphs","LightRAG",[511,515,516,517,518,519,520,521,522,523],"knowledge graph RAG","GraphRAG vs vector RAG","Microsoft GraphRAG explained","LightRAG vs GraphRAG","GraphRAG global vs local search","GraphRAG indexing cost","when to use GraphRAG","multi-hop RAG","LazyGraphRAG",[525,528,529],{"name":526,"url":527},"Knowledge graph","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnowledge_graph",{"name":375,"url":376},{"name":530,"url":531},"Leiden algorithm","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLeiden_algorithm",[533,536,539,542,545,548,551,554,557,560,563,566],{"title":534,"url":535},"Edge et al.: From Local to Global: A Graph RAG Approach to Query-Focused Summarization (arXiv:2404.16130)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2404.16130",{"title":537,"url":538},"Microsoft GraphRAG documentation: overview","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002F",{"title":540,"url":541},"Microsoft GraphRAG documentation: default dataflow","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Findex\u002Fdefault_dataflow\u002F",{"title":543,"url":544},"Microsoft GraphRAG documentation: global search","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fquery\u002Fglobal_search\u002F",{"title":546,"url":547},"Microsoft GraphRAG documentation: local search","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fquery\u002Flocal_search\u002F",{"title":549,"url":550},"Microsoft GraphRAG documentation: DRIFT search","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fquery\u002Fdrift_search\u002F",{"title":552,"url":553},"Microsoft GraphRAG documentation: getting started","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fget_started\u002F",{"title":555,"url":556},"Microsoft Research: LazyGraphRAG, setting a new standard for quality and cost (25 November 2024)","https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fblog\u002Flazygraphrag-setting-a-new-standard-for-quality-and-cost\u002F",{"title":558,"url":559},"Guo et al.: LightRAG: Simple and Fast Retrieval-Augmented Generation (arXiv:2410.05779)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.05779",{"title":561,"url":562},"HKUDS\u002FLightRAG on GitHub","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FLightRAG",{"title":564,"url":565},"Gutiérrez et al.: HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models (arXiv:2405.14831)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2405.14831",{"title":567,"url":568},"Xiang et al.: When to use Graphs in RAG: A Comprehensive Analysis for Graph Retrieval-Augmented Generation (arXiv:2506.05690)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.05690","\u002Fimages\u002Fblog\u002Fgraphrag-knowledge-graph-rag\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fgraphrag-knowledge-graph-rag\u002Fog.jpg",[57,58,59],"GraphRAG és knowledge-graph RAG: mikor veri a gráf a vektoros keresést","Mit csinál valójában a Microsoft GraphRAG és a LightRAG, mennyibe kerül az indexelés, és mikor jobb a tudásgráf a vektoros RAG-nál: multi-hop, globális kérdések, termékkatalógus.","Diagram: egy tudásgráf középen, entitásokhoz, közösségekhez, lokális és globális kereséshez és termékalkatrészekhez kapcsolva.",1792177150743]