Discourse AI - Embeddings

:bookmark: Ce sujet couvre la configuration du module d’Intégrations (Embeddings) du plugin Discourse AI. Il explique ce que sont les intégrations, comment elles sont utilisées et comment les configurer.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur

Les intégrations sont un composant crucial du plugin Discourse AI, permettant des fonctionnalités telles que les Sujets similaires et la Recherche par IA. Ce guide vous guidera à travers la configuration et l’utilisation des intégrations dans votre instance Discourse.

Que sont les intégrations (Embeddings) ?

Les intégrations sont des représentations numériques du texte qui capturent la signification sémantique. Dans Discourse, elles sont utilisées pour :

  1. Générer des sujets similaires au bas des pages de sujets
  2. Activer la fonctionnalité de recherche sémantique

Configuration des intégrations

Pour les clients hébergés

Si vous êtes un client hébergé, les intégrations sont préconfigurées. Vous pouvez simplement activer les fonctionnalités d’IA qui en dépendent.

Pour les instances auto-hébergées

Si vous auto-hébergez, veuillez consulter le guide d’auto-hébergement de Discourse AI pour des instructions de configuration détaillées.

Configuration des définitions d’intégration

Les modèles d’intégration sont désormais configurés comme des Définitions d’intégration dans l’interface d’administration. Naviguez vers Admin → Plugin AI → Onglet Embeddings. Lors de l’ajout d’une nouvelle définition d’intégration, vous pouvez choisir parmi des préréglages préconfigurés ou en configurer une manuellement.

Les préréglages disponibles incluent :

  • 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)

Chaque définition d’intégration comprend : le nom d’affichage, le fournisseur, l’URL, la clé API (ou Secret IA), le tokenizer, les dimensions, la fonction de distance, la longueur maximale de la séquence et les invites d’intégration/recherche optionnelles.

Configuration des intégrations

Naviguez vers AdminPluginsDiscourse AI, assurez-vous que les paramètres suivants sont activés.

  1. ai embeddings enabled : Active ou désactive le module d’intégrations
  2. ai embeddings selected model : Sélectionnez la définition d’intégration à utiliser pour la génération des intégrations

Paramètres optionnels qui peuvent être ajustés…

  • AI embeddings generate for pms : Décidez si vous souhaitez générer des intégrations pour les messages privés
  • AI embeddings semantic related topics enabled : Active ou désactive la fonctionnalité « Sujets similaires »
  • AI embeddings semantic related topics : Le nombre maximum de sujets similaires à afficher
  • AI embeddings semantic related include closed topics : Inclure les sujets fermés dans les résultats des sujets similaires
  • AI embeddings semantic related age penalty : Applique une pénalité d’âge exponentielle aux sujets dans les résultats similaires (0.0 désactive, les valeurs plus élevées pénalisent davantage les sujets plus anciens)
  • AI embeddings semantic related age time scale : Échelle de temps en jours pour le calcul de la pénalité d’âge (par défaut : 365)
  • AI embeddings semantic search enabled : Active la recherche IA en page complète
  • AI embeddings semantic quick search enabled : Active l’option de recherche sémantique dans la fenêtre contextuelle du menu de recherche
  • AI embeddings semantic search use hyde : Active HyDE (Hypothetical Document Embedding) pour la recherche sémantique
  • AI embeddings semantic search hyde agent : L’agent IA utilisé pour développer les termes de recherche lorsque HyDE est activé

Fournisseurs

Discourse AI prend en charge plusieurs fournisseurs d’intégrations :

  • OpenAI
  • Google
  • Hugging Face (pour les modèles open source/poids ouverts)
  • Cloudflare Workers AI

Pour les clients hébergés, Discourse fournit des définitions d’intégration préconfigurées (ensemencées) qui fonctionnent immédiatement.

Fonctionnalités

Sujets Similaires

Lorsqu’elle est activée, une section « Sujets similaires » apparaît au bas des pages de sujets, liant à des discussions sémantiquement similaires.

Recherche par IA

Les intégrations alimentent l’option de recherche sémantique sur l’interface de recherche en page complète.

La recherche sémantique peut éventuellement utiliser HyDE (Hypothetical Document Embedding). Lorsqu’il est activé via ai embeddings semantic search use hyde, le terme de recherche est développé à l’aide de l’agent IA configuré dans ai embeddings semantic search hyde agent. La recherche développée est ensuite convertie en un vecteur et utilisée pour trouver des sujets similaires. Cette technique ajoute une certaine latence à la recherche mais peut améliorer les résultats.

Lors de la sélection d’un agent pour HyDE, choisissez un modèle rapide comme Gemini Flash, Claude Haiku, GPT-4o Mini, ou les derniers modèles disponibles.

Génération des intégrations

Les intégrations sont générées automatiquement pour les nouveaux messages. Pour générer des intégrations pour le contenu existant :

  1. Discourse remplira automatiquement les intégrations pour les sujets plus anciens via un travail programmé qui s’exécute toutes les 5 minutes
  2. Le remplissage traite les sujets par ordre d’activité récente en premier

FAQ

Q : Comment les sujets similaires sont-ils déterminés ?
R : Les sujets similaires sont basés uniquement sur les intégrations, qui comprennent le titre, la catégorie, les étiquettes et le contenu des messages.

Q : Puis-je exclure certains sujets des sujets similaires ?
R : Oui, il existe un paramètre de site pour supprimer les sujets fermés des résultats.

Q : Les intégrations fonctionnent-elles pour les messages historiques ?
R : Oui, le système remplira automatiquement les intégrations pour tout votre contenu.

Ressources supplémentaires

17 « J'aime »

Excellent travail, merci tout d’abord, mais je ne vois pas de sujets similaires sous les sujets, d’une manière ou d’une autre, mes paramètres sont comme ceci, j’ai ajouté une clé openai. La recherche sémantique fonctionne, mais comment puis-je afficher des articles similaires sous les sujets ?

Si vous souhaitez utiliser OpenAI pour les embeddings, vous devez définir ai embeddings model sur text-embedding-ada-002.

3 « J'aime »

Comment les tâches de génération d’incorporations sont-elles planifiées ? D’après le code, il semble que les incorporations ne soient générées que lorsque la page est consultée et que les incorporations sont manquantes. Existe-t-il un moyen de générer des incorporations pour l’ensemble du site lors de l’activation de la fonctionnalité ?

2 « J'aime »

Vous pouvez également exécuter rake ai:embeddings:backfill pour générer des embeddings pour tous les sujets de manière proactive.

8 « J'aime »

Suggestion

Parfois, en lisant un sujet, on connaît la plupart des antécédents notés, mais il y a aussi des mentions inconnues. Bien qu’il existe une fonction de résumé pour résumer un sujet entier jusqu’à ce point, une option d’IA qui insère un glossaire pour le sujet en tant que publication près du début et le met à jour si un utilisateur sélectionne un mot ou une phrase qu’il souhaite inclure dans le glossaire serait également utile.


Aujourd’hui, en lisant ce sujet, j’ai rencontré une référence que je ne connaissais pas, je l’ai donc recherchée et j’ai ajouté une réponse avec une référence pour celle-ci. Bien que je connaisse les autres références, je suis sûr qu’il y en a d’autres, en particulier pour ceux qui sont nouveaux dans les LLM et autres, qui ne connaîtraient pas bon nombre des références notées, et si l’IA pouvait les aider, ils visiteraient le site beaucoup plus souvent.

Bien que je sache ce que signifie RAG dans ce post de départ, combien le savent vraiment ?

Qu'est-ce que RAG (cliquez sur le triangle pour développer)

Comment fonctionnent les chatbots spécifiques à un domaine ? Un aperçu de la génération augmentée par récupération (RAG)


Remarque : Je ne savais pas dans quel sujet poster ceci, mais comme cela nécessitait des embeddings pour fonctionner, je l’ai posté ici. Veuillez déplacer ceci si cela a plus de sens ailleurs ou à mesure que le plugin Discourse AI évolue.

1 « J'aime »

Les plongements sont-ils la seule variable pour déterminer les « Sujets Connexes » ? Ou y a-t-il d’autres facteurs pris en compte (par exemple, auteur, score du sujet, âge du sujet, catégorie, etc.) ?

3 « J'aime »

Seuls les embeddings, mais ceux-ci contiennent le titre, la catégorie, les tags et les publications. Il existe un paramètre de site pour supprimer également les sujets fermés des résultats.

5 « J'aime »

7 messages ont été déplacées vers un nouveau sujet : La recherche sémantique pleine page est-elle uniquement en anglais ?

2 messages ont été déplacées vers un nouveau sujet : Différences de latence de recherche entre la recherche sémantique IA et la recherche par mots-clés

J’aurais aimé trouver cela il y a quelques mois. J’ai déjà créé des embeddings en utilisant bge-small-en-v1.5 et je les ai hébergés dans une base de données externe.

Je vais voir si cela peut être intégré de force dans cette configuration « standard » !

Je trouve un petit bug dans la version récente qui entraîne l’échec 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)

Je soupçonne que le coupable est que le gem parallel n’est ni installé dans ce plugin, ni dans le core de Discourse (je n’en trouve qu’un dans le bloc if ENV[\"IMPORT\"] == \"1\" : gem "parallel", require: false).

Je trouve que le gem ruby-progressbar est également requis pour effectuer rake ai:embeddings:backfill.

J’ai fait une simple PR sur Github :

2 « J'aime »

Note à l’attention des autres que cette méthode rake semble avoir été rétrogradée/semi-obsolète comme l’a indiqué Falco sur GitHub :

Merci pour la PR @fokx, mais je les ai laissées de côté involontairement car la tâche rake est tombée en désuétude et ne devrait être utilisée que dans de rares occasions par des opérateurs expérimentés qui peuvent facilement les installer en dehors de la bande.

L’option de recherche sémantique n’est-elle plus affichée dans cette liste déroulante et est-elle plutôt comprise ou activée via le commutateur d’IA ?

1 « J'aime »

Pouvez-vous me confirmer si les embeddings ne fonctionneront qu’après l’installation ou s’ils permettront également de rechercher sémantiquement tous les messages historiques ? J’espère que ce dernier cas ! Merci.

1 « J'aime »

C’est plus tard, car il remplira automatiquement les intégrations pour tout votre contenu.

4 « J'aime »

J’essaie de configurer les intégrations d’IA avec Gemini Flash, mais je n’y arrive pas. Je ne trouve pas de descriptions/exemples clairs de tous les champs de paramètres, j’ai donc peut-être manqué un ou deux éléments importants. Je ne sais pas si le paramètre ai_embeddings_model est obligatoire, mais si je le définis sur gemini, j’obtiens l’erreur suivante…

Je n’ai pas réussi à trouver le paramètre ai_gemini_api_key. J’ai Gemini Flash configuré comme LLM avec une clé API et cela fonctionne ailleurs, par exemple pour la résumé, mais je suppose que cela demande la clé API saisie ailleurs ?

Je suppose que cela fonctionnerait aussi avec OpenAI, n’est-ce pas ?

Ce serait formidable si cela pouvait prendre en charge leur API Batch (réduction de 50 %)

Oui, mais de nos jours, nous effectuons un remplissage a posteriori automatique en arrière-plan, donc ce n’est pas obligatoire.

Pour les personnes soucieuses des prix, nous prenons en charge d’excellents modèles à poids ouverts que vous pouvez exécuter sur votre propre matériel.

1 « J'aime »

Merci. Est-ce que je comprends bien que le « backfill » correspond à la vectorisation ? Lors du passage d’un modèle à l’autre, les vecteurs doivent-ils être recalculés (sont-ils « propriétaires ») ? Je suppose que oui.

Il serait utile de savoir comment les coûts d’utilisation de la pile d’API OpenAI se comparent à l’investissement dans un serveur à GPU avec une solution open-source. Existe-t-il une formule ou un moyen d’estimer le nombre de jetons utilisés ? Nous utilisons uniquement l’API pour vectoriser les publications, pas pour calculer les distances vectorielles, n’est-ce pas ? Le nombre de jetons utilisés dépend donc de la quantité de contenu que nous avons, c’est exact ?

Je suppose que pour les deux sujets connexes et la recherche assistée par l’IA, toutes les publications doivent être vectorisées une seule fois, je peux donc calculer le nombre total de mots dans la table des publications et en déduire le nombre de jetons nécessaires. Le même processus s’appliquerait à l’ajout quotidien de publications. Je néglige les phrases de recherche pour l’instant.