Discourse AI - Embeddings

:bookmark: Este tema cubre la configuración del módulo Embeddings del plugin Discourse AI. Explica qué son los embeddings, cómo se utilizan y cómo configurarlos.

:person_raising_hand: Nivel de usuario requerido: Administrador

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

¿Qué son los Embeddings?

Los embeddings 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 Embeddings

Para clientes alojados

Si eres un cliente alojado, los embeddings vienen preconfigurados. Simplemente puedes habilitar las funciones de IA que dependen de ellos.

Para instancias autohospedadas

Si autohospedas, consulta la Guía de Discourse AI autohospedada para obtener instrucciones detalladas de configuración.

Configuración de embeddings

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

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

Configuraciones opcionales que se pueden ajustar…

  • AI embeddings generate for pms: Decide si generar embeddings 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: Inclusión de temas cerrados en los resultados de búsqueda de IA.
  • AI embeddings semantic search enabled: Habilita la búsqueda de IA a página completa.
  • AI embeddings semantic search hyde model: Modelo utilizado para expandir palabras clave y obtener mejores resultados durante una búsqueda semántica.

Proveedores

Dentro de la configuración de administrador, navega a la pestaña AI plugin → Embeddings para configurar cualquier configuración relacionada con el proveedor, como las claves API.

Discourse AI admite múltiples proveedores de Embeddings:

  • Embeddings alojados por Discourse (recomendado y por defecto)
  • OpenAI
  • Google
  • Modelos de código abierto a través de Hugging Face
  • Opciones personalizadas

Funcionalidades

Temas Relacionados

Cuando está habilitada, aparece una sección de “Temas Relacionados” al final de las páginas de temas, enlazando a discusiones semánticamente similares.

Búsqueda con IA

Los embeddings potencian la opción de búsqueda semántica en la interfaz de búsqueda a página completa.

La búsqueda semántica se basa en HyDE (Hypothetical Document Embedding). Expandimos el término de búsqueda utilizando un modelo de lenguaje grande que proporciones. Una vez expandido, convertimos la búsqueda expandida a un vector y buscamos temas similares. Esta técnica añade cierta latencia a la búsqueda y mejora los resultados.

Al seleccionar un modelo para hyde a través de ai embeddings semantic search hyde model, asegúrate de elegir un modelo rápido como Gemini Flash, Claude Haiku, GPT4o Mini o los modelos más recientes disponibles.

Generación de embeddings

Los embeddings se generan automáticamente para nuevas publicaciones. Para generar embeddings para contenido existente:

  1. Los embeddings se crean cuando se visualiza una página si faltan.
  2. Discourse rellenará automáticamente los embeddings para temas más antiguos.

Preguntas Frecuentes

P: ¿Cómo se determinan los temas relacionados?
R: Los temas relacionados se basan únicamente en embeddings, 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: ¿Los embeddings funcionan para publicaciones históricas?
R: Sí, el sistema rellenará automáticamente los embeddings 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.