Descripción general
Esta página explica cómo configurar el plugin fess-llm-gemini para que Fess pueda usar Google Gemini 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 Google AI (Generative Language API) para ejecutar RAG sobre sus documentos rastreados con modelos Gemini.
Google Gemini es un modelo de lenguaje grande (LLM) de última generación proporcionado por Google. Fess puede implementar la funcionalidad de modo de búsqueda IA con el modelo Gemini utilizando Google AI API (Generative Language API).
Al usar Gemini, es posible generar respuestas de alta calidad aprovechando la última tecnología de IA de Google.
Características principales
Soporte multimodal: Capaz de procesar no solo texto sino también imágenes
Contexto largo: Ventana de contexto larga que puede procesar grandes cantidades de documentos a la vez
Eficiencia de costos: El modelo Flash es rápido y de bajo costo
Integración con Google: Fácil integración con servicios de Google Cloud
Modelos compatibles
Principales modelos disponibles en Gemini:
gemini-3.1-flash-lite-preview- Modelo rápido ligero y de bajo costo (predeterminado)gemini-3-flash-preview- Modelo Flash estándargemini-3.1-pro/gemini-3-pro- Modelos de alto razonamientogemini-2.5-flash- Modelo rápido versión establegemini-2.5-pro- Modelo de alto razonamiento versión estable
Nota
Para la información más reciente sobre modelos disponibles, consulte Google AI for Developers.
Requisitos previos
Antes de usar Gemini, prepare lo siguiente.
Cuenta de Google: Se requiere una cuenta de Google
Acceso a Google AI Studio: Acceda a https://aistudio.google.com/
Clave API: Genere una clave API en Google AI Studio
Obtención de clave API
Acceda a Google AI Studio
Haga clic en «Get API key»
Seleccione «Create API key»
Seleccione o cree un nuevo proyecto
Guarde la clave API generada de forma segura
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 Gemini se proporciona como plugin fess-llm-gemini. Para usar Gemini es necesario instalar el plugin.
Descargue fess-llm-gemini-15.9.0.jar
Colóquelo en el directorio
app/WEB-INF/plugin/de FessReinicie Fess
Nota
La versión del plugin debe coincidir con la versión de Fess.
Configuración básica
La habilitación de la funcionalidad de modo de búsqueda IA y la configuración específica de Gemini se realizan en fess_config.properties, y la selección del proveedor LLM (rag.llm.name) se realiza en la pantalla de administración o en system.properties.
Configuración de fess_config.properties
Agregue la configuración de habilitación de la funcionalidad de modo de búsqueda IA en app/WEB-INF/conf/fess_config.properties.
Configuración del proveedor LLM
La selección del proveedor LLM (rag.llm.name) se configura en la pantalla de administración (Administración > Sistema > General) o en system.properties. La configuración específica de Gemini se realiza en fess_config.properties.
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 Gemini. Todos se configuran en fess_config.properties.
| Propiedad | Descripción | Predeterminado |
|---|---|---|
rag.llm.gemini.api.key | Clave API de Google AI (debe configurarse para usar la API de Gemini) | "" |
rag.llm.gemini.model | Nombre del modelo a usar | gemini-3.1-flash-lite-preview |
rag.llm.gemini.api.url | URL base de la API | https://generativelanguage.googleapis.com/v1beta |
rag.llm.gemini.timeout | Timeout de solicitud (milisegundos) | 60000 |
rag.llm.gemini.availability.check.interval | Intervalo de verificación de disponibilidad (segundos) | 60 |
rag.llm.gemini.max.concurrent.requests | Número máximo de solicitudes simultáneas | 5 |
rag.llm.gemini.chat.evaluation.max.relevant.docs | Número máximo de documentos relevantes en la evaluación | 3 |
rag.llm.gemini.chat.evaluation.description.max.chars | Número máximo de caracteres para la descripción del documento en la evaluación | 500 |
rag.llm.gemini.concurrency.wait.timeout | Tiempo de espera de solicitudes simultáneas (milisegundos) | 30000 |
rag.llm.gemini.history.max.chars | Número máximo de caracteres del historial de chat | 10000 |
rag.llm.gemini.intent.history.max.messages | Número máximo de mensajes del historial para la determinación de intención | 10 |
rag.llm.gemini.intent.history.max.chars | Número máximo de caracteres del historial para la determinación de intención | 5000 |
rag.llm.gemini.history.assistant.max.chars | Número máximo de caracteres del historial del asistente | 1000 |
rag.llm.gemini.history.assistant.summary.max.chars | Número máximo de caracteres del resumen del historial del asistente | 1000 |
rag.llm.gemini.retry.max | Número máximo de reintentos HTTP (en errores 429 y de la familia 5xx) | 10 |
rag.llm.gemini.retry.base.delay.ms | Retardo base del backoff exponencial (milisegundos) | 2000 |
Método de autenticación
La clave API se envía mediante el encabezado HTTP x-goog-api-key (método recomendado por Google). Ya no se añade a la URL como parámetro de consulta ?key=... como anteriormente, por lo que la clave API no queda registrada en los logs de acceso.
Comportamiento de reintentos
Las solicitudes a la API de Gemini se reintentan automáticamente para los siguientes códigos de estado HTTP:
429Resource Exhausted (cuota superada / límite de tasa)500Internal Server Error503Service Unavailable504Gateway Timeout
Durante los reintentos se aplica un backoff exponencial (valor base rag.llm.gemini.retry.base.delay.ms milisegundos, hasta rag.llm.gemini.retry.max intentos, con jitter de +/-20%). 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.
Configuración por tipo de prompt
En Fess, se pueden configurar los parámetros del LLM en detalle por tipo de prompt. La configuración por tipo de prompt se escribe en fess_config.properties.
Formato de configuración
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 documentos |
unclear | Prompt para cuando la pregunta no está clara |
noresults | Prompt para cuando no hay resultados de búsqueda |
docnotfound | Prompt para cuando no se encuentra el documento |
answer | Prompt de generación de respuesta |
summary | Prompt de generación de resumen |
faq | Prompt de generación de FAQ |
direct | Prompt de respuesta directa |
queryregeneration | Prompt de regeneración de consulta |
Valores predeterminados por tipo de prompt
Valores predeterminados para cada tipo de prompt. Estos valores se utilizan cuando no se configuran explícitamente.
| Tipo de prompt | temperature | max.tokens | thinking.budget |
|---|---|---|---|
intent | 0.1 | 512 | 0 |
evaluation | 0.1 | 256 | 0 |
unclear | 0.7 | 512 | 0 |
noresults | 0.7 | 512 | 0 |
docnotfound | 0.7 | 512 | 0 |
direct | 0.7 | 2048 | 0 |
faq | 0.7 | 2048 | 0 |
answer | 0.5 | 8192 | 0 |
summary | 0.3 | 4096 | 0 |
queryregeneration | 0.3 | 256 | 0 |
Ejemplo de configuración
Nota
El valor predeterminado de context.max.chars varía según el tipo de prompt. answer y summary son 16000, faq es 10000, y otros tipos de prompt son 10000.
Soporte de modelo de pensamiento
Gemini soporta modelos de pensamiento (Thinking Model). Al usar un modelo de pensamiento, el modelo ejecuta un proceso de razonamiento interno antes de generar una respuesta, lo que permite generar respuestas con mayor precisión.
El presupuesto de pensamiento se configura por tipo de prompt en fess_config.properties. Fess convierte automáticamente el valor entero (número de tokens) de rag.llm.gemini.{promptType}.thinking.budget al campo de API apropiado en función de la generación del modelo resuelta en el momento de la solicitud.
Mapeo según la generación del modelo
Gemini 2.x (por ejemplo,
gemini-2.5-flash): el valor entero configurado se envía tal cual comothinkingConfig.thinkingBudget. Si se especifica0, el pensamiento se desactiva por completo.Gemini 3.x (por ejemplo,
gemini-3.1-flash-lite-preview): el valor entero se agrupa en los valores enumerados dethinkingConfig.thinkingLevel(MINIMAL/LOW/MEDIUM/HIGH) antes de enviarse.
El mapeo de buckets para Gemini 3.x es el siguiente:
| Valor de presupuesto | thinkingLevel | Notas |
|---|---|---|
<=0 | MINIMAL o LOW | MINIMAL para los modelos Flash / Flash-Lite; LOW para los modelos Pro que no admiten MINIMAL (gemini-3-pro / gemini-3.1-pro) |
<=4096 | MEDIUM | |
>4096 | HIGH |
Nota
Gemini 3.x siempre consume una cantidad fija de tokens de pensamiento en cualquier bucket (incluso con thinkingLevel=MINIMAL puede consumir varios cientos de tokens). Por este motivo, Fess añade automáticamente un margen adicional (1024 tokens) al maxOutputTokens predeterminado cuando se utiliza un modelo Gemini 3.x, evitando el truncado de la respuesta por finishReason=MAX_TOKENS. En Gemini 2.x, thinkingBudget=0 desactiva el pensamiento en sí, por lo que no se añade margen adicional.
Nota
Al configurar un presupuesto de pensamiento mayor, el tiempo de respuesta puede aumentar. Configure un valor apropiado según el uso.
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 Gemini (compose-gemini.yaml). Pasos mínimos:
Contenido de compose-gemini.yaml (referencia para una configuración equivalente):
Notas:
FESS_PLUGINS=fess-llm-gemini: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.gemini.api.key=...define la clave API,-Dfess.config.rag.llm.gemini.model=...selecciona el modelo-Dfess.system.rag.llm.name=geminisolo 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 Gemini 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 Gemini.
Uso a través de Vertex AI
Si está usando Google Cloud Platform, también puede usar Gemini a través de Vertex AI. Al usar Vertex AI, el endpoint de la API y el método de autenticación son diferentes.
Nota
El Fess actual utiliza Google AI API (generativelanguage.googleapis.com). Si se requiere el uso a través de Vertex AI, puede ser necesaria una implementación personalizada.
Guía de selección de modelos
Guía para la selección de modelos según el propósito de uso.
| Modelo | Velocidad | Calidad | Uso |
|---|---|---|---|
gemini-3.1-flash-lite-preview | Rápido | Alta | Ligero y de bajo costo (predeterminado, admite thinkingLevel=MINIMAL) |
gemini-3-flash-preview | Rápido | Máxima | Uso general (admite thinkingLevel=MINIMAL) |
gemini-3.1-pro / gemini-3-pro | Medio | Máxima | Razonamiento complejo (no admite MINIMAL; mínimo LOW) |
gemini-2.5-flash | Rápido | Alta | Versión estable, énfasis en costos |
gemini-2.5-pro | Medio | Alta | Versión estable, contexto largo |
Ventana de contexto
Los modelos Gemini soportan ventanas de contexto muy largas:
Gemini 3 Flash / 2.5 Flash: Hasta 1 millón de tokens
Gemini 3.1 Pro / 2.5 Pro: Hasta 1 millón de tokens (3.1 Pro) / 2 millones de tokens (2.5 Pro)
Aprovechando esta característica, puede incluir más resultados de búsqueda en el contexto.
Estimación de costos
La API de Google AI cobra según el uso (con cuota gratuita disponible).
| Modelo | Entrada (1M caracteres) | Salida (1M caracteres) |
|---|---|---|
| Gemini 3 Flash Preview | $0.50 | $3.00 |
| Gemini 3.1 Pro Preview | $2.00 | $12.00 |
| Gemini 2.5 Flash | $0.075 | $0.30 |
| Gemini 2.5 Pro | $1.25 | $5.00 |
Nota
Para los precios más recientes e información sobre la cuota gratuita, consulte Google AI Pricing.
Control de solicitudes simultáneas
En Fess, se puede controlar el número de solicitudes simultáneas a Gemini. Configure la siguiente propiedad en fess_config.properties.
Esta configuración permite prevenir solicitudes excesivas a la API de Google AI y evitar errores de límite de tasa.
Límites de la cuota gratuita (referencia)
La API de Google AI tiene una cuota gratuita, pero con las siguientes limitaciones:
Solicitudes/minuto: 15 RPM
Tokens/minuto: 1 millón TPM
Solicitudes/día: 1,500 RPD
Se recomienda configurar rag.llm.gemini.max.concurrent.requests a un valor bajo cuando se usa la cuota gratuita.
Solución de problemas
Error de autenticación
Síntoma: Errores relacionados con la clave API
Verificaciones:
Verificar que la clave API esté configurada correctamente
Confirmar que la clave API sea válida en Google AI Studio
Confirmar que la clave API tenga los permisos necesarios
Verificar que la API esté habilitada en el proyecto
Error de límite de tasa
Síntoma: Error «429 Resource has been exhausted»
Solución:
Reducir el número de solicitudes simultáneas en
fess_config.properties:Esperar unos minutos y reintentar
Solicitar aumento de cuota si es necesario
Restricción de región
Síntoma: Error de que el servicio no está disponible
Verificaciones:
La API de Google AI solo está disponible en ciertas regiones. Consulte la documentación de Google para las regiones soportadas.
Timeout
Síntoma: Las solicitudes tienen timeout
Solución:
Extender el tiempo de timeout:
Considerar usar el modelo Flash (más rápido)
Configuración de depuración
Para investigar problemas, puede ajustar el nivel de log de Fess para obtener logs detallados relacionados con Gemini.
app/WEB-INF/classes/log4j2.xml:
Notas de seguridad
Al usar la API de Google AI, 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 Google
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
Términos de uso: Cumpla con los términos de uso y la Política de Uso Aceptable de Google
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)