LLM et embeddings privés
Brancher l'instance sur votre propre endpoint de modèles, pour le chat comme pour les embeddings, puis interdire toute sortie vers un fournisseur externe.
Cette page décrit, étape par étape, comment faire fonctionner l'instance avec vos propres modèles — un endpoint que vous hébergez ou que vous louez — au lieu des fournisseurs publics (OpenAI, Anthropic, Mistral…), puis comment interdire à l'instance de s'adresser à un fournisseur externe, canal par canal.
Elle est destinée à un administrateur d'instance (rôle super administrateur ou administrateur du tenant). L'essentiel se passe dans l'app d'administration, rubriques Modèles IA et RAG & Documents ; seule la création d'une base de connaissances (étape 4) se fait dans l'app Bases de connaissances.
Ce que « privé » veut dire ici
Un fournisseur personnalisé est une adresse que vous fournissez. La plateforme y envoie ses requêtes directement, avec la clé API que vous avez saisie. Rien ne transite par un fournisseur public, et le trafic reste dans le périmètre que vous contrôlez.
Deux usages sont couverts, et seulement ces deux-là :
| Usage | Mode | Privé possible |
|---|---|---|
| Conversation, génération de texte | Chat | Oui |
| Vectorisation des documents et des questions (RAG) | Embedding | Oui |
| Parsing de documents, reranking, enrichissement des métadonnées | — | Non — mais désactivables |
| Transcription audio, génération d'images | — | Non |
Un fournisseur personnalisé ne porte que le chat et les embeddings. Pour le parsing, le reranking et l'enrichissement, l'étape 5 permet de désactiver la capacité — elle ne la rend pas privée. La transcription audio et la génération d'images n'ont ni équivalent privé ni bascule : si votre exigence est qu'aucun contenu ne parvienne à un tiers, n'activez pas ces capacités.
Prérequis — à valider avant de commencer
C'est ici que la plupart des configurations échouent. Les contrôles ci-dessous sont appliqués à l'enregistrement, puis revérifiés à chaque appel : une URL qui cesserait de les respecter plus tard — un nom de domaine que vous feriez pointer vers une adresse interne, par exemple — arrêterait de fonctionner à ce moment-là, pas silencieusement.
L'endpoint doit être compatible OpenAI
Votre endpoint doit exposer les routes standard /models et /chat/completions — toutes deux
indispensables à l'enregistrement — ainsi que /embeddings si vous voulez des embeddings privés.
Vous saisirez sa racine, celle qui se termine généralement par /v1, sans suffixe (une barre
oblique finale est acceptée et retirée) :
- ✅
https://ia.mon-entreprise.fr/v1 - ❌
https://ia.mon-entreprise.fr/v1/modelsou.../v1/chat/completions
GET {racine}/models doit renvoyer une réponse au format OpenAI, c'est-à-dire un objet contenant
un tableau data dont chaque entrée porte un id. À défaut, l'enregistrement est refusé.
L'URL doit être publique et en HTTPS
| Règle | Refusé |
|---|---|
| HTTPS obligatoire | http://… |
| Port 443 ou 8443 uniquement | https://…:11434, :8000, :3000 |
| Adresse résolue publique | localhost, 127.0.0.1, 10.x, 172.16-31.x, 192.168.x, IPv6 locales |
| Pas d'identifiants, de paramètres ni d'ancre dans l'URL | https://user:mdp@…, https://…/v1?key=…, https://…/v1#x |
| Pas d'adresse de la plateforme elle-même | tout domaine *.superfasttt.ai / .dev / .fr |
Un serveur de modèles installé sur votre poste ou sur le réseau interne (http://localhost:11434,
une adresse en 10. ou 192.168., un accès par VPN) ne peut pas être enregistré, même s'il
répond parfaitement depuis votre navigateur. La vérification résout le nom de domaine et refuse
toute adresse privée. Exposez l'endpoint derrière un reverse-proxy TLS joignable publiquement,
sur le port 443 ou 8443, et protégez-le par la clé API.
L'endpoint doit répondre au chat ou aux embeddings
À l'enregistrement, la plateforme appelle /models, puis essaie plusieurs modèles de la liste :
d'abord un message de test via /chat/completions, puis une vectorisation de test via
/embeddings. Le fournisseur est créé dès qu'une de ces deux capacités répond. Il n'est refusé
que si aucun modèle ne répond à l'une ni à l'autre.
Conséquences concrètes :
- un endpoint qui ne sert que des embeddings (TEI, infinity, un vLLM lancé sur un modèle de vectorisation) s'enregistre normalement ;
- l'ordre de la réponse
/modelsn'a plus d'importance, y compris quand votre endpoint annonce un modèle d'embedding en premier ; - le modèle d'embedding qui a répondu est enregistré directement en mode Embedding, avec la dimension réellement mesurée sur le vecteur de test.
La vérification est bornée : quelques modèles au maximum, et une vingtaine de secondes au pire. Sur un endpoint qui en annonce des dizaines, les autres restent donc en mode Chat par défaut — c'est à vous de qualifier ceux qui servent aux embeddings, à l'étape 2. Aucun modèle n'est jamais classé sur la foi de son nom : seul un test qui répond décide.
Et pour l'authentification
La clé API est obligatoire, même si votre endpoint n'en vérifie aucune : saisissez alors une
valeur quelconque. Elle est transmise dans l'en-tête Authorization: Bearer, stockée chiffrée, et
jamais réaffichée ensuite — conservez-la de votre côté.
Étape 1 — Déclarer le fournisseur
Si l'opération échoue, rien n'est enregistré. Reportez-vous au dépannage : le message indique laquelle des vérifications a échoué.
Les modèles ne se déclarent pas à la main : ils sont découverts depuis votre endpoint. Pour prendre en compte un modèle ajouté après coup, utilisez Actualiser les modèles (étape 2).
Étape 2 — Qualifier les modèles
Les modèles découverts sont considérés comme des modèles de chat, sauf ceux que la vérification d'enregistrement a vus répondre en embeddings. Comme cette vérification est bornée à quelques modèles, c'est à vous d'indiquer lesquels des autres servent aux embeddings.
Le panneau propose également Tester la connexion (rejoue la découverte, puis le test de chat et le test d'embeddings), Actualiser les modèles, la rotation de la clé API, ainsi que l'activation ou la désactivation du fournisseur. Un fournisseur qui ne sert que des embeddings est annoncé réussi : le test d'embeddings suffit.
« Tester la connexion » constate, il n'enregistre rien. S'il annonce un modèle d'embeddings que la liste affiche encore en mode Chat, c'est à vous de le passer en Embedding avec ses dimensions — le test vous donne la valeur mesurée, la modification reste votre geste.
Les dimensions doivent être exactes. Une valeur fausse produit un index inutilisable, et la correction impose de tout réindexer. Elles sont obligatoires dès qu'un modèle passe en mode Embedding : sans elles, l'enregistrement est refusé.
Un modèle déjà utilisé pour indexer est verrouillé : la plateforme refuse aussi bien de changer sa dimension que de le repasser en Chat, et le message vous indique la dimension déjà indexée. Pour changer de modèle de vectorisation, créez un nouveau preset plutôt que de modifier celui qui est en service.
Désactiver un fournisseur le fait disparaître de la liste Fournisseurs — et le panneau de gestion n'est plus atteignable, puisqu'on y entre par cette ligne. Ne le désactivez que si vous n'avez pas l'intention d'y revenir ; rétablir le fournisseur demande alors une intervention de votre support.
Actualiser les modèles n'efface jamais un modèle : un modèle disparu de votre endpoint est signalé, pas supprimé — une base de connaissances peut encore le référencer.
Étape 3 — Utiliser un modèle de chat privé
Aucune action supplémentaire n'est nécessaire. Vos modèles de chat privés apparaissent partout où un modèle se choisit (chatbot, agents, workflows), sous le fournisseur Personnalisé et sous la forme Nom du fournisseur — identifiant du modèle.
Un modèle privé figure aussi dans Modèles IA → Modèles, sous le fournisseur Personnalisé, mais sans menu d'actions : la colonne affiche « Géré via le fournisseur personnalisé ». Un modèle privé est toujours disponible et ne reçoit jamais le statut Par défaut — activation, repli et modèle par défaut ne concernent que les modèles du catalogue. Pour qu'un modèle privé s'impose, sélectionnez-le là où vous l'utilisez, ou coupez le canal externe correspondant à l'étape 5 : il ne restera plus que lui dans les listes.
Étape 4 — Utiliser des embeddings privés
C'est l'étape la plus délicate, parce qu'elle est irréversible par base de connaissances.
Le modèle d'embedding ne se choisit pas sur la base de connaissances : il se choisit sur le preset RAG dont elle hérite, et il est figé au moment de la première indexation.
Une base déjà indexée ne change pas de modèle d'embedding. Modifier le preset n'affecte que les bases créées ensuite, et la fonction Réindexer réindexe dans l'espace vectoriel existant — donc avec le modèle d'origine. C'est volontaire : des vecteurs produits par deux modèles différents ne sont pas comparables entre eux.
Pour basculer un corpus existant, il faut soit le réimporter dans une nouvelle base rattachée au nouveau preset, soit demander une migration à votre support : aucune action de l'interface ne le fait.
Les dimensions d'un modèle d'embedding ne sont plus modifiables une fois qu'un espace vectoriel les utilise. Pour changer de dimension, il faut un autre modèle, un nouveau preset et une nouvelle indexation.
Voir Presets pour tout ce que borne un preset, et Espaces de recherche pour vérifier quel modèle sert réellement à chaque base.
Étape 5 — Interdire les sorties externes
Tant que des fournisseurs publics restent configurés, un utilisateur peut encore choisir un modèle externe. La page Modèles IA → Confidentialité IA ferme cette porte, canal par canal.
| Bascule | Effet quand elle est désactivée |
|---|---|
| Chat externe | Seuls les modèles de chat privés sont proposés et acceptés. |
| Embeddings externes | Seuls les modèles d'embedding privés sont proposés et acceptés. |
| Parsing externe | Le parsing par un service externe (OCR, LlamaCloud) est refusé. |
| Rerank externe | Le reranking cross-encoder externe est refusé. |
| Enrichissement externe | L'enrichissement de métadonnées est ignoré au lieu d'être envoyé. |
Une sixième bascule, Geler l'ingestion sur les bases à embeddings externes, bloque l'ajout de documents dans les bases restées sur un modèle externe sans couper leur recherche. C'est le geste intermédiaire à privilégier pendant une migration : plus rien de neuf ne sort, l'existant continue de répondre.
Ordre à respecter. Couper Embeddings externes alors qu'une base est encore indexée avec un modèle externe casse sa recherche : chaque question doit elle aussi être vectorisée, avec le modèle de la base, et cet appel est bloqué.
Faites l'inventaire avant de couper, dans RAG & Documents → Diagnostic → Espaces de recherche : la colonne Modèle / dim y montre, espace par espace, le modèle utilisé et sa dimension — donc ce qui est encore externe. Le bandeau d'avertissement de la page Confidentialité IA, lui, ne s'affiche qu'après la coupure — il ne peut donc pas vous servir de feu vert.
Le message de refus que reçoit un utilisateur lorsque l'ingestion est gelée lui dit exactement cela : Réindexer depuis l'interface conserve l'espace vectoriel existant, donc le modèle d'origine, et ne débloque pas l'ingestion. Il renvoie vers les deux seules bascules possibles — une nouvelle base rattachée à un preset privé, ou une migration demandée au support — et vers cette page.
L'ordre sûr est donc :
Cette page n'est visible que par un super administrateur ou un administrateur du tenant.
Dépannage
Les messages apparaissent sous la forme titre puis détail : c'est le détail qui identifie la cause, plusieurs causes différentes partageant le même titre.
Les détails ci-dessous sont les mêmes quel que soit le geste : à l'ajout d'un fournisseur, à la rotation de la clé, à l'actualisation des modèles — où le détail reste affiché sous le fournisseur jusqu'à la prochaine vérification réussie — et dans le résultat de Tester la connexion.
| Ce que vous voyez | Cause | Ce qu'il faut faire |
|---|---|---|
| URL invalide | L'URL ne passe pas les contrôles. Le détail nomme la règle : doit utiliser https, ne doit pas contenir d'identifiants / de paramètres / d'ancre, doit comporter un nom d'hôte, dépasse 500 caractères, ou ne pointe pas vers une adresse publique autorisée (port autre que 443/8443, adresse privée, interne ou non résolue). | Reprenez les prérequis d'URL. |
URL invalide — Un identifiant de modèle renvoyé par /models est inexploitable | Malgré le titre, l'URL n'est pas en cause : un id renvoyé par /models est inexploitable. Seuls A-Za-z0-9 . _ : / - sont acceptés, 128 caractères au maximum, et le premier caractère doit être alphanumérique. Le détail se termine par Identifiant en cause : suivi de l'identifiant fautif, réécrit sur ces mêmes caractères et tronqué (les caractères interdits en sont retirés — c'est justement ce qui le rend invalide). | Corrigez l'identifiant côté endpoint (un espace ou un accent suffit à le rejeter). |
Fournisseur injoignable — L'endpoint n'a pas répondu dans le délai imparti sur /models | L'endpoint ne répond pas assez vite. | Vérifiez la latence depuis l'extérieur, pas seulement depuis votre réseau. |
| Fournisseur injoignable — La connexion à l'endpoint a échoué | Nom de domaine non résolu, port fermé, TLS refusé. | Vérifiez que l'endpoint est joignable depuis l'extérieur. |
Fournisseur injoignable — L'endpoint a répondu par un code d'erreur HTTP sur /models | Le détail nomme le code entre parenthèses (par ex. (code HTTP 404)). | Vérifiez le chemin : l'URL de base doit être la racine, /models y est ajouté par la plateforme. |
Fournisseur injoignable — La réponse de /models n'est pas compatible OpenAI : le tableau data est absent | /models ne renvoie pas la forme attendue. | Corrigez la réponse de /models, ou placez la passerelle compatible OpenAI devant votre serveur. |
Fournisseur injoignable — La réponse de /models ne contient aucun identifiant de modèle exploitable | /models répond, mais aucune entrée ne porte d'id. | Vérifiez que chaque entrée porte un id. |
Fournisseur injoignable — L'endpoint n'a pas renvoyé de JSON exploitable sur /models | La réponse n'est pas du JSON (page HTML d'un portail captif, d'un proxy ou d'une page d'erreur). | Vérifiez que l'URL pointe l'API et non une interface web. |
Fournisseur injoignable — La réponse de /models dépasse la taille autorisée | La liste renvoyée est trop volumineuse pour être lue en toute sécurité. | Réduisez la réponse de /models (elle n'a besoin que des id). |
| Fournisseur injoignable — Clé API refusée par le fournisseur | Votre endpoint a répondu 401 ou 403 ; le détail nomme le code entre parenthèses. | Vérifiez la clé et la façon dont l'endpoint attend l'en-tête Authorization. |
| Fournisseur injoignable — Aucun des N modèle(s) testé(s) n'a répondu, ni au chat ni aux embeddings | Les modèles essayés ont refusé /chat/completions et /embeddings. Le détail nomme les modèles testés et le dernier motif de refus (clé refusée, code HTTP, délai dépassé, endpoint injoignable, réponse inexploitable). | Vérifiez qu'au moins un modèle répond à l'une des deux routes, avec cette clé API. Voir le prérequis correspondant. |
| Fournisseur injoignable — …Le fournisseur a été trop lent pour que tous les modèles soient testés | La vérification est bornée en temps : votre endpoint n'a pas répondu assez vite pour que tous les candidats soient essayés. | Vérifiez la latence de l'endpoint (un modèle chargé à froid peut dépasser le délai), puis réessayez. |
| Nom déjà utilisé | Un fournisseur porte déjà ce nom dans votre espace. | Choisissez un autre nom. |
| Dimensions verrouillées | Vous modifiez les dimensions d'un modèle déjà utilisé par un espace vectoriel. | Utilisez un autre modèle et un nouveau preset. |
| Fournisseur utilisé (à la suppression) | Des presets ou des bases de connaissances y font référence. Le message vous propose de le désactiver. | Sachez ce que cela implique : un fournisseur désactivé disparaît de la liste et n'est plus gérable depuis l'interface. Retirez plutôt les presets et les bases qui le référencent, puis supprimez-le. |
| Un modèle a disparu des listes | Le canal correspondant a été coupé dans Confidentialité IA. | C'est le comportement attendu : seuls les modèles privés restent proposés. |
Et ensuite ?
- Fournisseurs — les fournisseurs publics et leurs clés.
- Modèles — activer les modèles du catalogue et désigner les modèles par défaut.
- Presets — l'enveloppe de gouvernance héritée par les bases de connaissances.

