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.7.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 | Valeur 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 téléchargé dans Ollama) | gemma4:e4b |
rag.llm.ollama.timeout | Timeout de la requête (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 maximum de requêtes simultanées | 5 |
rag.llm.ollama.chat.evaluation.max.relevant.docs | Nombre maximum de documents pertinents lors de l’évaluation | 3 |
rag.llm.ollama.concurrency.wait.timeout | Délai d’attente de l’acquisition d’un permis de contrôle de concurrence (millisecondes) | 30000 |
rag.llm.ollama.connect.timeout | Timeout de connexion TCP (millisecondes). Peut être spécifié séparément de rag.llm.ollama.timeout | 5000 |
rag.llm.ollama.retry.max | Nombre maximum de tentatives HTTP (lors d’erreurs 429 et 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 | Valeur par défaut |
|---|---|---|
rag.llm.ollama.chat.evaluation.description.max.chars | Nombre maximum de caractères de la description lors de l’évaluation | 500 |
rag.llm.ollama.history.max.chars | Nombre maximum de caractères de l’historique de conversation | 4000 |
rag.llm.ollama.intent.history.max.messages | Nombre maximum de messages dans l’historique lors de la détermination d’intention | 6 |
rag.llm.ollama.intent.history.max.chars | Nombre maximum de caractères dans l’historique lors de la détermination d’intention | 3000 |
rag.llm.ollama.history.assistant.max.chars | Nombre maximum de caractères de l’historique des réponses de l’assistant | 500 |
rag.llm.ollama.history.assistant.summary.max.chars | Nombre maximum 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
Dans Fess, les paramètres du LLM peuvent être personnalisés par type de prompt. La configuration s’écrit dans fess_config.properties.
Les paramètres suivants peuvent être configurés par type de prompt :
rag.llm.ollama.{promptType}.temperature- Température lors de la générationrag.llm.ollama.{promptType}.max.tokens- Nombre maximum de tokens (mappé surnum_predictdans l’API Ollama)rag.llm.ollama.{promptType}.context.max.chars- Nombre maximum de caractères du contexterag.llm.ollama.{promptType}.thinking.budget- Budget de réflexion (contrôle de la réflexion en 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. Les valeurs explicitement spécifiées dans la requête sont toujours prioritaires.
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 pas de résultats de recherche |
docnotfound | Prompt pour le cas où le document n’est pas trouvé |
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 qui s’appliquent si aucune configuration n’est fournie.
| 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 defini) | 10000 |
summary | 0.3 | 8192 | (non defini) | 10000 |
faq | 0.7 | 4096 | (non defini) | 6000 |
direct | 0.7 | 4096 | (non defini) | 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 | Valeur 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 maximum 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 (ex. : 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 la valeur est 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 think booléen et requièrent 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 (insensible à la casse). Une valeur non valide est ignorée et un avertissement est émis dans les journaux.
Note
Si thinking.level (forme chaîne) et thinking.budget (forme booléenne) sont tous les deux configurés, 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. Les étapes minimales sont les suivantes.
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.7.0fait que le script de démarrage récupère automatiquement le JAR du plugin et le place dansapp/WEB-INF/plugin/(adaptez la version à votre installation 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, le nom de service tel queollama01est utilisé pour la résolution)Le fournisseur LLM par défaut (
rag.llm.name) étantollama, aucune spécification explicite n’est nécessaire si Ollama est le seul fournisseur utilisé. En cas de basculement depuis un autre fournisseur, ajoutez-Dfess.system.rag.llm.name=ollamadansFESS_JAVA_OPTS, ou configurez-le après le démarrage dans l’administration sous « Système > Général », section RAGLe bloc
deploy.resources.reservations.devicesconfigure l’utilisation du GPU. Si vous n’utilisez pas de GPU (exécution CPU uniquement), supprimez ce bloc
Note
Les variables d’environnement en majuscules de type 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
Lorsqu’Ollama s’exécute sur un serveur différent de Fess :
Avertissement
Ollama n’a pas de fonctionnalité d’authentification par défaut. Si vous le rendez accessible de 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 commune à Fess. Si une 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 | Valeur 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 ; lorsqu’il est renseigné, l’authentification Basic est activée) | "" |
http.proxy.password | Mot de passe pour l’authentification du proxy | "" |
Note
Comme Ollama s’exécute 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, lors de l’utilisation d’un serveur Ollama distant uniquement accessible via un proxy d’entreprise). Cette configuration s’applique également à tous les accès HTTP de Fess, notamment ceux du crawler.
Guide de sélection des modèles
Guide pour la sélection du modèle selon l’usage.
| Modèle | Taille | VRAM requise | Usage |
|---|---|---|---|
phi3:3.8b | Petit | 4GB+ | Environnement léger, questions-réponses simples |
gemma4:e4b | Petit-Moyen | 8GB+ | Usage général équilibré, support du mode réflexion (par défaut) |
mistral:7b | Moyen | 8GB+ | Réponses de haute qualité requises |
llama3.3:70b | Grand | 48GB+ | Réponses de 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 : Erreur dans la fonctionnalité de chat, LLM affiche comme indisponible
Points à vérifier :
Vérifier si Ollama fonctionne
Vérifier si le modèle est téléchargé
Vérifier les paramètres du pare-feu
Vérifier si 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 si le nom du modèle est exact (peut nécessiter le tag
:latest)Télécharger le modèle nécessaire
Timeout
Symptôme : La requête expire
Solution :
Augmenter le temps de timeout
Envisager un modèle plus petit ou un environnement GPU
Configuration de débogage
Pour investiguer les problèmes, ajustez le niveau de log de Fess pour afficher des logs 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)