Aperçu
Cette page explique comment configurer le plugin fess-llm-ollama afin que Fess puisse utiliser un modèle Ollama hébergé localement pour son mode de recherche IA (RAG : Retrieval-Augmented Generation) — qui répond à des questions en langage naturel à partir de votre index de recherche d’entreprise, avec citation des sources, sans envoyer de données à une API externe. Fess appelle l’API Ollama locale pour exécuter le RAG sur vos documents explorés.
Ollama est une plateforme open source permettant d’exécuter des grands modèles de langage (LLM) en local. La fonctionnalité d’intégration Ollama de Fess est fournie sous forme de plugin fess-llm-ollama, et convient à une utilisation en environnement privé.
L’utilisation d’Ollama permet d’utiliser la fonctionnalité du mode de recherche IA sans envoyer de données à l’extérieur.
Caractéristiques principales
Exécution locale : Les données ne sont pas envoyées à l’extérieur, garantissant la confidentialité
Modèles variés : Prise en charge de nombreux modèles dont Llama, Mistral, Gemma, CodeLlama
Efficacité des coûts : Pas de coût API (seulement les coûts matériels)
Personnalisation : Possibilité d’utiliser des modèles affinés indépendamment
Modèles pris en charge
Principaux modèles disponibles avec Ollama :
llama3.3:70b- Llama 3.3 de Meta (70B paramètres)gemma4:e4b- Gemma 4 de Google (E4B paramètres, par défaut)mistral:7b- Mistral de Mistral AI (7B paramètres)codellama:13b- Code Llama de Meta (13B paramètres)phi3:3.8b- Phi-3 de Microsoft (3.8B paramètres)
Note
Pour la dernière liste des modèles disponibles, consultez Ollama Library.
Prérequis
Avant d’utiliser Ollama, vérifiez les points suivants.
Installation d’Ollama : Téléchargez et installez depuis https://ollama.com/
Téléchargement du modèle : Téléchargez le modèle à utiliser dans Ollama
Démarrage du serveur Ollama : Vérifiez qu’Ollama fonctionne
Installation d’Ollama
Linux/macOS
Windows
Téléchargez et exécutez l’installateur depuis le site officiel.
Docker
Téléchargement du modèle
Installation du plugin
La fonctionnalité d’intégration Ollama est fournie sous forme de plugin. Pour utiliser Ollama, l’installation du plugin fess-llm-ollama est nécessaire.
Téléchargez fess-llm-ollama-15.8.0.jar.
Placez-le dans le répertoire
app/WEB-INF/plugin/du répertoire d’installation de Fess.
Redémarrez Fess.
Note
La version du plugin doit correspondre à la version de Fess.
Configuration de base
Les configurations LLM sont réparties dans plusieurs fichiers de configuration.
Configuration minimale
system.properties(configurable également via Administration > Système > Général) :
app/WEB-INF/conf/fess_config.properties :
Note
La configuration du fournisseur LLM peut également être effectuée via l’administration (Administration > Système > Général) en configurant rag.llm.name.
Configuration recommandée (environnement de production)
system.properties(configurable également via Administration > Système > Général) :
app/WEB-INF/conf/fess_config.properties :
Éléments de configuration
Tous les éléments de configuration disponibles pour le client Ollama. Tous, sauf rag.llm.name, se configurent dans fess_config.properties.
| Propriété | Description | Par défaut |
|---|---|---|
rag.llm.ollama.api.url | URL de base du serveur Ollama | http://localhost:11434 |
rag.llm.ollama.model | Nom du modèle à utiliser (modèle déjà téléchargé dans Ollama) | gemma4:e4b |
rag.llm.ollama.timeout | Délai d’expiration des requêtes (millisecondes) | 60000 |
rag.llm.ollama.availability.check.interval | Intervalle de vérification de disponibilité (secondes). Une valeur inférieure ou égale à 0 désactive la vérification périodique de disponibilité | 60 |
rag.llm.ollama.max.concurrent.requests | Nombre maximal de requêtes simultanées | 5 |
rag.llm.ollama.chat.evaluation.max.relevant.docs | Nombre maximal de documents pertinents pour l’évaluation | 3 |
rag.llm.ollama.concurrency.wait.timeout | Délai d’attente pour l’acquisition d’un permis de contrôle de concurrence (millisecondes) | 30000 |
rag.llm.ollama.connect.timeout | Délai d’expiration de la connexion TCP (millisecondes). Peut être spécifié séparément de rag.llm.ollama.timeout | 5000 |
rag.llm.ollama.retry.max | Nombre maximal de tentatives HTTP (en cas d’erreur 429 ou de la série 5xx) | 3 |
rag.llm.ollama.retry.base.delay.ms | Délai de base du backoff exponentiel (millisecondes) | 2000 |
Configuration avancée
Éléments de configuration avancés relatifs à l’historique et à la taille du contexte.
| Propriété | Description | Par défaut |
|---|---|---|
rag.llm.ollama.chat.evaluation.description.max.chars | Nombre maximal de caractères de la description lors de l’évaluation | 500 |
rag.llm.ollama.history.max.chars | Nombre maximal de caractères de l’historique de conversation | 4000 |
rag.llm.ollama.intent.history.max.messages | Nombre maximal de messages de l’historique lors de la détermination de l’intention | 6 |
rag.llm.ollama.intent.history.max.chars | Nombre maximal de caractères de l’historique lors de la détermination de l’intention | 3000 |
rag.llm.ollama.history.assistant.max.chars | Nombre maximal de caractères de l’historique des réponses de l’assistant | 500 |
rag.llm.ollama.history.assistant.summary.max.chars | Nombre maximal de caractères de l’historique des résumés de l’assistant | 500 |
Contrôle de la concurrence
rag.llm.ollama.max.concurrent.requests permet de contrôler le nombre de requêtes simultanées vers Ollama. La valeur par défaut est 5. Ajustez-la en fonction des ressources du serveur Ollama. Un nombre trop élevé de requêtes simultanées peut surcharger le serveur Ollama et réduire la vitesse de réponse.
Configuration par type de prompt
Fess permet de personnaliser les paramètres du LLM pour chaque type de prompt. La configuration s’effectue dans fess_config.properties.
Les paramètres suivants peuvent être définis par type de prompt :
rag.llm.ollama.{promptType}.temperature- Température lors de la générationrag.llm.ollama.{promptType}.max.tokens- Nombre maximal de tokens (mappé surnum_predictde l’API Ollama)rag.llm.ollama.{promptType}.context.max.chars- Nombre maximal de caractères du contexterag.llm.ollama.{promptType}.thinking.budget- Budget de réflexion (contrôle de la réflexion sous forme booléenne ; voir « Prise en charge des modèles de réflexion »)rag.llm.ollama.{promptType}.thinking.level- Niveau de réflexion (chaîne de caractèreshigh/medium/low; voir « Prise en charge des modèles de réflexion »)rag.llm.ollama.{promptType}.top.p- Valeur d’échantillonnage Top-Prag.llm.ollama.{promptType}.top.k- Valeur d’échantillonnage Top-Krag.llm.ollama.{promptType}.num.ctx- Taille de la fenêtre de contexte
Chaque paramètre est résolu dans l’ordre suivant : rag.llm.ollama.{promptType}.<param> (configuration spécifique au type de prompt) → rag.llm.ollama.default.<param> (repli commun à tous les types de prompt) → valeur par défaut codée en dur pour chaque type de prompt. Une valeur explicitement spécifiée dans la requête est toujours prioritaire.
Types de prompt disponibles :
| Type de prompt | Description |
|---|---|
intent | Prompt pour déterminer l’intention de l’utilisateur |
evaluation | Prompt d’évaluation des résultats de recherche |
unclear | Prompt de réponse pour les requêtes peu claires |
noresults | Prompt pour le cas où il n’y a aucun résultat de recherche |
docnotfound | Prompt pour le cas où le document est introuvable |
answer | Prompt de génération de réponse |
summary | Prompt de génération de résumé |
faq | Prompt de génération de FAQ |
direct | Prompt de réponse directe |
queryregeneration | Prompt de régénération de requête |
Chaque type de prompt dispose de valeurs par défaut codées en dur, appliquées lorsque la configuration est omise.
| Type de prompt | temperature | max.tokens | thinking.budget | context.max.chars |
|---|---|---|---|---|
intent | 0.1 | 256 | 0 | 6000 |
evaluation | 0.1 | 512 | 0 | 6000 |
unclear | 0.7 | 512 | 0 | 6000 |
noresults | 0.7 | 512 | 0 | 6000 |
docnotfound | 0.7 | 512 | 0 | 6000 |
answer | 0.5 | 8192 | (non défini) | 10000 |
summary | 0.3 | 8192 | (non défini) | 10000 |
faq | 0.7 | 4096 | (non défini) | 6000 |
direct | 0.7 | 4096 | (non défini) | 6000 |
queryregeneration | 0.3 | 256 | 0 | 6000 |
Exemple de configuration:
Options du modèle Ollama
Les paramètres du modèle Ollama peuvent être configurés dans fess_config.properties. En utilisant le format rag.llm.ollama.default.<param>, la valeur est utilisée comme repli commun à tous les types de prompt. Le repli via default s’applique non seulement à top.p / top.k / num.ctx, mais aussi à temperature / max.tokens / thinking.budget / thinking.level.
| Propriété | Description | Par défaut |
|---|---|---|
rag.llm.ollama.default.top.p | Valeur d’échantillonnage Top-P (0.0 à 1.0). Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.top.p | (non défini) |
rag.llm.ollama.default.top.k | Valeur d’échantillonnage Top-K. Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.top.k | (non défini) |
rag.llm.ollama.default.num.ctx | Taille de la fenêtre de contexte. Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.num.ctx | (non défini) |
rag.llm.ollama.default.temperature | Valeur de repli de la température de génération. Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.temperature | (non défini) |
rag.llm.ollama.default.max.tokens | Valeur de repli du nombre maximal de tokens. Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.max.tokens | (non défini) |
rag.llm.ollama.default.thinking.budget | Valeur de repli du budget de réflexion. Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.thinking.budget | (non défini) |
rag.llm.ollama.default.thinking.level | Valeur de repli du niveau de réflexion (high / medium / low). Peut être remplacée par type de prompt avec rag.llm.ollama.{promptType}.thinking.level | (non défini) |
rag.llm.ollama.options.* | Options globales transmises directement à l’API Ollama. Le suffixe est utilisé comme nom d’option (exemple : rag.llm.ollama.options.repeat_penalty=1.1). Les valeurs sont automatiquement converties en Integer, Double, Boolean ou String | (non défini) |
Exemple de configuration:
Prise en charge des modèles de réflexion
Lors de l’utilisation de modèles de réflexion (thinking model) tels que gemma4 ou qwen3, Fess prend en charge la configuration du budget de réflexion (thinking budget).
Le budget de réflexion se configure par type de prompt dans fess_config.properties :
La configuration du budget de réflexion permet de contrôler le nombre de tokens alloués à l’étape de « réflexion » du modèle avant la génération de la réponse.
Note
Avec Ollama, le budget de réflexion est converti en indicateur booléen (think: true si la valeur est supérieure à 0, think: false si elle vaut 0). Le contrôle fin par nombre de tokens n’est pas disponible en raison des contraintes de l’API Ollama.
Niveau de réflexion (thinking level)
Certains modèles, comme gpt-oss, ignorent l’indicateur booléen think et nécessitent la spécification du niveau de réflexion sous forme de chaîne de caractères high / medium / low. Pour ces modèles, utilisez rag.llm.ollama.{promptType}.thinking.level.
Les valeurs acceptées pour thinking.level sont high / medium / low (la casse n’est pas prise en compte). Une valeur non valide est ignorée et un avertissement est écrit dans les journaux.
Note
Si thinking.level (forme chaîne de caractères) et thinking.budget (forme booléenne) sont tous deux définis, thinking.level est prioritaire. Utilisez thinking.level pour les modèles de la famille GPT-OSS, et thinking.budget pour les autres modèles de réflexion.
Configuration réseau
Configuration Docker
Le dépôt officiel docker-fess de Fess inclut un overlay Ollama compose-ollama.yaml. Voici les étapes minimales.
compose-ollama.yaml est configuré pour utiliser un GPU NVIDIA (NVIDIA Container Toolkit requis). Son contenu est le suivant.
Points importants :
FESS_PLUGINS=fess-llm-ollama:15.8.0permet au script de démarrage de récupérer automatiquement le JAR du plugin et de le placer dansapp/WEB-INF/plugin/(adaptez la version à votre installation de Fess)-Dfess.config.rag.chat.enabled=trueactive le mode de recherche IA-Dfess.config.rag.llm.ollama.api.url=...spécifie l’URL du serveur Ollama (dans le réseau Docker Compose, elle est résolue via le nom de service, par exempleollama01)Le fournisseur LLM (
rag.llm.name) ayantollamacomme valeur par défaut, aucune spécification explicite n’est nécessaire si Ollama est le seul fournisseur utilisé. Pour basculer depuis un autre fournisseur, ajoutez-Dfess.system.rag.llm.name=ollamadansFESS_JAVA_OPTS, ou configurez-le après le démarrage dans la section RAG de la page « Système > Général » de la console d’administrationLe bloc
deploy.resources.reservations.devicessert à l’utilisation du GPU. Si vous n’utilisez pas de GPU (exécution en CPU uniquement), supprimez ce bloc
Note
Les variables d’environnement en majuscules avec underscores, telles que RAG_CHAT_ENABLED ou RAG_LLM_NAME, ne sont pas reconnues directement par Fess. Les valeurs de configuration doivent impérativement être transmises dans FESS_JAVA_OPTS sous la forme -Dfess.config.<key> (famille fess_config.properties) ou -Dfess.system.<key> (famille system.properties).
Serveur Ollama distant
Si Ollama s’exécute sur un serveur distinct de celui de Fess :
Avertissement
Ollama ne dispose pas de fonctionnalité d’authentification par défaut. Si vous le rendez accessible depuis l’extérieur, envisagez des mesures de sécurité au niveau réseau (pare-feu, VPN, etc.).
Utilisation via un proxy HTTP
Le client Ollama partage la configuration de proxy HTTP globale de Fess. Si la connexion au serveur Ollama doit passer par un proxy (par exemple lors de l’utilisation d’un serveur Ollama distant), spécifiez les propriétés suivantes dans fess_config.properties.
| Propriété | Description | Par défaut |
|---|---|---|
http.proxy.host | Nom d’hôte du proxy (chaîne vide pour ne pas utiliser de proxy) | "" |
http.proxy.port | Numéro de port du proxy | 8080 |
http.proxy.username | Nom d’utilisateur pour l’authentification du proxy (facultatif ; s’il est renseigné, l’authentification Basic est activée) | "" |
http.proxy.password | Mot de passe pour l’authentification du proxy | "" |
Note
Ollama s’exécutant généralement en local ou sur un réseau interne, la configuration d’un proxy n’est nécessaire que dans des cas limités (par exemple, l’utilisation d’un serveur Ollama distant accessible uniquement via un proxy d’entreprise). Ce paramétrage s’applique aussi à l’ensemble des accès HTTP de Fess, y compris ceux du robot d’exploration.
Guide de sélection des modèles
Guide de sélection du modèle selon l’usage.
| Modèle | Taille | VRAM requise | Usage |
|---|---|---|---|
phi3:3.8b | Petite | 4 Go ou plus | Environnement léger, questions-réponses simples |
gemma4:e4b | Petite à moyenne | 8 Go ou plus | Usage général équilibré, prise en charge du mode réflexion (par défaut) |
mistral:7b | Moyenne | 8 Go ou plus | Lorsqu’une réponse de haute qualité est nécessaire |
llama3.3:70b | Grande | 48 Go ou plus | Réponses de la meilleure qualité, raisonnement complexe |
Prise en charge GPU
Ollama prend en charge l’accélération GPU. L’utilisation d’un GPU NVIDIA améliore considérablement la vitesse d’inférence.
Dépannage
Erreur de connexion
Symptôme : Une erreur survient dans la fonctionnalité de chat, le LLM est indiqué comme indisponible
Points à vérifier :
Vérifier qu’Ollama fonctionne:
Vérifier que le modèle est téléchargé:
Vérifier la configuration du pare-feu
Vérifier que le plugin
fess-llm-ollamaest bien placé dansapp/WEB-INF/plugin/
Modèle introuvable
Symptôme : Le journal affiche « Configured model not found »
Solution :
Vérifier que le nom du modèle est exact (le tag
:latestpeut être requis):Télécharger le modèle nécessaire:
Délai d’expiration
Symptôme : La requête expire (timeout)
Solution :
Augmenter le délai d’expiration:
Utiliser un modèle plus petit ou envisager un environnement GPU
Configuration du débogage
Pour investiguer un problème, ajustez le niveau de log de Fess afin d’afficher des journaux détaillés liés à Ollama.
app/WEB-INF/classes/log4j2.xml :
Informations de référence
Vue d’ensemble du mode de recherche IA (RAG) et de l’intégration LLM - Aperçu de l’intégration LLM
Configuration du mode de recherche IA - Détails de la fonctionnalité de mode de recherche IA
Recherche hybride et Rank Fusion (sémantique + mots-clés) - Recherche hybride : combiner recherche par mots-clés et recherche sémantique (vectorielle)
Mode de recherche IA - Utilisation du mode de recherche IA (guide utilisateur)