
Création d’un RAG agentique rentable sur des documents de texte long dans des tables SQL
un système RAG fiable, à faible latence et rentable sur une table SQL qui stocke des documents volumineux dans des champs de texte long — sans modifier le schéma existant ?
Ce n’est pas un problème théorique.
Dans la plupart des entreprises, les connaissances métiers critiques résident déjà dans les bases de données relationnelles traditionnelles. Propositions, rapports, contrats, articles — tous stockés dans TEXT ou LONGTEXT colonnes – conçues pour la correspondance et les agrégations de mots clés, et non pour la récupération sémantique.
Avec l’avènement des LLM, les exigences des entreprises ont évolué vers un calcul structuré, une compréhension sémantique approfondie et des informations contextuelles de manière naturelle et conversationnelle.
Par exemple:
- Combien de projets de plus d’un million de dollars ont été approuvés de 2023 à 2025 ?
- Résumer les grandes tendances observées en technologie au cours des 6 derniers mois
- Quels ont été les différenciateurs des propositions gagnantes en 2025 ?
Ils nécessitent une stratégie de récupération capable de décider quand calculer, quand effectuer une recherche sémantique et quand combiner les deux. Dans cet article, je vais démontrer une architecture Agentic RAG qui fonctionne directement sur une base de données SQL traditionnelle – sans modification de schéma – et discuter des principes de conception requis pour la rendre fiable en production.
Configuration du système
Pour cette illustration, j’ai utilisé un sous-ensemble de Articles 10K sur les animaux sociaux avec la PNL ensemble de données, qui contient un grand nombre d’articles de presse et de billets de blog ainsi que des métadonnées. La base de données SQL créée comporte les colonnes suivantes : URL, titre, auteurs, date_de publication, catégorie_article, nombre_de_mots et contenu_complet.
Le titre peut être considéré comme un identifiant unique (clé primaire) du contenu. Les catégories d’articles sont la technologie, les affaires, les sports, les voyages, la santé, le divertissement, la politique et la mode. Les articles sont répartis à peu près également entre les catégories. Le LLM utilisé est gemini-2.5-flash et FAISS pour indexer et stocker les plongements vectoriels. La conception est applicable à tout choix de base de données LLM ou vectorielle.
Architecture
En plus d’incorporer le texte brut, nous avons mis en miroir les métadonnées du magasin vectoriel avec les mêmes champs présents dans SQL (à l’exception du contenu complet). Cela permet Filtrationcomme nous le verrons dans les résultats. Pour les documents longs, une stratégie de segmentation et d’intégration de fenêtres coulissantes peut être adoptée avec les métadonnées attachées à chaque intégration.
L’extrait de code des métadonnées est joint
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)
Nous avons construit deux outils spécialisés et intelligents que le Agent Réagir peut invoquer en utilisant l’architecture suivante. L’agent ReAct (routeur) orchestre l’ensemble du pipeline de requêtes en décidant intelligemment quel outil appeler en fonction de la nature de la requête. Il utilise les métadonnées et le contexte de la requête pour déterminer si l’outil SQL, l’outil vectoriel ou une approche hybride est le plus approprié. La figure suivante illustre le flux de décision de requête :

Les outils sont les suivants :
- search_database (outil SQL): Gère les questions qui nécessitent un calcul, une agrégation ou une logique complexe. Il exécute des requêtes SQL
- search_articles (outil vectoriel): Gère les questions sur le contenu, le sujet ou les entités spécifiques. Accepte une requête en langage naturel, et éventuellement des filtres de métadonnées pour exécuter une recherche sémantique globale (ex : «articles sur les enfants« ) ou recherchez un sous-ensemble de données
(par exemple : « filter_authors=’XYZ’, « query »= »articles »).
Comme le montre la figure ci-dessus, une requête peut emprunter les chemins suivants :
- Pour calculs (par exemple : combien d’articles..), inégalités/étendue (par exemple : Articles publiés entre janvier et avril 2023) ou des agrégations (par exemple : Quel est le nombre moyen de mots.), utilisez uniquement l’outil SQL.
- Recherche sémantiqueavec ou sans filtres, utilisez l’outil Vecteur comme expliqué ci-dessus.
- Requête hybride: Les requêtes hybrides sont essentielles lorsque vous avez besoin à la fois de données structurées (ex : filtrage par date) et de contenus non structurés (ex : recherche sémantique sur les articles). La requête comporte un critère de filtre de métadonnées (généralement une catégorie ou une plage de dates), pour lequel l’outil SQL est utilisé pour récupérer les articles. Ensuite, la liste des titres est transmise à l’outil Vector pour effectuer une recherche sémantique uniquement sur ces articles. Un exemple serait «entre mars et mai 2023, y a-t-il un article sur la fête des mères dans la mode«
Résultats
Voici les résultats de quelques requêtes de chaque type. Il serait intéressant de noter le parcours outil suivi dans chaque cas.
1. «quels sont les articles par année et catégorie ? » – Il s’agit d’une requête de calcul complexe, donc seul l’outil SQL sera utilisé.
Le résultat est ici
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. «quels articles sur les enfants avez-vous ? » – Cela ne correspond à aucune des catégories de métadonnées qui composent le schéma, l’agent décide donc d’utiliser l’outil Vector avec une recherche sémantique globale.
Le résultat est ici
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. «quelles sont les tendances de la mode ?» — L’agent trouve la catégorie = mode et exécute la correspondance sémantique à l’aide de l’outil Vector avec ce critère de filtre.
Le résultat est ici
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. «dites-moi des articles technologiques sur la crypto en 2023 » – Il s’agit d’une requête hybride où l’outil SQL sera utilisé pour obtenir les titres en 2023 pour la catégorie = technologie, puis l’outil Vector sera invoqué avec la requête = crypto et la liste de titres. Le résultat sera trouvé dans ce sous-ensemble.
Le résultat est ici
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.
Considérations clés
Comme pour toute architecture, certains principes de conception doivent être pris en compte pour une application robuste. En voici quelques-uns :
- Docstrings de l’outil vs invite système: Il s’agit de deux types d’instructions qui guident le comportement de l’agent de différentes manières. Il est important de les utiliser aux fins prévues, sans aucun chevauchement ni conflit, pour garantir des performances fiables de l’agent. Outil docstring, situé à l’intérieur du
@tooldécorateur, décrit que fait l’outil et comment l’utiliser. Outre le nom de l’outil, il définit les paramètres, les types et les descriptions.
Voici l’exemple de l’outil search_articles 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.
...
"""
- D’autre part, l’invite système guide intelligemment la stratégie de routage de l’agent, lui permettant de décider quand utiliser l’outil SQL, l’outil Vector ou une combinaison. C’est aussi le composant le plus complexe et le plus fragile de l’application. Il définit la manière dont les outils sont combinés dans des flux de travail hybrides, fournit des exemples d’utilisation correcte des outils et spécifie les règles et contraintes obligatoires. Pour concevoir correctement l’invite système, il est crucial de commencer par un référentiel de scénarios de test des requêtes utilisateur attendues, de fournir des exemples dans l’invite système et de continuer à l’enrichir pour les écarts qui surviennent pour les cas extrêmes pendant les opérations.
Voici un exemple de l’invite du système
system_prompt = (
"1. **LISTING/BROWSING QUERIES** (e.g., 'what articles are in politics'):\n"
" - **ALWAYS use [search_database] to list titles\n"
" - DO NOT use [search_articles] without a semantic query\n"
...
"### MANDATORY RULES\n"
"1. **DATE RANGES & INEQUALITIES**: Use SQL first, then pass titles to vector tool\n"
...
)
- Bases de données vectorielles pré et post filtrage : Il s’agit d’un point subtil qui peut donner des résultats inattendus et difficiles à expliquer pour des requêtes spécifiques. Considérez les deux requêtes suivantes où la seule différence est le nom mal orthographié : «résumer les articles sur Doo Ley en politique le 17 avril 2023 » et « résumer les articles sur Dooley en politique le 17 avril 2023« . Les deux requêtes suivent des chemins identiques, l’outil SQL sélectionnant avec succès les titres pour cette catégorie et cette date (il n’y a qu’un seul article mentionnant le juge Dooley), puis l’outil Vecteur est appelé sur cette liste de titres avec la requête. Bizarrement, pour la première requête, l’outil Vecteur renvoie
"Tool Output: No documents found matching the criteria."pour cette erreur d’orthographe mineure même lorsque la liste n’a qu’un seul article parmi lequel sélectionner, alors que pour la deuxième requête, elle renvoie le bon article.
Voici le résultat de la première requête
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.
Et la deuxième requête
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.
Et la raison n’est pas seulement une intégration plus faible due à une orthographe incorrecte. C’est parce que FAISS (et Chroma, etc.) effectuer post-filtrage — effectuez d’abord une recherche globale de la requête, puis filtrez les résultats pour les métadonnées (= la liste de titres). Dans ce cas, le bon article ne figure pas dans le top_k = 3 articles après recherche sémantique. UN pré-filtrage la base de données, en revanche, aurait effectué la recherche sémantique uniquement sur les articles de la liste de titres et aurait trouvé le bon article même avec une orthographe incorrecte.
- Tous les filtres de métadonnées peuvent-ils être supprimés de l’outil vectoriel ?: Oui, c’est possible, mais c’est un option plus coûteuseen tant que simples requêtes sémantiques avec un filtre de métadonnées (comme la catégorie ou l’auteur), deviendront une requête hybride, nécessitant deux appels d’outils, ce qui ajoute à l’utilisation et à la latence des jetons. Un compromis pragmatique serait de conserver les dates (et éventuellement d’autres métadonnées numériques telles que le nombre de mots dans ce cas) dans le SQL uniquement et de refléter tous les textes et métadonnées catégorielles dans la base de données vectorielle.
Conclusion
Construire RAG sur SQL ne consiste pas à ajouter des intégrations. Il s’agit de concevoir la bonne stratégie de récupération.
Lorsque les métadonnées structurées et le contenu long résident dans la même table, le véritable défi est l’orchestration : décider quand calculer avec SQL, quand effectuer une recherche sémantique et quand combiner les deux. Des détails subtils tels que le filtrage des métadonnées et le routage des outils peuvent faire la différence entre un système fiable et un système qui échoue silencieusement.
Grâce à une couche Agentic RAG bien conçue, les bases de données SQL existantes peuvent alimenter des applications sémantiques sans modifications de schéma, migrations coûteuses ou compromis en termes de performances.
Connectez-vous avec moi et partagez vos commentaires sur www.linkedin.com/in/partha-sarkar-lets-talk-AI
Référence
Articles 10K sur les animaux sociaux avec la PNL — Ensemble de données par Alex P (propriétaire) (CC BY-SA 4.0)
Les images utilisées dans cet article sont générées à l’aide de Google Gemini. Ensemble de données utilisé sous Licence CC-BY-SA 4.0. Chiffres et code sous-jacent créés par moi.



