Discourse AI - Embeddings

:bookmark: Questo argomento copre la configurazione del modulo Embeddings del plugin Discourse AI. Spiega cosa sono gli embeddings, come vengono utilizzati e come configurarli.

:person_raising_hand: Livello utente richiesto: Amministratore

Gli embeddings sono una componente cruciale del plugin Discourse AI, che abilita funzionalità come Argomenti correlati e Ricerca AI. Questa guida ti illustrerà la configurazione e l’utilizzo degli embeddings nella tua istanza di Discourse.

Cosa sono gli Embeddings?

Gli embeddings sono rappresentazioni numeriche del testo che catturano il significato semantico. In Discourse, vengono utilizzati per:

  1. Generare argomenti correlati in fondo alle pagine degli argomenti
  2. Abilitare la funzionalità di ricerca semantica

Configurazione degli Embeddings

Per i clienti con hosting gestito

Se sei un cliente con hosting gestito, gli embeddings sono preconfigurati. Puoi semplicemente abilitare le funzionalità AI che ne dipendono.

Per le istanze self-hosted

Se stai utilizzando l’hosting autonomo, fai riferimento alla Guida self-hosted di Discourse AI per istruzioni dettagliate sulla configurazione.

Configurazione delle Definizioni di Embedding

I modelli di embedding sono ora configurati come Definizioni di Embedding nell’interfaccia di amministrazione. Naviga su AdminAI plugin → scheda Embeddings. Quando aggiungi una nuova definizione di embedding, puoi scegliere tra preset preconfigurati o configurarne una manualmente.

I preset disponibili includono:

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

Ogni definizione di embedding include: nome visualizzato, provider, URL, chiave API (o AI Secret), tokenizer, dimensioni, funzione di distanza, lunghezza massima della sequenza e prompt opzionali di embed/ricerca.

Configurazione degli embeddings

Naviga su AdminPluginsDiscourse AI, assicurati che le seguenti impostazioni siano abilitate.

  1. ai embeddings enabled: Attiva o disattiva il modulo embeddings
  2. ai embeddings selected model: Seleziona quale definizione di embedding utilizzare per la generazione degli embeddings

Impostazioni opzionali che possono essere regolate…

  • AI embeddings generate for pms: Decidi se generare embeddings per i messaggi privati
  • AI embeddings semantic related topics enabled: Abilita o disabilita la funzionalità “Argomenti correlati”
  • AI embeddings semantic related topics: Il numero massimo di argomenti correlati da mostrare
  • AI embeddings semantic related include closed topics: Includi argomenti chiusi nei risultati degli argomenti correlati
  • AI embeddings semantic related age penalty: Applica una penalità di età esponenziale agli argomenti nei risultati correlati (0.0 disabilita, valori più alti penalizzano maggiormente gli argomenti più vecchi)
  • AI embeddings semantic related age time scale: Scala temporale in giorni per il calcolo della penalità di età (default: 365)
  • AI embeddings semantic search enabled: Abilita la ricerca AI a pagina intera
  • AI embeddings semantic quick search enabled: Abilita l’opzione di ricerca semantica nel popup del menu di ricerca
  • AI embeddings semantic search use hyde: Abilita HyDE (Hypothetical Document Embedding) per la ricerca semantica
  • AI embeddings semantic search hyde agent: L’agente AI utilizzato per espandere i termini di ricerca quando HyDE è abilitato

Provider

Discourse AI supporta più provider di embedding:

  • OpenAI
  • Google
  • Hugging Face (per modelli open source/open weights)
  • Cloudflare Workers AI

Per i clienti con hosting gestito, Discourse fornisce definizioni di embedding preconfigurate (seed) che funzionano immediatamente.

Funzionalità

Argomenti Correlati

Quando è abilitata, una sezione “Argomenti Correlati” appare in fondo alle pagine degli argomenti, collegandosi a discussioni semanticamente simili.

Ricerca AI

Gli embeddings alimentano l’opzione di ricerca semantica sull’interfaccia di ricerca a pagina intera.

La ricerca semantica può opzionalmente utilizzare HyDE (Hypothetical Document Embedding). Quando è abilitata tramite ai embeddings semantic search use hyde, il termine di ricerca viene espanso utilizzando l’agente AI configurato in ai embeddings semantic search hyde agent. La ricerca espansa viene quindi convertita in un vettore e utilizzata per trovare argomenti simili. Questa tecnica aggiunge un po’ di latenza alla ricerca ma può migliorare i risultati.

Quando si seleziona un agente per HyDE, scegliere un modello veloce come Gemini Flash, Claude Haiku, GPT-4o Mini o i modelli più recenti disponibili.

Generazione degli embeddings

Gli embeddings vengono generati automaticamente per i nuovi post. Per generare embeddings per contenuti esistenti:

  1. Discourse riempirà automaticamente gli embeddings per gli argomenti più vecchi tramite un job pianificato che viene eseguito ogni 5 minuti
  2. Il backfill elabora gli argomenti in ordine di attività recente prima

Domande Frequenti

D: Come vengono determinati gli argomenti correlati?
R: Gli argomenti correlati si basano esclusivamente sugli embeddings, che includono titolo, categoria, tag e contenuto dei post.

D: Posso escludere alcuni argomenti dagli argomenti correlati?
R: Sì, esiste un’impostazione del sito per rimuovere gli argomenti chiusi dai risultati.

D: Gli embeddings funzionano per i post storici?
R: Sì, il sistema riempirà automaticamente gli embeddings per tutti i tuoi contenuti.

Risorse aggiuntive

17 Mi Piace

Ottimo lavoro, grazie innanzitutto, ma non vedo argomenti simili sotto gli argomenti, in qualche modo, le mie impostazioni sono così, ho aggiunto una chiave openai. La ricerca semantica funziona, ma come posso mostrare articoli simili sotto gli argomenti?

Se vuoi usare OpenAI per gli embedding devi impostare ai embeddings model su text-embedding-ada-002.

3 Mi Piace

Come vengono pianificati i job per la generazione degli embedding? Dal codice sembra che gli embedding vengano generati solo quando la pagina viene visualizzata e gli embedding sono mancanti. Esiste un modo per generare gli embedding per l’intero sito quando si attiva la funzionalità?

2 Mi Piace

Puoi anche eseguire rake ai:embeddings:backfill per generare eagerly gli embedding per tutti gli argomenti.

8 Mi Piace

Suggerimento

A volte, leggendo un argomento, si conosce la maggior parte dello sfondo indicato, ma ci sono anche alcune menzioni non note. Sebbene esista la riassunzione per riassumere un intero argomento fino a quel punto, sarebbe utile anche un’opzione AI che inserisca un glossario per l’argomento come post vicino all’inizio e lo aggiorni se un utente seleziona una parola o una frase che desidera includere nel glossario.


Oggi, leggendo questo argomento, ho trovato un riferimento che non riconoscevo, quindi l’ho cercato e ho aggiunto una risposta con un riferimento per esso. Sebbene io conosca i riferimenti rimanenti, sono sicuro che ce ne sono altri, specialmente per chi è nuovo ai LLM e simili, che non avrebbero idea di molti dei riferimenti indicati e se l’AI potesse aiutarli, visiterebbero il sito molto più spesso.

Sebbene io sappia cosa significa RAG in questo post iniziale, quanti lo sanno davvero?

Cos'è RAG (Clicca sul triangolo per espandere)

Come funzionano i chatbot specifici per dominio? Una panoramica della Retrieval Augmented Generation (RAG)


Nota: Non sapevo con quale argomento pubblicare questo, ma poiché necessitava di embeddings per funzionare, l’ho pubblicato qui. Si prega di spostare questo se ha più senso altrove o man mano che il plugin Discourse AI cambia.

1 Mi Piace

I vettori di embedding sono l’unica variabile nel determinare gli "Argomenti Correlati"? O ci sono altri fattori presi in considerazione (ad es. autore, punteggio dell’argomento, età dell’argomento, categoria, ecc.)?

3 Mi Piace

Solo gli embedding, ma quelli contengono il titolo, la categoria, i tag e i post. Esiste un’impostazione del sito per rimuovere anche gli argomenti chiusi dai risultati.

5 Mi Piace

7 post sono stati divisi in un nuovo argomento: La ricerca semantica a pagina intera è solo in inglese?

2 post sono stati divisi in un nuovo argomento: Differenze nella latenza di ricerca tra ricerca semantica AI e ricerca per parole chiave

Magari l’avessi trovato qualche mese fa. Avevo già creato embedding usando bge-small-en-v1.5 e li avevo ospitati in un database esterno.

Vedrò se si può incastrare in questa configurazione “standard”!

Trovo un piccolo bug nella versione recente che causa il fallimento di 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)

Sospetto che il colpevole sia che la gemma parallel non sia installata né in questo plugin, né nel core di Discourse (ne trovo solo una nel blocco if ENV["IMPORT"] == "1": gem "parallel", require: false).

Trovo che anche la gemma ruby-progressbar sia necessaria per eseguire rake ai:embeddings:backfill.

Ho creato una semplice PR su Github:

2 Mi Piace

Nota agli altri che questo metodo rake sembra essere stato retrocesso/semi-deprecato secondo Falco su GitHub:

Grazie per la PR @fokx, ma le ho omesse involontariamente poiché il task rake è caduto in disuso e dovrebbe essere utilizzato solo in rare occasioni da operatori esperti che possono facilmente installarle esternamente.

L’opzione di ricerca semantica non viene più visualizzata in quel menu a discesa e viene invece compresa o abilitata tramite l’interruttore AI?

1 Mi Piace

Puoi confermarmi se gli embedding funzioneranno solo sui post dopo l’installazione o se ci permetteranno anche di effettuare ricerche semantiche su tutti i post storici? Spero in quest’ultima opzione! Grazie.

1 Mi Piace

È più tardi, poiché riempirà automaticamente gli embedding per tutti i tuoi contenuti.

4 Mi Piace

Sto cercando di configurare AI Embeddings usando Gemini Flash ma non riesco a farlo funzionare. Non riesco a trovare buone descrizioni/esempi di tutti i campi di impostazione, quindi potrei averne saltati uno o due importanti. Non so se l’impostazione ‘ai_embeddings_model’ sia obbligatoria, ma se la imposto su ‘gemini’ ottengo il seguente errore…

Non sono riuscito a trovare l’impostazione ai_gemini_api_key. Ho Gemini Flash configurato come LLM con una chiave API e funziona altrove, ad esempio per la sommatoria, ma presumo che voglia la chiave API inserita da qualche altra parte?

Suppongo che funzionerebbe anche con OpenAI, vero?

Sarebbe fantastico se potesse supportare la loro API Batch (sconto del 50%)

Sì, ma al giorno d’oggi eseguiamo il riempimento in background automaticamente, quindi non è obbligatorio.

Per le persone attente ai prezzi, supportiamo ottimi modelli open weights che puoi eseguire sul tuo hardware.

1 Mi Piace

Grazie. Ho capito bene che il backfill è quando avviene la vettorizzazione? Quando si passa da un modello all’altro, i vettori devono essere ricalcolati (sono “proprietari”)? Presumo di sì.

Sarebbe utile sapere come i costi dell’utilizzo dello stack API di OpenAI si confrontano con l’investimento in un server con GPU e una soluzione open source. Esiste una formula o un modo per stimare il numero di token utilizzati? Stiamo utilizzando l’API solo per vettorizzare i post, non per calcolare le distanze vettoriali, giusto? Quindi, il numero di token utilizzati dipende da quanto contenuto abbiamo, corretto?

Presumo che sia per argomenti correlati che per la ricerca basata sull’IA, tutti i post debbano essere vettorizzati una sola volta, quindi posso calcolare il numero totale di parole nella tabella dei post e derivare il numero di token necessari. Lo stesso processo si applicherebbe all’aggiunta giornaliera di post. Per ora sto trascurando le frasi di ricerca.