een betrouwbaar, kostenefficiënt RAG-systeem met lage latentie op een SQL-tabel dat grote documenten in lange-tekstvelden opslaat – zonder het bestaande schema te wijzigen?
Dit is geen theoretisch probleem.
In de meeste ondernemingen bevindt cruciale bedrijfskennis zich al in traditionele relationele databases. Voorstellen, rapporten, contracten, artikelen – allemaal opgeslagen in TEXT of LONGTEXT kolommen – ontworpen voor het matchen en aggregeren van trefwoorden, niet voor semantisch ophalen.
Met de komst van LLM’s zijn de zakelijke eisen geëvolueerd naar gestructureerde berekeningen, diepgaand semantisch begrip en contextuele inzichten op een natuurlijke, gemoedelijke manier.
Bijvoorbeeld:
- Hoeveel projecten van meer dan $ 1 miljoen zijn tussen 2023 en 2025 goedgekeurd?
- Geef een samenvatting van de belangrijkste technologische trends van de afgelopen zes maanden
- Wat waren de onderscheidende factoren bij het winnen van voorstellen in 2025?
Ze vereisen een ophaalstrategie die kan beslissen wanneer er moet worden berekend, wanneer semantisch moet worden gezocht en wanneer beide moeten worden gecombineerd. In dit artikel demonstreer ik een Agentic RAG-architectuur die rechtstreeks op een traditionele SQL-database werkt (zonder schemawijzigingen) en bespreek ik de ontwerpprincipes die nodig zijn om deze betrouwbaar te maken in productie.
Systeemconfiguratie
Voor deze illustratie heb ik een subset van de Social Animal 10K Articles with NLP-dataset gebruikt, die een groot aantal nieuwsartikelen en blogposts bevat, samen met metadata. De gemaakte SQL-database heeft de volgende kolommen: url, titel, auteurs, gepubliceerde_datum, artikelcategorie, woordaantal en de volledige_inhoud.
De titel kan worden beschouwd als een unieke identificatie (primaire sleutel) voor de inhoud. De artikelcategorieën zijn technologie, zaken, sport, reizen, gezondheid, entertainment, politiek en mode. De artikelen zijn ongeveer gelijkmatig verdeeld over de categorieën. De gebruikte LLM is Gemini-2,5-flash en FAISS om de vectorinbedding te indexeren en op te slaan. Het ontwerp is toepasbaar voor elke keuze uit een LLM- of vectordatabase.
Architectuur
Naast het insluiten van de onbewerkte tekst, hebben we de metagegevens van de vectoropslag gespiegeld met dezelfde velden als aanwezig in SQL (behalve de volledige inhoud). Dit maakt het mogelijk Filterenzoals we zullen zien in de resultaten. Voor lange documenten kan een strategie voor chunking en insluiting met een schuifvenster worden toegepast, waarbij de metagegevens aan elke insluiting worden gekoppeld.
Het metadatacodefragment is bijgevoegd
for idx, row in df_sql.iterrows():
content = str(row('full_content')).strip()
if not content:
continue
metadata = {
"source": row.get('url', ''),
"title": row.get('title', ''),
"authors": str(row.get('authors', '')),
"article_category": str(row.get('article_category', 'unknown')),
"published_date": str(row.get('published_date', '')),
"word_count": int(row.get('content_word_count', 0))
}
doc = Document(page_content=content, metadata=metadata)
documents.append(doc)
We hebben twee gespecialiseerde, intelligente tools gebouwd die de ReAct-agent kan aanroepen met behulp van de volgende architectuur. De ReAct-agent (router) orkestreert de gehele querypijplijn door op intelligente wijze te beslissen welke tool moet worden aangeroepen op basis van de aard van de query. Het gebruikt de metagegevens en de querycontext om te bepalen of de SQL-tool, de vectortool of een hybride aanpak het meest geschikt is. De volgende afbeelding toont de beslissingsstroom voor query’s:
De hulpmiddelen zijn als volgt:
- zoek_database (SQL-tool): Behandelt vragen die berekening, aggregatie of complexe logica vereisen. Het voert SQL-query’s uit
- search_articles (vectortool): Behandelt vragen over inhoud, onderwerp of specifieke entiteiten. Accepteert een zoekopdracht in natuurlijke taal en optioneel metadatafilters om een globale semantische zoekopdracht uit te voeren (bijv.: “artikelen over kinderen“) of zoek een subset van de gegevens
(bijvoorbeeld: “filter_authors=’XYZ’, “query”=”artikelen”).
Zoals u in de bovenstaande afbeelding kunt zien, kan een zoekopdracht de volgende routes volgen:
- Voor berekeningen (bijv. hoeveel artikelen..), ongelijkheden/bereik (bijv.: Artikelen gepubliceerd tussen januari en april 2023) of aggregaties (bijv.; Wat is het gemiddelde aantal woorden..), gebruik alleen de SQL-tool.
- Semantisch zoekenmet of zonder filters, gebruikt u het vectorgereedschap zoals hierboven uitgelegd.
- Hybride zoekopdracht: Hybride zoekopdrachten zijn essentieel wanneer u zowel gestructureerde gegevens (bijvoorbeeld filteren op datum) als ongestructureerde inhoud (bijvoorbeeld semantisch zoeken op artikelen) nodig heeft. De query heeft een metadatafiltercriterium (meestal categorie of een datumbereik), waarvoor de SQL-tool wordt gebruikt om artikelen op te halen. Vervolgens wordt de lijst met titels doorgegeven aan de Vector-tool om alleen op die artikelen een semantische zoekopdracht uit te voeren. Een voorbeeld zou zijn “tussen maart en mei 2023 is er een artikel over moederdag in de mode“
Resultaten
Hier volgen de resultaten van enkele zoekopdrachten van elk type. Het zou interessant zijn om het gevolgde gereedschapstraject in elk geval te noteren.
1. “wat zijn de artikelen per jaar en categorie?” — Dit is een complexe berekeningsquery, dus alleen de SQL-tool zal worden gebruikt.
Het resultaat is hier
QUERY: what are the articles by year and category ?
TOOL SELECTION:
- search_database: {'query': "SELECT strftime('%Y', published_date) AS year, article_category, COUNT(*) FROM articles GROUP BY year, article_category"}
DOCUMENTS SELECTED:
- Tool Output: (('1970', 'business', 1), ('2001', 'politics', 1), ('2013', 'politics', 1), ('2018', 'entertainment', 1), ('2020', 'entertainment', 1), ('2020', 'sports', 1), ('2022', 'fashion', 1), ('2023', 'business', 19), ('2023', 'entertainment', 16), ('2023', 'fashion', 16), ('2023', 'health', 18), ('2023', 'politics', 16), ('2023', 'sports', 16), ('2023', 'technology', 18), ('2023', 'travel', 18))
RESULT:
Here are the number of articles by year and category:
* 1970: business (1)
* 2001: politics (1)
* 2013: politics (1)
* 2018: entertainment (1)
* 2020: entertainment (1), sports (1)
* 2022: fashion (1)
* 2023: business (19), entertainment (16), fashion (16), health (18), politics (16), sports (16), technology (18), travel (18)
2. “welke artikelen over kinderen heb je?” — Dit komt niet overeen met een van de metagegevenscategorieën waaruit het schema bestaat, dus besluit de agent de Vector-tool te gebruiken met een globale semantische zoekopdracht.
Het resultaat is hier
QUERY: what articles about children do you have
TOOL SELECTION:
- search_articles: {'query': 'children'}
DOCUMENTS SELECTED:
- Tool Output: --- Document 1 ---
Source: https://www.filmcompanion.in/features/indepth-stories/streaming/best-childrens-movies-on-amazon-prime-video-netflix-hotstar-klaus-kung-fu-panda-jagga-jasoos-childrens-day-2020
Title: 10 Films That Children Should Watch
Category: entertainment
Date: 2020-11-14 02:30:36
Content: On this children's day, here's a list of stories designed to help young ones understand the world around them, gain life lessons and be dazzled by colourful imagination. It's a great time to be a...
- https://www.filmcompanion.in/features/indepth-stories/streaming/best-childrens-movies-on-amazon-prime-video-netflix-hotstar-klaus-kung-fu-panda-jagga-jasoos-childrens-day-2020
- https://africabusiness.com/2023/04/07/save-the-children-and-thinkmd-expand-partnership-to-improve-the-lives-of-children-globally/
- https://www.tcpalm.com/story/news/education/st-lucie-county-schools/2023/04/11/books-stay-in-st-lucie-county-schools-but-most-move-to-high-school/70098338007/
RESULT:
Here are some articles about children:
1. 10 Films That Children Should Watch (entertainment)
2. Save the Children and THINKMD Expand Partnership to Improve the Lives of Children Globally (health)
3. St. Lucie County School Board decides to keep challenged books in school libraries (health)
3. “wat zijn de trends in de mode?” — De agent vindt de categorie = mode en voert de semantische match uit met behulp van de Vector-tool met deze filtercriteria.
Het resultaat is hier
QUERY: what are the trends in fashion
TOOL SELECTION:
- search_articles: {'query': 'trends', 'filter_category': 'fashion'}
DOCUMENTS SELECTED:
- Tool Output: --- Document 1 ---
Source: https://www.sightunseen.com/2023/04/the-best-thing-we-saw-in-milan-today-india-mahdavi-for-gebruder-thonet-vienna/
Title: The Best Thing We Saw in Milan Today: India Mahdavi for Gebrüder Thonet Vienna - Sight Unseen
Category: fashion
Date: 2023-04-18 12:00:00
Content: How to Live With Objects
The Best Thing We Saw in Milan Today: India Mahdavi for Gebrüder Thonet Vienna
Sight Unseen is on the ground at the Milan Furniture Fair right now and we’ll be bringing you load...
- https://www.sightunseen.com/2023/04/the-best-thing-we-saw-in-milan-today-india-mahdavi-for-gebruder-thonet-vienna/
- https://themoderndaygirlfriend.com/clean-make-up-skincare-brand-in-2023/
- https://poprazzi.com/the-80s-inspired-jewelry-trend-im-absolutely-fawning-over/
RESULT:
The search results mention the following trends in fashion: India Mahdavi for Gebrüder Thonet Vienna, clean make up & skincare, and 80's-inspired jewelry.
4. “vertel me technologieartikelen over crypto in 2023“- Dit is een hybride query waarbij de SQL-tool zal worden gebruikt om in 2023 de titels voor categorie = technologie te verkrijgen, waarna de Vector-tool zal worden aangeroepen met de query = crypto en de titellijst. Het resultaat zal binnen die subset worden gevonden.
Het resultaat is hier
QUERY: tell me technology articles about crypto in 2023
TOOL SELECTION:
- search_database: {'query': "SELECT title FROM articles WHERE article_category = 'technology' AND published_date LIKE '2023%'"}
- search_articles: {'filter_titles': ('NPR quits Twitter, says Musk-led platform is “undermining our credibility”', 'Crypto.com arena considers rebrand after FTX fallout reignites investor anger', "World's Biggest EV Battery Maker Unveils S", 'What Checks Should You Perform Before Buying a Used Car? - Free Car Mag', 'Preeclampsia Diagnostics Market 2023-2030 Overall Analysis Report | Fortune Business Insights', 'Spanish startup on ‘mission to save planet’s beer’ from climate crisis', 'Best third-party apps for Reddit (2023)', "How Ford's 'driverless' BlueCruise system works", "Save $100 on Apple's M1-Powered iPad Air", 'Media release: Music cassette sales highest in nearly two decades - allmediascotland…media jobs, media release service and media resources for all', 'Software Engineer, Service Platform at Stripe | echojobs.io', 'Driving data to deliver net zero with life cycle assessments', 'The Future of Work: Trends and Predictions for the Next Decade', 'Risks of Outsourcing Software Development to Uruguay', 'Kochie Arrest News Addressed, Affected By Scam', 'Paying attention to employee retention | IRIS', 'Could this foam-filled £7,250 track bike rival the Team GB Hope HB.T?', 'Aave, Chainlink, and Binance are concentrating on enhancing the Shapella, while Big Eyes Coin is aiming for a significant final push'), 'query': 'crypto'}
DOCUMENTS SELECTED:
- Tool Output: (('NPR quits Twitter, says Musk-led platform is “undermining our credibility”',), ('Crypto.com arena considers rebrand after FTX fallout reignites investor anger',), ("World's Biggest EV Battery Maker Unveils S",), ('What Checks Should You Perform Before Buying a Used Car? - Free Car Mag',), ('Preeclampsia Diagnostics Market 2023-2030 Overall Analysis Report | Fortune Business Insights',), ('Spanish startup on ‘mission to save planet’s beer’ from climate crisis',), ('Best third-party apps for Re...
- Tool Output: --- Document 1 ---
Source: https://www.analyticsinsight.net/crypto-com-arena-considers-rebrand-after-ftx-fallout-reignites-investor-anger/
Title: Crypto.com arena considers rebrand after FTX fallout reignites investor anger
Category: technology
Date: 2023-04-19 01:15:52
Content: The Crypto.com Arena, formerly known as the Staples Center, is reportedly considering a rebrand after the recent controversy surrounding FTX, a cryptocurrency exchange. The FTX fallout reignited anger among investors, wh...
- https://www.analyticsinsight.net/crypto-com-arena-considers-rebrand-after-ftx-fallout-reignites-investor-anger/
- https://theprint.in/ani-press-releases/aave-chainlink-and-binance-are-concentrating-on-enhancing-the-shapella-while-big-eyes-coin-is-aiming-for-a-significant-final-push/1527613/
- https://echojobs.io/job/stripe-software-engineer-service-platform-wndr6
RESULT:
Here are some technology articles from 2023 that mention crypto:
1. **Crypto.com arena considers rebrand after FTX fallout reignites investor anger**: This article discusses the possibility of the Crypto.com Arena rebranding due to the controversy surrounding the FTX cryptocurrency exchange.
2. **Aave, Chainlink, and Binance are concentrating on enhancing the Shapella, while Big Eyes Coin is aiming for a significant final push**: This article mentions the Shapella upgrade and its implications for cryptocurrencies on the Ethereum network, including Binance, Aave, and Chainlink.
3. **Software Engineer, Service Platform at Stripe | echojobs.io**: This article mentions Stripe, a financial infrastructure platform that allows businesses to accept payments.
Belangrijke overwegingen
Zoals bij elke architectuur zijn er ontwerpprincipes waarmee rekening moet worden gehouden voor een robuuste toepassing. Hier zijn er een paar:
- Tool docstrings versus systeemprompt: dit zijn twee soorten instructies die het gedrag van agenten op verschillende manieren sturen. Het is belangrijk om ze te gebruiken voor de beoogde doeleinden, zonder enige overlap of conflict, voor betrouwbare agentprestaties. Tooldocstring, gelegen in het
@tooldecorateur, beschrijft wat het hulpmiddel doet En hoe je het moet gebruiken. Naast de gereedschapsnaam worden hier de parameters, typen en beschrijvingen gedefinieerd.
Hier is het voorbeeld van de search_articles-tool docstring.
@tool
def search_articles(query: str, filter_category: Optional(str) = None, ...):
"""Useful for finding information about specific topics, summaries, or details within articles.
You can filter by metadata for precision:
- `filter_category`: 'health', 'tech', etc.
- `filter_titles`: List of exact titles to retrieve (BATCH MODE).
- `filter_date`: Published date (YYYY-MM-DD) for EXACT or PARTIAL match only.
...
"""
- Aan de andere kant begeleidt de systeemprompt op intelligente wijze de routeringsstrategie voor de agent, waardoor deze kan beslissen wanneer hij de SQL-tool, Vector-tool of een combinatie ervan gebruikt. Het is ook het meest complexe en kwetsbare onderdeel van de applicatie. Het definieert hoe tools worden gecombineerd in hybride workflows, geeft voorbeelden van correct toolgebruik en specificeert verplichte regels en beperkingen. Om de systeemprompt adequaat te ontwerpen, is het van cruciaal belang om te beginnen met een testcaserepository van verwachte gebruikersquery’s, voorbeelden te geven in de systeemprompt en deze te blijven verrijken voor afwijkingen die tijdens bewerkingen naar voren komen voor randgevallen.
Hier is een voorbeeld van de systeemprompt
system_prompt = (
"1. **LISTING/BROWSING QUERIES** (e.g., 'what articles are in politics'):n"
" - **ALWAYS use (search_database) to list titlesn"
" - DO NOT use (search_articles) without a semantic queryn"
...
"### MANDATORY RULESn"
"1. **DATE RANGES & INEQUALITIES**: Use SQL first, then pass titles to vector tooln"
...
)
- Vectordatabases voor en na filteren: Dit is een subtiel punt dat voor specifieke zoekopdrachten onbedoelde en moeilijk te verklaren resultaten kan opleveren. Beschouw de volgende twee zoekopdrachten waarbij het enige verschil de verkeerd gespelde naam is: “vat artikelen samen over Doo ley in de politiek op 17 april 2023” En “vat artikelen samen over Dooley in de politiek op 17 april 2023“. Beide zoekopdrachten volgen identieke paden, waarbij de SQL-tool met succes de titels voor deze categorie en datum selecteert (er is slechts 1 artikel waarin Judge Dooley wordt vermeld), waarna de Vector-tool op deze titellijst wordt aangeroepen met de zoekopdracht. Vreemd genoeg retourneert de Vector-tool voor de eerste zoekopdracht
"Tool Output: No documents found matching the criteria."voor deze kleine spelfout, zelfs als de lijst slechts één artikel heeft waaruit u kunt kiezen, terwijl deze voor de tweede zoekopdracht het juiste artikel retourneert.
Hier is het resultaat van de eerste zoekopdracht
QUERY: QUERY: summarize articles about Doo ley in politics on 17th apr 2023
TOOL SELECTION:
- search_database: {'query': "SELECT title FROM articles WHERE published_date LIKE '2023-04-17%' AND article_category = 'politics'"}
- search_articles: {'query': 'Doo ley', 'filter_category': 'politics', 'filter_titles': ('Judge Dooley Ends Hartford Police Consent Decree Despite Concerns')}
DOCUMENTS SELECTED:
- Tool Output: (('Judge Dooley Ends Hartford Police Consent Decree Despite Concerns',))
- Tool Output: No documents found matching the criteria.
En de tweede vraag
QUERY: summarize articles about Dooley in politics on 17th apr 2023
TOOL SELECTION:
- search_database: {'query': "SELECT title FROM articles WHERE published_date LIKE '2023-04-17%' AND article_category = 'politics'"}
- search_articles: {'query': 'Dooley', 'filter_category': 'politics', 'filter_titles': ('Judge Dooley Ends Hartford Police Consent Decree Despite Concerns')}
DOCUMENTS SELECTED:
- Tool Output: (('Judge Dooley Ends Hartford Police Consent Decree Despite Concerns',))
- Tool Output: --- Document 1 ---
Source: https://www.nbcconnecticut.com/news/local/judge-ends-hartford-police-consent-decree-despite-concerns/3015203/
Title: Judge Dooley Ends Hartford Police Consent Decree Despite Concerns
Category: politics
Date: 2023-04-17 05:36:24
Content: Judge Dooley has ended the nearly 50 years of federal oversight of police in Hartford, despite continued concerns the department still has not hired enough minority officers to reflect the city's large Black and Hispanic populations.
En de reden is niet alleen een zwakkere inbedding als gevolg van onjuiste spelling. Het is omdat FAISS (en Chroma enz.) presteren nafilteren — voer eerst een globale zoekopdracht uit voor de zoekopdracht en filter vervolgens de resultaten op de metadata (= de titellijst). In dit geval komt het juiste artikel niet voor in de top_k = 3 artikelen na semantisch zoeken. A voorfilteren de database daarentegen zou de semantische zoekopdracht alleen hebben uitgevoerd op de artikelen in de titellijst en het juiste artikel hebben gevonden, zelfs met de onjuiste spelling.
- Kunnen alle metadatafilters uit de Vector Tool worden verwijderd?: Ja, het is mogelijk, maar het is a duurdere optieomdat eenvoudige semantische zoekopdrachten met een metadatafilter (zoals categorie of auteur) een hybride zoekopdracht zullen worden, waarvoor twee toolaanroepen nodig zijn, wat bijdraagt aan het tokengebruik en de latentie. Een pragmatische middenweg zou zijn om datums (en mogelijk andere numerieke metadata zoals het aantal woorden in dit geval) alleen in de SQL te bewaren, en alle tekst en categorische metadata in de vectordatabase te spiegelen.
Conclusie
Het bouwen van RAG bovenop SQL gaat niet over het toevoegen van inbedding. Het gaat om het ontwerpen van de juiste terughaalstrategie.
Wanneer gestructureerde metagegevens en lange inhoud in dezelfde tabel voorkomen, is de echte uitdaging de orkestratie: beslissen wanneer er met SQL moet worden berekend, wanneer semantisch moet worden gezocht en wanneer beide moeten worden gecombineerd. Subtiele details zoals het filteren van metagegevens en het routeren van tools kunnen het verschil maken tussen een betrouwbaar systeem en een systeem dat stilletjes faalt.
Met een goed ontworpen Agentic RAG-laag kunnen oudere SQL-databases semantische applicaties aandrijven zonder schemawijzigingen, dure migraties of prestatie-inbreuken.
Neem contact met mij op en deel uw opmerkingen op www.linkedin.com/in/partha-sarkar-lets-talk-AI
Referentie
Social Animal 10K artikelen met NLP — Dataset door Alex P (eigenaar) (CC BY-SA 4.0)
Afbeeldingen die in dit artikel worden gebruikt, zijn gegenereerd met Google Gemini. Dataset gebruikt onder CC-BY-SA 4.0-licentie. Figuren en onderliggende code door mij gemaakt.



