Descripción general
Esta página explica cómo configurar el plugin fess-llm-openai para que Fess pueda usar OpenAI en su modo de búsqueda IA (RAG: Retrieval-Augmented Generation) — respondiendo preguntas en lenguaje natural a partir de su índice de búsqueda empresarial con fuentes citadas. Fess llama a la API de OpenAI para ejecutar RAG sobre sus documentos rastreados con modelos GPT.
OpenAI es un servicio en la nube que proporciona modelos de lenguaje grandes (LLM) de alto rendimiento, comenzando con GPT-4. Fess puede utilizar la API de OpenAI para implementar la funcionalidad de modo de búsqueda IA.
Al usar OpenAI, es posible generar respuestas de alta calidad con modelos de IA de última generación.
Características principales
Respuestas de alta calidad: Generación de respuestas de alta precisión con modelos GPT de última generación
Escalabilidad: Fácil escalado al ser un servicio en la nube
Mejora continua: El rendimiento mejora con actualizaciones periódicas de modelos
Funcionalidad rica: Compatible con diversas tareas como generación de texto, resumen, traducción
Modelos compatibles
Principales modelos disponibles en OpenAI:
gpt-5- Último modelo de alto rendimientogpt-5-mini- Versión ligera de GPT-5 (buena relación costo-rendimiento)gpt-4o- Modelo multimodal de alto rendimientogpt-4o-mini- Versión ligera de GPT-4oo3-mini- Modelo ligero especializado en razonamientoo4-mini- Modelo ligero de próxima generación especializado en razonamiento
Nota
Para la información más reciente sobre modelos disponibles, consulte OpenAI Models.
Nota
Al usar modelos de la serie o1/o3/o4 o de la serie gpt-5, Fess utiliza automáticamente el parámetro max_completion_tokens de la API de OpenAI. No se requieren cambios de configuración.
Requisitos previos
Antes de usar OpenAI, prepare lo siguiente.
Cuenta de OpenAI: Cree una cuenta en https://platform.openai.com/
Clave API: Genere una clave API en el dashboard de OpenAI
Configuración de facturación: Configure la información de facturación ya que el uso de la API genera cargos
Obtención de clave API
Inicie sesión en OpenAI Platform
Navegue a la sección «API keys»
Haga clic en «Create new secret key»
Ingrese un nombre para la clave y créela
Guarde la clave mostrada de forma segura (solo se muestra una vez)
Advertencia
La clave API es información confidencial. Tenga en cuenta lo siguiente:
No la commita en sistemas de control de versiones
No la imprima en logs
Adminístrela con variables de entorno o archivos de configuración seguros
Instalación del plugin
La funcionalidad de integración con OpenAI se proporciona como plugin. Para usarla es necesario instalar el plugin fess-llm-openai.
Descargue fess-llm-openai-15.9.0.jar
Coloque el archivo JAR en el directorio
app/WEB-INF/plugin/del directorio de instalación de Fess:Reinicie Fess
Nota
La versión del plugin debe coincidir con la versión de Fess.
Configuración básica
Los elementos de configuración se dividen en los siguientes dos archivos según su uso.
app/WEB-INF/conf/fess_config.properties- Configuración del núcleo de Fess y configuración específica del proveedor LLMsystem.properties/ Pantalla de administración (Administración > Sistema > General) - Selección del proveedor LLM (rag.llm.name)
Configuración mínima
system.properties (también configurable en Administración > Sistema > General):
app/WEB-INF/conf/fess_config.properties:
Configuración recomendada (entorno de producción)
system.properties (también configurable en Administración > Sistema > General):
app/WEB-INF/conf/fess_config.properties:
Elementos de configuración
Todos los elementos de configuración disponibles para el cliente de OpenAI. Excepto rag.llm.name, todos se configuran en fess_config.properties.
| Propiedad | Descripción | Predeterminado | Lugar de configuración |
|---|---|---|---|
rag.llm.name | Nombre del proveedor LLM (especificar openai) | ollama | system.properties |
rag.llm.openai.api.key | Clave API de OpenAI | (requerido) | fess_config.properties |
rag.llm.openai.model | Nombre del modelo a usar | gpt-5-mini | fess_config.properties |
rag.llm.openai.api.url | URL base de la API | https://api.openai.com/v1 | fess_config.properties |
rag.llm.openai.timeout | Timeout de solicitud (milisegundos) | 120000 | fess_config.properties |
rag.llm.openai.availability.check.interval | Intervalo de verificación de disponibilidad (segundos) | 60 | fess_config.properties |
rag.llm.openai.max.concurrent.requests | Número máximo de solicitudes simultáneas | 5 | fess_config.properties |
rag.llm.openai.chat.evaluation.max.relevant.docs | Número máximo de documentos relevantes en la evaluación | 3 | fess_config.properties |
rag.llm.openai.concurrency.wait.timeout | Timeout de espera de solicitudes simultáneas (ms) | 30000 | fess_config.properties |
rag.llm.openai.reasoning.token.multiplier | Multiplicador de max tokens para modelos de inferencia | 4 | fess_config.properties |
rag.llm.openai.retry.max | Número máximo de reintentos HTTP (en errores 429 y de la familia 5xx) | 10 | fess_config.properties |
rag.llm.openai.retry.base.delay.ms | Retardo base del backoff exponencial (milisegundos) | 2000 | fess_config.properties |
rag.llm.openai.stream.include.usage | Envía stream_options.include_usage=true durante el streaming para recibir la información de tokens utilizados en el chunk final | true | fess_config.properties |
rag.llm.openai.history.max.chars | Máximo de caracteres para historial de conversación | 8000 | fess_config.properties |
rag.llm.openai.intent.history.max.messages | Máximo de mensajes de historial para detección de intención | 8 | fess_config.properties |
rag.llm.openai.intent.history.max.chars | Máximo de caracteres de historial para detección de intención | 4000 | fess_config.properties |
rag.llm.openai.history.assistant.max.chars | Máximo de caracteres para mensajes del asistente | 800 | fess_config.properties |
rag.llm.openai.history.assistant.summary.max.chars | Máximo de caracteres para resumen del asistente | 800 | fess_config.properties |
rag.llm.openai.chat.evaluation.description.max.chars | Máximo de caracteres para descripción de documentos en evaluación | 500 | fess_config.properties |
rag.chat.enabled | Habilitación de la funcionalidad de modo de búsqueda IA | false | fess_config.properties |
Configuración por tipo de prompt
En Fess, se pueden configurar parámetros individuales para cada tipo de prompt. La configuración se realiza en fess_config.properties.
Patrón de configuración
La configuración por tipo de prompt se especifica con el siguiente patrón:
rag.llm.openai.{promptType}.temperature- Aleatoriedad de generación (0.0 a 2.0). Se ignora para modelos de inferencia (serie o1/o3/o4/gpt-5)rag.llm.openai.{promptType}.max.tokens- Número máximo de tokensrag.llm.openai.{promptType}.context.max.chars- Número máximo de caracteres del contexto (predeterminado:16000para answer/summary,10000para otros)
Tipos de prompt
Tipos de prompt disponibles:
| Tipo de prompt | Descripción |
|---|---|
intent | Prompt para determinar la intención del usuario |
evaluation | Prompt para evaluar la relevancia de los resultados de búsqueda |
unclear | Prompt de respuesta para consultas no claras |
noresults | Prompt de respuesta cuando no hay resultados de búsqueda |
docnotfound | Prompt de respuesta cuando no se encuentra el documento |
answer | Prompt para generar respuestas |
summary | Prompt para generar resúmenes |
faq | Prompt para generar FAQ |
direct | Prompt para respuesta directa |
queryregeneration | Prompt de regeneración de consultas |
Valores predeterminados
Valores predeterminados para cada tipo de prompt. La configuración de temperature se ignora para modelos de inferencia (serie o1/o3/o4/gpt-5).
| Tipo de prompt | Temperature | Max Tokens | Notas |
|---|---|---|---|
intent | 0.1 | 256 | Detección de intención determinista |
evaluation | 0.1 | 256 | Evaluación de relevancia determinista |
unclear | 0.7 | 512 | |
noresults | 0.7 | 512 | |
docnotfound | 0.7 | 256 | |
direct | 0.7 | 1024 | |
faq | 0.7 | 1024 | |
answer | 0.5 | 2048 | Generación de respuesta principal |
summary | 0.3 | 2048 | Generación de resumen |
queryregeneration | 0.3 | 256 | Regeneración de consultas |
Ejemplo de configuración
Comportamiento de reintentos
Las solicitudes a la API de OpenAI se reintentan automáticamente para los siguientes códigos de estado HTTP:
429Too Many Requests (límite de tasa)500Internal Server Error502Bad Gateway (OpenAI puede devolverlo cuando el upstream está sobrecargado)503Service Unavailable504Gateway Timeout
Durante los reintentos se aplica un backoff exponencial (valor base rag.llm.openai.retry.base.delay.ms milisegundos, hasta rag.llm.openai.retry.max intentos, con jitter de +/-20%). Si el servidor devuelve un encabezado Retry-After (segundos enteros, limitado a 600 segundos como máximo), ese valor tiene prioridad sobre el backoff exponencial. Esto sigue la guía oficial de OpenAI.
Tenga en cuenta que las IOException (timeouts de conexión, reset de socket, fallos de DNS) no se reintentan, ya que la solicitud podría haber llegado al servidor y un reintento podría provocar un cobro doble. En las solicitudes de streaming, solo la conexión inicial es objeto de reintentos; los errores que ocurren después de comenzar a recibir el cuerpo de la respuesta se propagan inmediatamente.
Nota
Con la configuración predeterminada (máximo 10 intentos, base 2 segundos), en el peor caso la suma de los 9 backoffs es 2 + 4 + 8 + ... + 512 = aproximadamente 1022 segundos (aproximadamente 17 minutos). Si Retry-After (máximo 600 segundos) se devuelve en cada intento, el peor caso puede llegar a 9 x 600 segundos = 90 minutos. Si desea controlar la latencia de forma más estricta, reduzca rag.llm.openai.retry.max.
Streaming e información de uso
Por defecto, se incluye stream_options.include_usage=true en las solicitudes y, en el chunk SSE final de la respuesta de streaming, se recibe el objeto usage (que incluye completion_tokens_details.reasoning_tokens para los modelos de inferencia y prompt_tokens_details.cached_tokens cuando se utiliza la caché de prompts).
Si utiliza un backend que no admite el campo stream_options.include_usage (como vLLM o gateways compatibles con Azure OpenAI), desactívelo de la siguiente forma:
Salida de logs y detección de anomalías
El cliente de OpenAI emite los siguientes logs estructurados, que permiten supervisar el uso de tokens y las anomalías de respuesta sin necesidad de habilitar el nivel DEBUG.
[LLM:OPENAI] Stream completed.(INFO) - Al finalizar la respuesta de streaming, emite el número de chunks, el tiempo hasta el primer chunk y la información de uso de tokens[LLM:OPENAI] Chat response received.(INFO) - Al finalizar la respuesta no-streaming, emite información equivalente[LLM:OPENAI] Chat finished abnormally/Stream finished abnormally(WARN) - Cuandofinish_reasones distinto destop(length: truncado por max_tokens,content_filter: moderación,tool_calls/function_call: invocación de herramientas no esperada por configuración errónea, etc.)[LLM:OPENAI] Stream refusal.(WARN) - Cuando se devuelvedelta.refusalcon salida estructurada
Estos logs WARN pueden utilizarse para ajustar max_tokens, auditar filtros de contenido y detectar configuraciones incorrectas de extra_params.
Enmascaramiento de credenciales en URLs registradas
Las URLs emitidas en los logs se enmascaran automáticamente sustituyendo por *** los parámetros de consulta que contienen credenciales (api_key, apikey, api-key, key, token, access_token, access-token; sin distinguir mayúsculas y minúsculas).
El endpoint oficial de OpenAI (https://api.openai.com) se autentica mediante el encabezado Authorization: Bearer, por lo que la URL no contiene credenciales. No obstante, este enmascaramiento evita que la clave API se filtre en los logs incluso cuando rag.llm.openai.api.url apunta a un proxy personalizado que acepta credenciales como parámetro de consulta (algunas implementaciones de Azure, gateways vLLM, etc.).
Soporte de modelos de inferencia
Cuando se usan modelos de inferencia de las series o1/o3/o4 o de la serie gpt-5, Fess utiliza automáticamente el parámetro max_completion_tokens de la API de OpenAI en lugar de max_tokens. No se requieren cambios adicionales de configuración.
Nota
Los modelos de inferencia (serie o1/o3/o4/gpt-5) ignoran la configuración de temperature y usan un valor fijo (1). Además, al usar modelos de inferencia, el max_tokens predeterminado se multiplica por reasoning.token.multiplier (predeterminado: 4).
Parámetros adicionales para modelos de inferencia
Al usar modelos de inferencia, se pueden configurar los siguientes parámetros adicionales en fess_config.properties:
| Propiedad | Descripción | Predeterminado |
|---|---|---|
rag.llm.openai.{promptType}.reasoning.effort | Configuración de reasoning effort para modelos serie o (low, medium, high) | low (intent/evaluation/docnotfound/unclear/noresults/queryregeneration), no configurado (otros) |
rag.llm.openai.{promptType}.top.p | Umbral de probabilidad para la selección de tokens (0.0 a 1.0) | (no configurado) |
rag.llm.openai.{promptType}.frequency.penalty | Penalización de frecuencia (-2.0 a 2.0) | (no configurado) |
rag.llm.openai.{promptType}.presence.penalty | Penalización de presencia (-2.0 a 2.0) | (no configurado) |
{promptType} puede ser intent, evaluation, answer, summary, etc.
Ejemplo de configuración
Configuración vía opciones JVM
Por razones de seguridad, se recomienda configurar las claves de API a través del entorno de ejecución (opciones JVM) en lugar de archivos versionados.
Entorno Docker
El repositorio oficial docker-fess incluye un overlay OpenAI (compose-openai.yaml). Pasos mínimos:
Contenido de compose-openai.yaml (referencia para una configuración equivalente):
Notas:
FESS_PLUGINS=fess-llm-openai:15.9.0hace que elrun.shdel contenedor descargue e instale automáticamente el plugin enapp/WEB-INF/plugin/-Dfess.config.rag.chat.enabled=truehabilita el modo IA-Dfess.config.rag.llm.openai.api.key=...define la clave API,-Dfess.config.rag.llm.openai.model=...selecciona el modelo-Dfess.system.rag.llm.name=openaisolo actúa como valor inicial por defecto antes de que se persista un valor en OpenSearch. Después del inicio el ajuste también puede modificarse desde Administración > Sistema > General (sección RAG)
Si el acceso a Internet pasa por un proxy, especifique la configuración http.proxy.* de Fess a través de FESS_JAVA_OPTS (consulte la sección «Uso a través de proxy HTTP» más adelante).
Entorno systemd
Agregue a FESS_JAVA_OPTS en /etc/sysconfig/fess (o /etc/default/fess):
Uso a través de proxy HTTP
El cliente de OpenAI comparte la configuración de proxy HTTP común de Fess. Especifique las siguientes propiedades en fess_config.properties.
| Propiedad | Descripción | Predeterminado |
|---|---|---|
http.proxy.host | Nombre del host del proxy (si está vacío, no se usa proxy) | "" |
http.proxy.port | Número de puerto del proxy | 8080 |
http.proxy.username | Nombre de usuario para autenticación del proxy (opcional; al especificarlo se habilita la autenticación Basic) | "" |
http.proxy.password | Contraseña para autenticación del proxy | "" |
En entornos Docker, especifique en FESS_JAVA_OPTS de la siguiente forma:
Nota
Esta configuración también afecta el acceso HTTP de todo Fess, incluido el crawler. Las propiedades de sistema Java tradicionales (como -Dhttps.proxyHost) no son consultadas por el cliente de OpenAI.
Uso de Azure OpenAI
Para usar modelos de OpenAI a través de Microsoft Azure, cambie el endpoint de la API.
Nota
Al usar Azure OpenAI, el formato de solicitud de la API puede diferir ligeramente. Consulte la documentación de Azure OpenAI para más detalles.
Guía de selección de modelos
Guía para la selección de modelos según el propósito de uso.
| Modelo | Costo | Calidad | Uso |
|---|---|---|---|
gpt-5-mini | Medio | Alta | Uso equilibrado (recomendado) |
gpt-4o-mini | Bajo-Medio | Alta | Uso con prioridad en costos |
gpt-5 | Alto | Máxima | Razonamiento complejo, cuando se requiere alta calidad |
gpt-4o | Medio-Alto | Máxima | Cuando se requiere soporte multimodal |
o3-mini / o4-mini | Medio | Máxima | Tareas de razonamiento como matemáticas y programación |
Estimación de costos
La API de OpenAI cobra según el uso.
Nota
Para los precios más recientes, consulte OpenAI Pricing.
Control de solicitudes simultáneas
En Fess, el número de solicitudes simultáneas a la API de OpenAI se puede controlar con rag.llm.openai.max.concurrent.requests en fess_config.properties. El valor predeterminado es 5.
Esta configuración permite prevenir solicitudes excesivas a la API de OpenAI y evitar errores de límite de tasa.
Límites por nivel de OpenAI
Los límites del lado de la API varían según el nivel de la cuenta de OpenAI:
Free: 3 RPM (solicitudes/minuto)
Tier 1: 500 RPM
Tier 2: 5,000 RPM
Tier 3+: Límites aún mayores
Ajuste rag.llm.openai.max.concurrent.requests apropiadamente según el nivel de la cuenta de OpenAI.
Solución de problemas
Error de autenticación
Síntoma: Error «401 Unauthorized»
Verificaciones:
Verificar que la clave API esté configurada correctamente
Confirmar que la clave API sea válida (verificar en el dashboard de OpenAI)
Confirmar que la clave API tenga los permisos necesarios
Error de límite de tasa
Síntoma: Error «429 Too Many Requests»
Solución:
Reducir el valor de
rag.llm.openai.max.concurrent.requests:Actualizar el nivel de la cuenta de OpenAI
Cuota excedida
Síntoma: Error «You exceeded your current quota»
Solución:
Verificar el uso en el dashboard de OpenAI
Revisar la configuración de facturación y aumentar el límite si es necesario
Timeout
Síntoma: Las solicitudes tienen timeout
Solución:
Extender el tiempo de timeout:
Considerar usar un modelo más rápido (como gpt-5-mini)
Configuración de depuración
Para investigar problemas, puede ajustar el nivel de log de Fess para obtener logs detallados relacionados con OpenAI.
app/WEB-INF/classes/log4j2.xml:
Notas de seguridad
Al usar la API de OpenAI, tenga en cuenta los siguientes aspectos de seguridad.
Privacidad de datos: El contenido de los resultados de búsqueda se envía a los servidores de OpenAI
Gestión de claves API: La filtración de claves puede llevar a uso no autorizado
Cumplimiento: Si incluye datos confidenciales, verifique las políticas de su organización
Política de uso: Cumpla con los términos de servicio de OpenAI
Información de referencia
Descripción general de la búsqueda IA (RAG) y la integración LLM - Descripción general de integración LLM
Configuración de la funcionalidad de modo de búsqueda IA - Detalles de la funcionalidad de modo de búsqueda IA
Búsqueda Híbrida y Rank Fusion (Semántica + Palabras Clave) - Búsqueda híbrida: combina búsqueda por palabras clave y búsqueda semántica (vectorial)
Modo de búsqueda IA - Uso del modo de búsqueda IA (guía para el usuario final)