Aperçu
Cette page explique comment configurer le plugin fess-llm-openai afin que Fess puisse utiliser OpenAI 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. Fess appelle l’API OpenAI pour exécuter le RAG sur vos documents explorés avec les modèles GPT.
OpenAI est un service cloud fournissant des grands modèles de langage (LLM) haute performance, dont GPT-4. Fess peut utiliser l’API OpenAI pour réaliser la fonctionnalité de mode de recherche IA.
L’utilisation d’OpenAI permet de générer des réponses de haute qualité avec les modèles d’IA les plus avancés.
Caractéristiques principales
Réponses de haute qualité : Génération de réponses précises avec les derniers modèles GPT
Évolutivité : Mise à l’échelle facile grâce au service cloud
Amélioration continue : Performances améliorées grâce aux mises à jour régulières des modèles
Fonctionnalités riches : Prise en charge de diverses tâches comme la génération de texte, le résumé, la traduction
Modèles pris en charge
Principaux modèles disponibles avec OpenAI :
gpt-5- Dernier modèle haute performancegpt-5-mini- Version allégée de GPT-5 (bon rapport coût-efficacité)gpt-4o- Modèle multimodal haute performancegpt-4o-mini- Version allégée de GPT-4oo3-mini- Modèle léger spécialisé dans le raisonnemento4-mini- Modèle léger de nouvelle génération spécialisé dans le raisonnement
Note
Pour les derniers modèles disponibles, consultez OpenAI Models.
Note
Lors de l’utilisation de modèles de la série o1/o3/o4 ou de la série gpt-5, Fess utilise automatiquement le paramètre max_completion_tokens de l’API OpenAI. Aucune modification de configuration n’est nécessaire.
Prérequis
Avant d’utiliser OpenAI, préparez les éléments suivants.
Compte OpenAI : Créez un compte sur https://platform.openai.com/
Clé API : Générez une clé API dans le tableau de bord OpenAI
Configuration de facturation : Configurez les informations de facturation car l’utilisation de l’API est payante
Obtention de la clé API
Connectez-vous à OpenAI Platform
Accédez à la section « API keys »
Cliquez sur « Create new secret key »
Entrez un nom pour la clé et créez-la
Enregistrez la clé affichée en lieu sûr (elle ne sera affichée qu’une seule fois)
Avertissement
La clé API est une information confidentielle. Faites attention aux points suivants :
Ne pas la commiter dans un système de gestion de versions
Ne pas l’afficher dans les logs
La gérer via des variables d’environnement ou des fichiers de configuration sécurisés
Installation du plugin
La fonctionnalité d’intégration OpenAI est fournie sous forme de plugin. Pour l’utiliser, l’installation du plugin fess-llm-openai est nécessaire.
Téléchargez fess-llm-openai-15.7.0.jar
Placez le fichier JAR 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 éléments de configuration sont répartis dans les deux fichiers suivants selon leur usage.
app/WEB-INF/conf/fess_config.properties- Configuration principale de Fess et configuration spécifique au fournisseur LLMsystem.properties- Sélection du fournisseur LLM (rag.llm.name), à configurer via l’administration (Administration > Système > Général) ou directement dans le fichier
Configuration minimale
app/WEB-INF/conf/fess_config.properties :
system.properties (configurable également via Administration > Système > Général) :
Configuration recommandée (environnement de production)
app/WEB-INF/conf/fess_config.properties :
system.properties (configurable également via Administration > Système > Général) :
Éléments de configuration
Tous les éléments de configuration disponibles pour le client OpenAI. Sauf rag.llm.name, tous se configurent dans fess_config.properties.
| Propriété | Description | Valeur par défaut | Emplacement |
|---|---|---|---|
rag.llm.name | Nom du fournisseur LLM (spécifier openai) | ollama | system.properties |
rag.llm.openai.api.key | Clé API OpenAI | (Requis) | fess_config.properties |
rag.llm.openai.model | Nom du modèle à utiliser | gpt-5-mini | fess_config.properties |
rag.llm.openai.api.url | URL de base de l’API | https://api.openai.com/v1 | fess_config.properties |
rag.llm.openai.timeout | Timeout de la requête (millisecondes) | 120000 | fess_config.properties |
rag.llm.openai.availability.check.interval | Intervalle de vérification de disponibilité (secondes) | 60 | fess_config.properties |
rag.llm.openai.max.concurrent.requests | Nombre maximum de requêtes simultanées | 5 | fess_config.properties |
rag.llm.openai.chat.evaluation.max.relevant.docs | Nombre maximum de documents pertinents lors de l’évaluation | 3 | fess_config.properties |
rag.llm.openai.concurrency.wait.timeout | Timeout d’attente des requêtes simultanées (ms) | 30000 | fess_config.properties |
rag.llm.openai.reasoning.token.multiplier | Multiplicateur de max tokens pour les modèles de raisonnement | 4 | fess_config.properties |
rag.llm.openai.retry.max | Nombre maximum de tentatives HTTP (lors d’erreurs 429 et 5xx) | 10 | fess_config.properties |
rag.llm.openai.retry.base.delay.ms | Délai de base du backoff exponentiel (millisecondes) | 2000 | fess_config.properties |
rag.llm.openai.stream.include.usage | Envoyer stream_options.include_usage=true en streaming et recevoir les informations d’utilisation des tokens dans le dernier chunk | true | fess_config.properties |
rag.llm.openai.history.max.chars | Nombre maximum de caractères pour l’historique de conversation | 8000 | fess_config.properties |
rag.llm.openai.intent.history.max.messages | Nombre maximum de messages d’historique pour la détection d’intention | 8 | fess_config.properties |
rag.llm.openai.intent.history.max.chars | Nombre maximum de caractères d’historique pour la détection d’intention | 4000 | fess_config.properties |
rag.llm.openai.history.assistant.max.chars | Nombre maximum de caractères pour les messages de l’assistant | 800 | fess_config.properties |
rag.llm.openai.history.assistant.summary.max.chars | Nombre maximum de caractères pour le résumé de l’assistant | 800 | fess_config.properties |
rag.llm.openai.chat.evaluation.description.max.chars | Nombre maximum de caractères pour la description de document en évaluation | 500 | fess_config.properties |
rag.chat.enabled | Activation de la fonctionnalité de mode de recherche IA | false | fess_config.properties |
Configuration par type de prompt
Dans Fess, des paramètres individuels peuvent être configurés pour chaque type de prompt. La configuration s’effectue dans fess_config.properties.
Patterns de configuration
La configuration par type de prompt se spécifie selon les patterns suivants :
rag.llm.openai.{promptType}.temperature- Caractère aléatoire de la génération (0.0 à 2.0). Ignoré pour les modèles de raisonnement (série o1/o3/o4/gpt-5)rag.llm.openai.{promptType}.max.tokens- Nombre maximum de tokensrag.llm.openai.{promptType}.context.max.chars- Nombre maximum de caractères du contexte (défaut :16000pour answer/summary,10000pour les autres)
Types de prompt
Types de prompt disponibles :
| Type de prompt | Description |
|---|---|
intent | Prompt pour déterminer l’intention de l’utilisateur |
evaluation | Prompt pour évaluer la pertinence des résultats de recherche |
unclear | Prompt de réponse pour les requêtes peu claires |
noresults | Prompt de réponse lorsqu’il n’y a pas de résultats de recherche |
docnotfound | Prompt de réponse lorsque le document n’est pas trouvé |
answer | Prompt pour générer une réponse |
summary | Prompt pour générer un résumé |
faq | Prompt pour générer une FAQ |
direct | Prompt pour répondre directement |
queryregeneration | Prompt de régénération de requêtes |
Valeurs par défaut
Valeurs par défaut pour chaque type de prompt. La configuration de température est ignorée pour les modèles de raisonnement (série o1/o3/o4/gpt-5).
| Type de prompt | Température | Max Tokens | Remarques |
|---|---|---|---|
intent | 0.1 | 256 | Détection d’intention déterministe |
evaluation | 0.1 | 256 | Évaluation de pertinence déterministe |
unclear | 0.7 | 512 | |
noresults | 0.7 | 512 | |
docnotfound | 0.7 | 256 | |
direct | 0.7 | 1024 | |
faq | 0.7 | 1024 | |
answer | 0.5 | 2048 | Génération de réponse principale |
summary | 0.3 | 2048 | Génération de résumé |
queryregeneration | 0.3 | 256 | Régénération de requêtes |
Exemple de configuration
Comportement de réessai
Les requêtes vers l’API OpenAI sont automatiquement réessayées pour les codes de statut HTTP suivants :
429Too Many Requests (limitation de débit)500Internal Server Error502Bad Gateway (qu’OpenAI peut renvoyer en cas de surcharge en amont)503Service Unavailable504Gateway Timeout
Lors d’un réessai, Fess attend selon un backoff exponentiel (valeur de base rag.llm.openai.retry.base.delay.ms millisecondes, jusqu’à rag.llm.openai.retry.max tentatives, avec une gigue de +/-20%). Si le serveur renvoie un en-tête Retry-After (en secondes entières, plafonné à 600 secondes), cette valeur prend le pas sur le backoff exponentiel. Cela suit les recommandations officielles d’OpenAI.
À noter, les IOException (timeouts de connexion, réinitialisations de socket, échecs DNS) ne sont pas réessayées. Si la requête a pu atteindre le serveur, un réessai pourrait entraîner une double facturation. Pour les requêtes en streaming, seule la connexion initiale est sujette aux réessais ; les erreurs survenant après le début de la réception du corps de la réponse sont propagées immédiatement.
Note
Avec les valeurs par défaut (10 tentatives maximum, base de 2 secondes), le pire cas pour la somme des 9 backoffs est 2 + 4 + 8 + ... + 512 ~= 1022 secondes (environ 17 minutes). Lorsque Retry-After (jusqu’à 600 secondes) est renvoyé à chaque tentative, le pire cas atteint 9 x 600 secondes = 90 minutes. Pour un contrôle plus strict de la latence, réduisez rag.llm.openai.retry.max.
Streaming et informations d’utilisation
Par défaut, stream_options.include_usage=true est ajouté aux requêtes, ce qui permet de recevoir l’objet usage (incluant completion_tokens_details.reasoning_tokens pour les modèles de raisonnement et prompt_tokens_details.cached_tokens lorsque la mise en cache du prompt est utilisée) dans le dernier chunk SSE de la réponse en streaming.
Pour les backends qui n’acceptent pas le champ stream_options.include_usage (par exemple vLLM ou certaines passerelles compatibles Azure OpenAI), désactivez cette option ainsi:
Logs et détection d’anomalies
Le client OpenAI émet les logs structurés suivants. Cela permet de surveiller l’utilisation des tokens et les anomalies de réponse sans activer le niveau DEBUG.
[LLM:OPENAI] Stream completed.(INFO) - émis à la fin d’une réponse en streaming, avec le nombre de chunks, le délai jusqu’au premier chunk et les informations d’utilisation des tokens[LLM:OPENAI] Chat response received.(INFO) - émis à la fin d’une réponse non-streaming, avec des informations équivalentes[LLM:OPENAI] Chat finished abnormally/Stream finished abnormally(WARN) - émis lorsquefinish_reasonest autre questop(length: troncature par max_tokens ;content_filter: modération ;tool_calls/function_call: configuration d’appel d’outil non intentionnelle, etc.)[LLM:OPENAI] Stream refusal.(WARN) - émis lorsquedelta.refusalest renvoyé par une sortie structurée
Ces logs WARN peuvent être exploités pour ajuster max_tokens, auditer le filtre de contenu et détecter une mauvaise configuration de extra_params.
Masquage des informations d’authentification dans les URL des logs
Les URL émises dans les logs voient automatiquement leurs paramètres de requête contenant des informations d’authentification (api_key, apikey, api-key, key, token, access_token, access-token, sans distinction de casse) masqués par ***.
Le point de terminaison officiel OpenAI (https://api.openai.com) s’authentifie via l’en-tête Authorization: Bearer et n’inclut donc pas d’informations d’authentification dans l’URL. Toutefois, si vous configurez rag.llm.openai.api.url vers un proxy personnalisé qui accepte les informations d’authentification en tant que paramètres de requête (certains déploiements Azure, passerelles vLLM, etc.), cela empêche également la fuite de la clé API dans les logs.
Prise en charge des modèles de raisonnement
Lors de l’utilisation de modèles de raisonnement de la série o1/o3/o4 ou de la série gpt-5, Fess utilise automatiquement le paramètre max_completion_tokens de l’API OpenAI à la place de max_tokens. Aucune modification de configuration supplémentaire n’est nécessaire.
Note
Les modèles de raisonnement (série o1/o3/o4/gpt-5) ignorent le paramètre temperature et utilisent une valeur fixe (1). De plus, lors de l’utilisation de modèles de raisonnement, le max_tokens par défaut est multiplié par reasoning.token.multiplier (défaut : 4).
Paramètres supplémentaires pour les modèles de raisonnement
Lors de l’utilisation de modèles de raisonnement, les paramètres supplémentaires suivants peuvent être configurés dans fess_config.properties :
| Propriété | Description | Valeur par défaut |
|---|---|---|
rag.llm.openai.{promptType}.reasoning.effort | Paramètre d’effort de raisonnement pour les modèles de série o (low, medium, high) | low (intent/evaluation/docnotfound/unclear/noresults/queryregeneration), non défini (autres) |
rag.llm.openai.{promptType}.top.p | Seuil de probabilité pour la sélection de tokens (0.0 à 1.0) | (Non défini) |
rag.llm.openai.{promptType}.frequency.penalty | Pénalité de fréquence (-2.0 à 2.0) | (Non défini) |
rag.llm.openai.{promptType}.presence.penalty | Pénalité de présence (-2.0 à 2.0) | (Non défini) |
{promptType} peut être intent, evaluation, answer, summary, etc.
Exemple de configuration
Configuration via options JVM
Pour des raisons de sécurité, il est recommandé de configurer la clé API via l’environnement d’exécution (options JVM) plutôt que via des fichiers versionnés.
Environnement Docker
Le dépôt officiel docker-fess fournit un overlay OpenAI (compose-openai.yaml). Étapes minimales :
Contenu de compose-openai.yaml (référence pour un setup équivalent) :
Notes :
FESS_PLUGINS=fess-llm-openai:15.7.0fait querun.shdu conteneur télécharge et installe automatiquement le plugin dansapp/WEB-INF/plugin/-Dfess.config.rag.chat.enabled=trueactive le mode IA-Dfess.config.rag.llm.openai.api.key=...définit la clé API,-Dfess.config.rag.llm.openai.model=...choisit le modèle-Dfess.system.rag.llm.name=openain’agit que comme valeur par défaut initiale avant qu’une valeur ne soit persistée dans OpenSearch. Après démarrage, le paramètre peut aussi être modifié sous Administration > Système > Général (section RAG)
Si l’accès Internet passe par un proxy, spécifiez la configuration http.proxy.* de Fess via FESS_JAVA_OPTS (voir la section « Utilisation via un proxy HTTP » ci-dessous).
Environnement systemd
Ajouter à FESS_JAVA_OPTS dans /etc/sysconfig/fess (ou /etc/default/fess) :
Utilisation via un proxy HTTP
Le client OpenAI partage la configuration de proxy HTTP commune à Fess. 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 | "" |
Dans un environnement Docker, spécifiez ce qui suit dans FESS_JAVA_OPTS:
Note
Cette configuration s’applique également à tous les accès HTTP de Fess, notamment ceux du crawler. Les propriétés système Java traditionnelles (-Dhttps.proxyHost, etc.) ne sont pas prises en compte par le client OpenAI.
Utilisation d’Azure OpenAI
Pour utiliser les modèles OpenAI via Microsoft Azure, modifiez le point de terminaison API.
Note
Lors de l’utilisation d’Azure OpenAI, le format des requêtes API peut différer légèrement. Consultez la documentation Azure OpenAI pour plus de détails.
Guide de sélection des modèles
Guide pour la sélection du modèle selon l’usage.
| Modèle | Coût | Qualité | Usage |
|---|---|---|---|
gpt-5-mini | Moyen | Élevée | Usage équilibré (recommandé) |
gpt-4o-mini | Bas-Moyen | Élevée | Usage prioritaire au coût |
gpt-5 | Élevé | Maximale | Raisonnement complexe, haute qualité requise |
gpt-4o | Moyen-Élevé | Maximale | Lorsque la prise en charge multimodale est requise |
o3-mini / o4-mini | Moyen | Maximale | Tâches de raisonnement comme les mathématiques et la programmation |
Estimation des coûts
L’API OpenAI est facturée à l’usage.
Note
Pour les derniers prix, consultez OpenAI Pricing.
Contrôle des requêtes simultanées
Dans Fess, le nombre de requêtes simultanées vers l’API OpenAI peut être contrôlé via rag.llm.openai.max.concurrent.requests dans fess_config.properties. La valeur par défaut est 5.
Cette configuration permet d’éviter les requêtes excessives vers l’API OpenAI et de prévenir les erreurs de limitation de débit.
Limites par niveau OpenAI
Les limites varient selon le niveau de votre compte OpenAI :
Free : 3 RPM (requêtes/minute)
Tier 1 : 500 RPM
Tier 2 : 5,000 RPM
Tier 3+ : Limites plus élevées
Ajustez rag.llm.openai.max.concurrent.requests de manière appropriée selon le niveau de votre compte OpenAI.
Dépannage
Erreur d’authentification
Symptôme : Erreur « 401 Unauthorized »
Points à vérifier :
Vérifier si la clé API est correctement configurée
Vérifier si la clé API est valide (vérifier dans le tableau de bord OpenAI)
Vérifier si la clé API a les permissions nécessaires
Erreur de limitation de débit
Symptôme : Erreur « 429 Too Many Requests »
Solution :
Réduire la valeur de
rag.llm.openai.max.concurrent.requests:Mettre à niveau le niveau de votre compte OpenAI
Dépassement de quota
Symptôme : Erreur « You exceeded your current quota »
Solution :
Vérifier l’usage dans le tableau de bord OpenAI
Vérifier les paramètres de facturation et augmenter la limite si nécessaire
Timeout
Symptôme : La requête expire
Solution :
Augmenter le temps de timeout
Envisager un modèle plus rapide (gpt-5-mini, etc.)
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 à OpenAI.
app/WEB-INF/classes/log4j2.xml :
Notes de sécurité
Lors de l’utilisation de l’API OpenAI, faites attention aux points de sécurité suivants.
Confidentialité des données : Le contenu des résultats de recherche est envoyé aux serveurs OpenAI
Gestion des clés API : La fuite de clés peut entraîner une utilisation non autorisée
Conformité : Si les données contiennent des informations confidentielles, vérifiez les politiques de votre organisation
Politique d’utilisation : Respectez les conditions d’utilisation d’OpenAI
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)