Discourse AI - Embeddings

:bookmark: Este tema cubre la configuración del módulo Embeddings (Incrustaciones) del plugin Discourse AI. Explica qué son las incrustaciones, cómo se utilizan y cómo configurarlas.

:person_raising_hand: Nivel de usuario requerido: Administrador

Las incrustaciones son un componente crucial del plugin Discourse AI, que habilita funciones como Temas relacionados y Búsqueda por IA. Esta guía te guiará a través de la configuración y el uso de incrustaciones en tu instancia de Discourse.

¿Qué son las Incrustaciones?

Las incrustaciones son representaciones numéricas de texto que capturan el significado semántico. En Discourse, se utilizan para:

  1. Generar temas relacionados al final de las páginas de temas
  2. Habilitar la funcionalidad de búsqueda semántica

Configuración de Incrustaciones

Para clientes alojados

Si eres un cliente alojado, las incrustaciones vienen preconfiguradas. Simplemente puedes habilitar las funciones de IA que dependen de ellas.

Para instancias autohospedadas

Si estás autohospedando, consulta la guía de Discourse AI para autohospedaje para obtener instrucciones detalladas de configuración.

Configuración de Definiciones de Incrustación

Los modelos de incrustación ahora se configuran como Definiciones de Incrustación en la interfaz de usuario de administración. Navega a Admin → plugin AI → pestaña Embeddings (Incrustaciones). Al agregar una nueva definición de incrustación, puedes elegir entre presets (ajustes preestablecidos) preconfigurados o configurar uno manualmente.

Los ajustes preestablecidos disponibles incluyen:

  • text-embedding-3-large (OpenAI)
  • text-embedding-3-small (OpenAI)
  • text-embedding-ada-002 (OpenAI)
  • gemini-embedding-001 (Google)
  • bge-large-en (Hugging Face)
  • bge-m3 (Hugging Face)
  • multilingual-e5-large (Hugging Face)

Cada definición de incrustación incluye: nombre de visualización, proveedor, URL, clave de API (o Secreto de IA), tokenizador, dimensiones, función de distancia, longitud máxima de secuencia y mensajes opcionales de incrustación/búsqueda.

Configuración de incrustaciones

Navega a AdminPluginsDiscourse AI, asegúrate de que la siguiente configuración esté habilitada.

  1. ai embeddings enabled: Activa o desactiva el módulo de incrustaciones
  2. ai embeddings selected model: Selecciona qué definición de incrustación usar para generar incrustaciones

Configuraciones opcionales que se pueden ajustar…

  • AI embeddings generate for pms: Decide si generar incrustaciones para mensajes privados
  • AI embeddings semantic related topics enabled: Habilita o deshabilita la función “Temas relacionados”
  • AI embeddings semantic related topics: El número máximo de temas relacionados a mostrar
  • AI embeddings semantic related include closed topics: Incluir temas cerrados en los resultados de temas relacionados
  • AI embeddings semantic related age penalty: Aplicar una penalización de antigüedad exponencial a los temas en los resultados relacionados (0.0 deshabilita, valores más altos penalizan más a los temas antiguos)
  • AI embeddings semantic related age time scale: Escala de tiempo en días para el cálculo de la penalización por antigüedad (predeterminado: 365)
  • AI embeddings semantic search enabled: Habilitar la búsqueda semántica de página completa
  • AI embeddings semantic quick search enabled: Habilitar la opción de búsqueda semántica en la ventana emergente del menú de búsqueda
  • AI embeddings semantic search use hyde: Habilitar HyDE (Hypothetical Document Embedding - Incrustación de Documento Hipotético) para la búsqueda semántica
  • AI embeddings semantic search hyde agent: El agente de IA utilizado para expandir los términos de búsqueda cuando HyDE está habilitado

Proveedores

Discourse AI admite múltiples proveedores de incrustaciones:

  • OpenAI
  • Google
  • Hugging Face (para modelos de código abierto/pesos abiertos)
  • Cloudflare Workers AI

Para los clientes alojados, Discourse proporciona definiciones de incrustación preconfiguradas (sembradas) que funcionan desde el primer momento.

Funciones

Temas Relacionados

Cuando está habilitada, aparece una sección de “Temas relacionados” en la parte inferior de las páginas de temas, que enlaza con discusiones semánticamente similares.

Búsqueda por IA

Las incrustaciones potencian la opción de búsqueda semántica en la interfaz de búsqueda de página completa.

La búsqueda semántica puede utilizar opcionalmente HyDE (Incrustación de Documento Hipotético). Cuando se habilita a través de ai embeddings semantic search use hyde, el término de búsqueda se expande utilizando el agente de IA configurado en ai embeddings semantic search hyde agent. La búsqueda expandida se convierte luego en un vector y se utiliza para encontrar temas similares. Esta técnica añade algo de latencia a la búsqueda, pero puede mejorar los resultados.

Al seleccionar un agente para HyDE, elige un modelo rápido como Gemini Flash, Claude Haiku, GPT-4o Mini o los modelos más recientes disponibles.

Generación de incrustaciones

Las incrustaciones se generan automáticamente para nuevas publicaciones. Para generar incrustaciones para contenido existente:

  1. Discourse rellenará automáticamente las incrustaciones de temas antiguos a través de un trabajo programado que se ejecuta cada 5 minutos
  2. El relleno procesa los temas en orden de actividad reciente primero

Preguntas frecuentes

P: ¿Cómo se determinan los temas relacionados?
R: Los temas relacionados se basan únicamente en incrustaciones, que incluyen el título, la categoría, las etiquetas y el contenido de las publicaciones.

P: ¿Puedo excluir ciertos temas de los temas relacionados?
R: Sí, hay una configuración del sitio para eliminar temas cerrados de los resultados.

P: ¿Funcionan las incrustaciones para publicaciones históricas?
R: Sí, el sistema rellenará automáticamente las incrustaciones para todo tu contenido.

Recursos adicionales

17 Me gusta

Gran trabajo, gracias ante todo, pero no veo temas similares debajo de los temas, de alguna manera, mi configuración es así, agregué una clave de openai. La búsqueda semántica funciona, pero ¿cómo puedo mostrar artículos similares debajo de los temas?

Si desea utilizar OpenAI para incrustaciones, debe establecer ai embeddings model en text-embedding-ada-002.

3 Me gusta

¿Cómo se programan los trabajos para generar incrustaciones? Por el código, parece que las incrustaciones solo se generan cuando se ve la página y faltan las incrustaciones. ¿Hay alguna forma de generar incrustaciones para todo el sitio al activar la función?

2 Me gusta

También puedes ejecutar rake ai:embeddings:backfill para generar embeddings para todos los temas de forma anticipada.

8 Me gusta

Sugerencia

A veces, al leer un tema, se conoce la mayor parte de los antecedentes señalados, pero también hay algunas menciones que no se conocen. Si bien existe la resumen para resumir un tema completo hasta ese momento, también sería útil una opción de IA que inserte un glosario para el tema como una publicación cerca de la parte superior y lo actualice si un usuario selecciona una palabra o frase que desea que la IA incluya en el glosario.


Hoy, al leer este tema, hubo una referencia que no reconocí, así que la busqué y agregué una respuesta con una referencia para ella. Si bien conozco las referencias restantes, estoy seguro de que hay otras, especialmente para aquellos nuevos en LLM y similares, que no tendrían idea de muchas de las referencias señaladas y si la IA pudiera ayudarlos, visitarían el sitio con mucha más frecuencia.

Si bien sé lo que significa RAG en esta publicación inicial, ¿cuántos realmente lo saben?

¿Qué es RAG (haga clic en el triángulo para expandir)

¿Cómo funcionan los chatbots específicos del dominio? Una descripción general de la generación aumentada por recuperación (RAG)


Nota: No sabía en qué tema publicar esto, pero como necesitaba incrustaciones para funcionar, lo publiqué aquí. Por favor, muévelo si tiene más sentido en otro lugar o a medida que cambie el plugin Discourse AI.

1 me gusta

¿Los embeddings son la única variable al determinar los “Temas Relacionados”? ¿O hay otros factores que se consideran (por ejemplo, autor, puntuación del tema, antigüedad del tema, categoría, etc.)?

3 Me gusta

Solo los embeddings, pero estos contienen el título, la categoría, las etiquetas y las publicaciones. Hay una configuración del sitio para eliminar también los temas cerrados de los resultados.

5 Me gusta

7 publicaciones se dividieron en un nuevo tema: ¿La búsqueda semántica de página completa solo está en inglés?

2 publicaciones se dividieron en un nuevo tema: Diferencias en la latencia de búsqueda entre la búsqueda semántica de IA y la búsqueda por palabras clave

Ojalá hubiera encontrado esto hace unos meses. Ya creé embeddings usando bge-small-en-v1.5 y los alojé en una base de datos externa.

¡Veré si se puede encajar en esta configuración ‘estándar’!

Encuentro un pequeño error en la versión reciente que provoca el fallo de rake ai:embeddings:backfill:

root@nbg-webxj:/var/www/discourse# rake ai:embeddings:backfill
rake aborted!
NameError: uninitialized constant Parallel (NameError)

  Parallel.each(topics.all, in_processes: args[:concurrency].to_i, progress: "Topics") do |t|
  ^^^^^^
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:27:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => ai:embeddings:backfill
(See full trace by running task with --trace)

Sospecho que el culpable es que el gem parallel no está instalado ni en este plugin ni en el core de Discourse (solo encuentro uno en el bloque if ENV["IMPORT"] == "1": gem "parallel", require: false).

Encuentro que el gem ruby-progressbar también es necesario para realizar rake ai:embeddings:backfill.

Hice un PR simple en Github:

2 Me gusta

Nota para otros de que este método rake parece haber sido degradado/semi-obsoleto desde que Falco dijo en GitHub:

Gracias por la PR @fokx, pero las he omitido sin querer, ya que la tarea rake perdió popularidad y solo debe ser utilizada en raras ocasiones por operadores experimentados que pueden instalarlas fácilmente de forma externa.

¿La opción de búsqueda semántica ya no se muestra en ese menú desplegable y en su lugar se comprende o se habilita a través del interruptor de IA?

1 me gusta

¿Puede confirmarme si los embeddings solo funcionarán en las publicaciones después de instalarlos o si también nos permitirán realizar búsquedas semánticas en todas las publicaciones históricas? ¡Espero que sea lo último! Gracias.

1 me gusta

Es lo último, ya que rellenará automáticamente los embeddings de todo tu contenido.

4 Me gusta

No puedo hacer que funcione la configuración de las incrustaciones de IA con Gemini Flash. No encuentro descripciones/ejemplos adecuados de todos los campos de configuración, por lo que es posible que me haya saltado uno o dos importantes. No sé si la configuración de ai_embeddings_model es obligatoria, pero si la establezco en gemini obtengo el siguiente error…

No he podido encontrar la configuración de ai_gemini_api_key. Tengo Gemini Flash configurado como LLM con una clave API y eso funciona en otros lugares, por ejemplo, para la resumen, pero supongo que aquí se quiere introducir la clave API en otro lugar.

Supongo que esto también funcionaría con OpenAI, ¿verdad?

Sería genial si pudiera admitir su API por lotes (50% de descuento)

Sí, pero hoy en día rellenamos automáticamente en segundo plano, así que esto no es obligatorio.

Para las personas conscientes del precio, admitimos excelentes modelos de pesos abiertos que puedes ejecutar en tu propio hardware.

1 me gusta

Gracias. ¿Entiendo correctamente que el backfill es cuando ocurre la vectorización? Al cambiar de modelo, ¿es necesario recalcular los vectores (son “propietarios”)? Supongo que sí.

Sería útil saber cómo se comparan los costos de usar la pila de la API de OpenAI con la inversión en un servidor con GPU y una solución de código abierto. ¿Existe una fórmula o alguna forma de estimar el número de tokens utilizados? Solo estamos usando la API para vectorizar publicaciones, no para calcular distancias vectoriales, ¿verdad? Entonces, el número de tokens utilizados depende de la cantidad de contenido que tenemos, ¿correcto?

Supongo que tanto para temas relacionados como para búsquedas impulsadas por IA, todas las publicaciones solo necesitan ser vectorizadas una vez, por lo que puedo calcular el número total de palabras en la tabla de publicaciones y derivar el número de tokens necesarios. El mismo proceso se aplicaría a la adición diaria de publicaciones. Por ahora, estoy descuidando las frases de búsqueda.