Discourse AI - Einbettungen

:bookmark: Dieses Thema behandelt die Konfiguration des Embeddings-Moduls des Discourse AI Plugins. Es erklärt, was Embeddings sind, wie sie verwendet werden und wie man sie einrichtet.

:person_raising_hand: Erforderliches Benutzerniveau: Administrator

Embeddings sind eine entscheidende Komponente des Discourse AI Plugins, die Funktionen wie Verwandte Themen und KI-Suche ermöglichen. Diese Anleitung führt Sie durch die Einrichtung und Verwendung von Embeddings in Ihrer Discourse-Instanz.

Was sind Embeddings?

Embeddings sind numerische Darstellungen von Text, die die semantische Bedeutung erfassen. In Discourse werden sie verwendet, um:

  1. Verwandte Themen am Ende von Themenseiten zu generieren
  2. Semantische Suchfunktionen zu ermöglichen

Einrichtung von Embeddings

Für gehostete Kunden

Wenn Sie ein gehosteter Kunde sind, sind Embeddings vorkonfiguriert. Sie können einfach die KI-Funktionen aktivieren, die darauf basieren.

Für selbst gehostete Instanzen

Wenn Sie selbst hosten, lesen Sie bitte den Leitfaden für selbst gehostetes Discourse AI für detaillierte Einrichtungshinweise.

Konfiguration von Embedding-Definitionen

Embedding-Modelle werden jetzt als Embedding-Definitionen in der Admin-Benutzeroberfläche konfiguriert. Navigieren Sie zu AdminAI Plugin → Registerkarte Embeddings. Beim Hinzufügen einer neuen Embedding-Definition können Sie aus vorkonfigurierten Presets wählen oder eine manuell konfigurieren.

Verfügbare Presets umfassen:

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

Jede Embedding-Definition umfasst: Anzeigename, Anbieter, URL, API-Schlüssel (oder AI Secret), Tokenizer, Dimensionen, Distanzfunktion, maximale Sequenzlänge und optionale Einbettungs-/Such-Prompts.

Konfiguration von Embeddings

Navigieren Sie zu AdminPluginsDiscourse AI und stellen Sie sicher, dass die folgenden Einstellungen aktiviert sind.

  1. ai embeddings enabled: Schaltet das Embeddings-Modul ein oder aus
  2. ai embeddings selected model: Wählt die zu verwendende Embedding-Definition zur Generierung von Embeddings

Optionale Einstellungen, die angepasst werden können …

  • AI embeddings generate for pms: Entscheidet, ob Embeddings für private Nachrichten generiert werden sollen
  • AI embeddings semantic related topics enabled: Aktiviert oder deaktiviert die Funktion „Verwandte Themen“
  • AI embeddings semantic related topics: Die maximale Anzahl der anzuzeigenden verwandten Themen
  • AI embeddings semantic related include closed topics: Schließt geschlossene Themen in die Ergebnisse verwandter Themen ein
  • AI embeddings semantic related age penalty: Wendet eine exponentielle Altersstrafe auf Themen in den verwandten Ergebnissen an (0.0 deaktiviert, höhere Werte bestrafen ältere Themen stärker)
  • AI embeddings semantic related age time scale: Zeitskala in Tagen für die Berechnung der Altersstrafe (Standard: 365)
  • AI embeddings semantic search enabled: Aktiviert die Vollseiten-KI-Suche
  • AI embeddings semantic quick search enabled: Aktiviert die Option für semantische Suche im Popup des Suchmenüs
  • AI embeddings semantic search use hyde: Aktiviert HyDE (Hypothetical Document Embedding) für die semantische Suche
  • AI embeddings semantic search hyde agent: Der KI-Agent, der zur Erweiterung von Suchbegriffen verwendet wird, wenn HyDE aktiviert ist

Anbieter

Discourse AI unterstützt mehrere Embedding-Anbieter:

  • OpenAI
  • Google
  • Hugging Face (für Open-Source/Open-Weight-Modelle)
  • Cloudflare Workers AI

Für gehostete Kunden stellt Discourse vorkonfigurierte (gesäte) Embedding-Definitionen bereit, die sofort einsatzbereit sind.

Funktionen

Verwandte Themen

Wenn aktiviert, erscheint am Ende der Themenseiten ein Abschnitt „Verwandte Themen“, der auf semantisch ähnliche Diskussionen verlinkt.

KI-Suche

Embeddings ermöglichen die Option für semantische Suche in der Vollseiten-Suchoberfläche.

Die semantische Suche kann optional HyDE (Hypothetical Document Embedding) verwenden. Wenn dies über ai embeddings semantic search use hyde aktiviert wird, wird der Suchbegriff mithilfe des in ai embeddings semantic search hyde agent konfigurierten KI-Agenten erweitert. Die erweiterte Suche wird dann in einen Vektor umgewandelt und verwendet, um ähnliche Themen zu finden. Diese Technik führt zu einer gewissen Latenz bei der Suche, kann aber die Ergebnisse verbessern.

Wenn Sie einen Agenten für HyDE auswählen, wählen Sie ein schnelles Modell wie Gemini Flash, Claude Haiku, GPT-4o Mini oder die neuesten verfügbaren Modelle.

Generierung von Embeddings

Embeddings werden automatisch für neue Beiträge generiert. Um Embeddings für vorhandene Inhalte zu generieren:

  1. Discourse füllt automatisch ältere Themen über einen geplanten Job auf, der alle 5 Minuten ausgeführt wird
  2. Die Auffüllung verarbeitet Themen in der Reihenfolge der jüngsten Aktivität zuerst

FAQs

F: Wie werden verwandte Themen bestimmt?
A: Verwandte Themen basieren ausschließlich auf Embeddings, die den Titel, die Kategorie, die Tags und den Beitragstext umfassen.

F: Kann ich bestimmte Themen von den verwandten Themen ausschließen?
A: Ja, es gibt eine Website-Einstellung, um geschlossene Themen aus den Ergebnissen zu entfernen.

F: Funktionieren Embeddings für historische Beiträge?
A: Ja, das System füllt automatisch Embeddings für alle Ihre Inhalte auf.

Zusätzliche Ressourcen

17 „Gefällt mir“

Großartige Arbeit, vielen Dank im Voraus, aber ich kann keine ähnlichen Themen unter den Themen sehen, irgendwie sind meine Einstellungen so, ich habe einen OpenAI-Schlüssel hinzugefügt. Die semantische Suche funktioniert, aber wie kann ich ähnliche Artikel unter Themen anzeigen?

Wenn Sie OpenAI für Embeddings verwenden möchten, müssen Sie ai embeddings model auf text-embedding-ada-002 setzen.

3 „Gefällt mir“

Wie werden die Jobs zur Generierung von Embeddings geplant? Aus dem Code geht hervor, dass Embeddings nur generiert werden, wenn die Seite aufgerufen wird und Embeddings fehlen. Gibt es eine Möglichkeit, Embeddings für die gesamte Website zu generieren, wenn die Funktion aktiviert wird?

2 „Gefällt mir“

Sie können auch rake ai:embeddings:backfill ausführen, um Eagerly Embeddings für alle Themen zu generieren.

8 „Gefällt mir“

Vorschlag

Manchmal liest man ein Thema, von dem man den größten Teil des Hintergrunds kennt, aber es gibt auch einige Erwähnungen, die unbekannt sind. Während es eine Zusammenfassung gibt, um ein ganzes Thema bis zu diesem Zeitpunkt zusammenzufassen, wäre auch eine KI-Option hilfreich, die ein Glossar für das Thema als Beitrag nahe oben einfügt und es aktualisiert, wenn ein Benutzer ein Wort oder eine Phrase auswählt, die er in das Glossar aufnehmen möchte.


Heute habe ich beim Lesen dieses Themas eine Referenz nicht erkannt, sie nachgeschlagen und eine Antwort mit einer Referenz dafür hinzugefügt. Während ich die restlichen Referenzen kenne, bin ich sicher, dass es andere gibt, insbesondere diejenigen, die neu bei LLMs und ähnlichem sind, die viele der genannten Referenzen nicht kennen würden, und wenn die KI ihnen helfen könnte, würden sie die Seite viel öfter besuchen.

Während ich weiß, was RAG in diesem ersten Beitrag bedeutet, wissen das wirklich viele?

Was ist RAG (Klicken Sie auf das Dreieck zum Erweitern)

Wie funktionieren domänenspezifische Chatbots? Ein Überblick über Retrieval Augmented Generation (RAG)


Hinweis: Ich wusste nicht, zu welchem Thema ich dies posten sollte, aber da es Embeddings zum Funktionieren benötigte, habe ich es hier gepostet. Bitte verschieben Sie dies, wenn es woanders sinnvoller ist oder sich der Discourse AI-Plugin ändert.

1 „Gefällt mir“

Sind Embeddings die einzige Variable bei der Bestimmung von „verwandten Themen“? Oder werden andere Faktoren berücksichtigt (z. B. Autor, Thema-Score, Thema-Alter, Kategorie usw.)?

3 „Gefällt mir“

Nur die Einbettungen, aber diese enthalten den Titel, die Kategorie, die Tags und die Beiträge. Es gibt eine Website-Einstellung, um geschlossene Themen auch aus den Ergebnissen zu entfernen.

5 „Gefällt mir“

7 Beiträge wurden zu einem neuen Thema aufgeteilt: Ist die semantische Volltextsuche nur auf Englisch?

2 Beiträge wurden in ein neues Thema aufgeteilt: Unterschiede bei der Suchlatenz zwischen KI-semantischer und Stichwortsuche

Ich wünschte, ich hätte das schon vor ein paar Monaten gefunden. Ich habe bereits Embeddings mit bge-small-en-v1.5 erstellt und sie in einer externen Datenbank gehostet.

Ich werde sehen, ob es in diese ‘Standard’-Einrichtung eingepasst werden kann!

Ich habe einen kleinen Fehler in der neuesten Version gefunden, der dazu führt, dass rake ai:embeddings:backfill fehlschlägt:

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)

Ich vermute, dass die Ursache darin liegt, dass das parallel-Gem weder in diesem Plugin noch im Discourse-Kern installiert ist (ich finde nur eines im if ENV["IMPORT"] == "1"-Block: gem "parallel", require: false).

Ich habe festgestellt, dass auch das ruby-progressbar-Gem für die Ausführung von rake ai:embeddings:backfill benötigt wird.

Ich habe auf Github einen einfachen PR erstellt:

2 „Gefällt mir“

Hinweis an andere, dass diese Rake-Methode anscheinend herabgestuft/semi-veraltet ist, wie Falco auf GitHub mitteilte:

Danke für die PR @fokx, aber ich habe diese unbeabsichtigt weggelassen, da die Rake-Aufgabe in Ungnade gefallen ist und nur in seltenen Fällen von erfahrenen Betreibern verwendet werden sollte, die diese leicht außerhalb des Bandes installieren können.

Wird die semantische Suchoption nicht mehr in diesem Dropdown angezeigt und stattdessen durch den KI-Schalter verstanden oder aktiviert?

1 „Gefällt mir“

Können Sie mir bitte bestätigen, ob die Einbettungen nur nach der Installation für Beiträge funktionieren oder ob wir damit auch alle historischen Beiträge semantisch durchsuchen können? Ich hoffe auf Letzteres! Danke.

1 „Gefällt mir“

Es ist später, da es automatisch Einbettungen für alle Ihre Inhalte auffüllt.

4 „Gefällt mir“

Ich versuche, KI-Einbettungen mit Gemini Flash einzurichten, aber es funktioniert nicht. Ich kann keine guten Beschreibungen/Beispiele für alle Einstellungfelder finden, daher habe ich vielleicht ein oder zwei wichtige übersehen. Ich weiß nicht, ob die Einstellung ‘ai_embeddings_model’ erforderlich ist, aber wenn ich sie auf ‘gemini’ setze, erhalte ich die folgende Fehlermeldung…

Ich konnte die Einstellung ai_gemini_api_key nicht finden. Ich habe Gemini Flash als LLM mit einem API-Schlüssel eingerichtet und das funktioniert auch anderswo, z. B. bei der Zusammenfassung, aber ich gehe davon aus, dass hier der API-Schlüssel woanders eingegeben werden muss?

Ich nehme an, das würde auch mit OpenAI funktionieren, oder?

Es wäre großartig, wenn es ihre Batch-API (50% Rabatt) unterstützen könnte.

Ja, aber heutzutage füllen wir automatisch im Hintergrund auf, daher ist dies nicht zwingend erforderlich.

Für preisbewusste Leute unterstützen wir großartige Open-Weights-Modelle, die Sie auf Ihrer eigenen Hardware ausführen können.

1 „Gefällt mir“

Danke. Verstehe ich es richtig, dass Backfill bedeutet, dass die Vektorisierung stattfindet? Müssen die Vektoren beim Wechsel zwischen Modellen neu berechnet werden (Sind sie „proprietär“)? Ich nehme an, ja.

Es wäre nützlich zu wissen, wie sich die Kosten für die Nutzung des OpenAI API-Stacks im Vergleich zur Investition in einen GPU-gestützten Server mit Open-Source-Lösung darstellen. Gibt es eine Formel oder eine Möglichkeit, die Anzahl der verwendeten Tokens abzuschätzen? Wir verwenden die API nur zur Vektorisierung von Beiträgen, nicht zur Berechnung von Vektorabständen, richtig? Die Anzahl der verwendeten Tokens hängt also davon ab, wie viel Inhalt wir haben, korrekt?

Ich gehe davon aus, dass für beide verwandten Themen und die KI-gestützte Suche alle Beiträge nur einmal vektorisiert werden müssen, sodass ich die Gesamtzahl der Wörter in der Beitragstabelle berechnen und die benötigte Anzahl von Tokens ableiten kann. Der gleiche Prozess würde für die tägliche Hinzufügung von Beiträgen gelten. Ich vernachlässige die Suchphrasen vorerst.