Ce sujet couvre la configuration du module Embeddings du plugin Discourse AI. Il explique ce que sont les embeddings, comment ils sont utilisés et comment les configurer.
Niveau d’utilisateur requis : Administrateur
Les embeddings sont un composant crucial du plugin Discourse AI, permettant des fonctionnalités telles que les Sujets similaires et la Recherche IA. Ce guide vous guidera dans la configuration et l’utilisation des embeddings dans votre instance Discourse.
Que sont les Embeddings ?
Les embeddings sont des représentations numériques de texte qui capturent le sens sémantique. Dans Discourse, ils sont utilisés pour :
- Générer des sujets connexes en bas des pages de sujets
- Activer la fonctionnalité de recherche sémantique
Configuration des Embeddings
Pour les clients hébergés
Si vous êtes un client hébergé, les embeddings sont préconfigurés. 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, consultez le Guide d’auto-hébergement de Discourse AI pour des instructions de configuration détaillées.
Configuration des embeddings
Naviguez vers
Admin→Paramètres→Discourse AI, assurez-vous que les paramètres suivants sont activés.
- ai embeddings enabled : Activez ou désactivez le module d’embeddings
- ai embeddings selected model : Sélectionnez le modèle à utiliser pour générer les embeddings
Paramètres optionnels qui peuvent être ajustés…
- AI embeddings generate for pms : Décidez si vous souhaitez générer des embeddings pour les messages privés
- AI embeddings semantic related topics enabled : Activez ou désactivez la fonctionnalité « Sujets connexes »
- AI embeddings semantic related topics : Le nombre maximum de sujets connexes à afficher
- AI embeddings semantic related include closed topics : Inclusion des sujets fermés dans les résultats de recherche IA
- AI embeddings semantic search enabled : Activez la recherche IA pleine page
- AI embeddings semantic search hyde model : Modèle utilisé pour développer les mots-clés afin d’obtenir de meilleurs résultats lors d’une recherche sémantique
Fournisseurs
Dans les paramètres d’administration, naviguez vers l’onglet
AIdu plugin →Embeddingspour configurer tous les paramètres liés au fournisseur, tels que les clés API.Discourse AI prend en charge plusieurs fournisseurs d’Embeddings :
- Embeddings hébergés par Discourse (recommandé et par défaut)
- OpenAI
- Modèles open source via Hugging Face
- Options personnalisées
Fonctionnalités
Sujets connexes
Lorsqu’elle est activée, une section « Sujets connexes » apparaît en bas des pages de sujets, renvoyant à des discussions sémantiquement similaires.
Recherche IA
Les embeddings alimentent l’option de recherche sémantique dans l’interface de recherche pleine page.
La recherche sémantique s’appuie sur HyDE (Hypothetical Document Embedding). Nous développons le terme de recherche à l’aide d’un grand modèle linguistique que vous fournissez. Une fois développé, nous convertissons la recherche développée en vecteur et recherchons des sujets similaires. Cette technique ajoute une certaine latence à la recherche et améliore les résultats.
Lors de la sélection d’un modèle pour hyde via
ai embeddings semantic search hyde model, assurez-vous de choisir un modèle rapide comme Gemini Flash, Claude Haiku, GPT4o Mini ou les derniers modèles disponibles.Génération des embeddings
Les embeddings sont générés automatiquement pour les nouveaux messages. Pour générer des embeddings pour le contenu existant :
- Les embeddings sont créés lorsqu’une page est consultée s’ils sont manquants
- Discourse remplira automatiquement les embeddings pour les anciens sujets.
FAQ
Q : Comment les sujets connexes sont-ils déterminés ?
R : Les sujets connexes sont basés uniquement sur les embeddings, qui incluent le titre, la catégorie, les tags et le contenu des messages.Q : Puis-je exclure certains sujets des sujets connexes ?
R : Oui, il existe un paramètre de site pour supprimer les sujets fermés des résultats.Q : Les embeddings fonctionnent-ils pour les messages historiques ?
R : Oui, le système remplira automatiquement les embeddings pour tout votre contenu.Ressources supplémentaires
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.
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é ?
Vous pouvez également exécuter rake ai:embeddings:backfill pour générer des embeddings pour tous les sujets de manière proactive.
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)
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.
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.) ?
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.
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 :
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 ?
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.
C’est plus tard, car il remplira automatiquement les intégrations pour tout votre contenu.
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.
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.




