Construire un agent SQL avec un LLM : deux approches possibles
Quand on veut connecter un LLM à une base relationnelle, il y a un choix clé : comment donner le contexte du schéma SQL à l’agent.
1️⃣ Tools on Demand
L’agent ne connaît rien au départ. Il appelle des outils uniquement quand il en a besoin :
🔎 Get_Tables_List → récupérer la liste des tables
📋 Get_Table_Definition → connaître les colonnes d’une table
▶️ Execute_SQL_Query → exécuter la requête finale
⚠️ Attention : si l’agent appelle plusieurs fois Get_Table_Definition pour préparer sa requête, le “window context” grossit à chaque étape et peut dépasser celui du “Schema Dump” puisque le “system prompt” est réinjecté à chaque fois → les coûts augmentent.
✅ Avantages
Toujours à jour (schéma récupéré dynamiquement)
Scalable pour de très grosses bases
Peu coûteux si l’agent ne fait que quelques appels
❌ Inconvénients
Peut devenir plus cher/plus lent si l’agent multiplie les appels
2️⃣ Schema Dump (one-shot)
Au début de la session, on charge toutes les définitions de tables dans la mémoire de l’agent. Il peut ensuite générer ses requêtes directement, sans repasser par les outils.
✅ Avantages
Plus rapide et parfois moins cher (un seul chargement initial)
Simple pour les bases petites/moyennes
❌ Inconvénients
Pas idéal pour les énormes DB (tokens explosent)
Pas automatiquement à jour si le schéma évolue
📊 Exemples concrets de comparaison
Requête simple (1 table)
Tools on Demand: 3 659 Tokens
Schema Dump: 8 195 Tokens
Approche
Nombre de tokens
Tools on Demand
3 659 tokens
Schema Dump
8 195 tokens
→ Tools on Demand gagne de plus de 50% !
Requête complexe (4 tables)
Tools on Demand: 9 485 Tokens
Schema Dump: 8 636 Tokens
Approche
Nombre de tokens
Tools on Demand
9 485 tokens
Schema Dump
8 636 tokens
→ Schema Dump devient plus efficace pour les requêtes multi-tables.
👉 En résumé
Si la requête SQL implique beaucoup de tables → Schema Dump est souvent plus efficace
Si la requête est simple (peu de tables) → Tools on Demand est plus économique
Pour les très grosses bases → Tools on Demand reste incontournable
💬 Et vous, quelle approche utilisez-vous ?
Plutôt Tools on Demand ou Schema Dump ?
👇 Partagez votre expérience en commentaire :
Avez-vous testé les deux approches ?
Quels écarts de coûts avez-vous observés ?
Besoin d’aide ? N’hésitez pas à me contacter : pymecatech.com
Tu veux héberger N8N sur un VPS sans exposer l’interface d’administration au public, tout en gardant uniquement les webhooks nécessaires accessibles ? Ce guide décrit une configuration pragmatique et reproductible : accès admin privé via Tailscale, proxy/SSL géré par Traefik avec challenge DNS (Cloudflare), et exposition sélective des webhooks via Cloudflare Tunnel.
Note importante : Ce guide partage une configuration pragmatique qui a fonctionné; considérez-le comme point de départ, pas comme un modèle de production.
TL;DR
Accès admin : Tailscale (réseau privé) + Tailscale SSH (optionnel) pour SSH sans ouvrir le port 22.
Réseau & firewall : Bloque les ports publiques au niveau du provider, et crée des règles UFW limitées pour le trafic interne entre containers/Tailscale.
HTTPS : Traefik + ACME DNS-01 (Cloudflare) pour obtenir des certificats sans exposer les ports HTTP.
Webhooks publics : Cloudflare Tunnel (cloudflared) pour exposer uniquement les routes HTTP des webhooks; ajoute tokens/IP whitelists/WAF pour durcir.
Objectif
Fournir une méthode simple pour :
rendre l’interface N8N accessible uniquement depuis ton réseau privé Tailscale,
exposer uniquement les endpoints webhooks nécessaires à l’extérieur via Cloudflare Tunnel,
conserver des certificats TLS valides via Traefik + ACME DNS-01 (Cloudflare).
Prérequis
VPS (Ubuntu 22.04+ recommandé) avec accès root
Nom de domaine (Cloudflare recommandé pour DNS + API)
Coolify installé (Traefik fourni par Coolify)
Comptes : Tailscale, Cloudflare Zero Trust
Options d’hébergement:
Hostinger : Vous pouvez utiliser mon code “pymecatech” pour avoir 20% de réduction
Linode (Akamai) : Performance stable, support technique réputé
Vultr : Déploiement rapide, nombreuses localisations
OVHcloud : Hébergeur français, conformité RGPD
Coolify
Coolify est une alternative open-source à Vercel/Netlify qui vous permet de déployer facilement vos applications sur votre propre infrastructure. C’est un outil de déploiement self-hosted qui simplifie la gestion de vos services avec une interface web intuitive.
Si vous n’avez pas encore préinstallé Coolify sur votre VPS, utilisez ceci :
Avant de bloquer tous les ports de votre VPS afin de le rendre sécuritaire, il faut installer Tailscale afin de pouvoir y accéder lorsque le firewall bloquera tous les ports en entrée.
Configuration du compte Tailscale
Rendez-vous sur tailscale.com et créez un compte gratuit
Connectez-vous avec votre compte Google, Microsoft ou GitHub
Une fois connecté, vous aurez accès à votre tableau de bord Tailscale
Installation sur le VPS
Configuration de Tailscale
Authentifiez vous avec l’URL fournie dans le terminal.
Copier l’URL que vous avez dans votre terminal et collez-le dans un navigateur web. Ceci permettra d’authetifier votre VPS sur votre réseau Tailscale.
Optionnel : Améliorez la sécurité de votre SSH grâce à Tailscale SSH. Cette fonctionnalité délègue l’authentification à votre fournisseur d’identité Tailscale existant (par ex. Google ou GitHub), ce qui élimine la nécessité de gérer séparément les utilisateurs Linux et les clés SSH.
Démarrez Tailscale avec l’option --ssh :
Recommendation(optionnel) : Renommez votre serveur dans Tailscale. De cette manière, vous n’aurez plus besoin de vous souvenir de son adresse IP Tailscale. Lorsque vous serez connecté à votre Tailscale, vous pourrez utiliser le nom que vous aurez définis. Sur votre compte Tailscale allez dans la section “Machine” puis sélectionnez votre serveur –>”…”–>”Edit machine name”
Recommendation(optionnel) : “Disable key expiry” À la fin de ce tutoriel, vous pourrez vous connecter à votre VPS seulement depuis un ordinateur connecté à Tailscale. Si la clef de votre serveur expire, il ne sera plus connecté à votre réseau Tailscale et vous ne pourrez plus vous connecter. Si vous désirez quand même que la clef expire automatiquement pour des raisons de sécurité, assurez-vous que votre fournisseur VPS vous offre un moyen de se connecter via un “Web Terminal”.
Sur votre compte Tailscale allez dans la section “Machine” puis sélectionnez votre serveur –>”…”–>”Disable key expiry”
Obtenir votre adresse IP Tailscale
Maintenant, vous pouvez vous connecter sécuritairement à votre VPS depuis n’importe quel appareil connecté à votre réseau Tailscale.
Étape 2 : Sécurisation de votre VPS avec le firewall local UFW
Si vous avez d’autres règles, vous pouvez utiliser la commande
sudo ufw delete <numéro de la règle à supprimer>
Étape 3 : Configuration Docker et réseaux
Identification du Docker host IP
Prenez en note l’adresse qui est retournée par cette commande
Identification des réseaux Docker de Coolify
Recherchez les réseaux avec les noms bridge et coolify
Utiliser docker inspect pour trouver les adresses
Dans la sortie, localisez le champ IPAM → Config → Subnet
Ajout des règles UFW pour la communication entre conteneurs
Exemple :
Redémarrez UFW :
Vérification
Vous devriez avoir quelque chose comme ça :
textTo Action From
-- ------ ----
Anywhere on tailscale0 ALLOW IN Anywhere
10.0.0.1 ALLOW IN 10.0.0.0/24
10.0.0.1 ALLOW IN 10.0.1.0/24
Anywhere (v6) on tailscale0 ALLOW IN Anywhere (v6)
En conséquence, le blocage de ports uniquement via UFW n’est pas efficace. Il faut donc fermer les ports au niveau de votre VPS.
Félicitation vous avez un VPS qui est accessible seulement depuis Tailscale.
Maintenant, si vous installez N8N, il y a de fortes chances que vous aurez besoin d’avoir des URL webhook acessibles depuis l’internet afin que vos workflow fonctionnent correctement.
Étape 4 :Utilisation de votre nom de domaine
Vous pouvez utiliser de vrais noms de domaine au lieu d’adresses IP/Nom Tailscale. Cependant, le MagicDNS de Tailscale ne permet pas d’ajouter des enregistrements DNS personnalisés, leur documentation recommande d’ajouter l’adresse IP Tailscale du serveur dans les enregistrements de votre fournisseur DNS. De cette façon, coolify.mydomaine.com pointe directement vers l’adresse IP Tailscale de votre VPS. Bien sûr, on pourrait aussi configurer un serveur DNS personnalisé dans le réseau local, mais pour l’instant c’est hors de la portée de ce tutoriel.
L’image ci-dessous montre la configuration avec le DNS CloudFlare. La procédure devrait être très similaire si vous utilisez un autre fournisseur DNS.
Utilisation de HTTPS
À ce stade, http://coolify.<mydomaine>.com devrait fonctionner, mais pas HTTPS. Cela peut être acceptable dans un réseau local, mais ce n’est pas recommandé.
Par défaut, la configuration Traefik de Coolify utilise Let’s Encrypt avec des HTTP challenges, qui nécessitent un accès public. Le HTTP challenges ne pourra pas fonctionner puisque le Firewall du VPS bloque tous les ports en entrée. À la place, j’ai configuré l’utilisation de DNS challenges avec Cloudflare (source).
Générer un jeton d’API Cloudflare
Créez un API Token dans Cloudflare avec les permissions suivantes :
Zone / DNS / Edit : permet à Traefik d’ajouter des enregistrements DNS TXT pour le challenge DNS-01.
Zone / Zone / Read : permet à Traefik de lire les zones DNS.
Étapes :
Accédez à votre tableau de bord Cloudflare.
Naviguez vers : Mon profil > API Tokens > Create Custom Token
Configurez les permissions comme suit :
Zone / DNS / Edit
Zone / Zone / Read
Restreignez le jeton à votre domaine (<mydomain>.com) pour plus de sécurité 🔒
Dans la configuration du proxy de Collify (Traefik), ajoutez la ligne suivante :
Étape 5 : CloudFlare Tunnel pour exposer seulement vos Webhook N8N
Maintenant, vous pouvez accéder à tous vos ressource avec HTTPS depuis le réseau Tailscale. Cependant, vos webhook N8N ne sont pas accessibles depuis l’internet. Il faut donc les exposer sécuritairement avec un CloudFlare Tunnel.
Séparer et protéger les webhooks N8N de l’interface de connexion (Login UI)
Sélectionnez “Cloudflared”, et donnez un nom (j’ai nommé le mien “webhook”).
Choisissez votre environnement. La plus part des VPS utilisent Unbuntu, il faut donc choisir l’environnement “Debian”. Puis in faut exécuter la commande d’installation dans le terminale de votre VPS
Configurez votre Tunnel pour exposer vos Webhook seulment
Activez le SSL sur votre CloudFlare – mode : Full (Strict)