Discourse AI - Embedding

: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 accompagnerà nella configurazione e nell’utilizzo degli embeddings nella tua istanza 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 ospitati

Se sei un cliente ospitato, gli embeddings sono preconfigurati. Puoi semplicemente abilitare le funzionalità AI che dipendono da essi.

Per le istanze self-hosted

Se stai eseguendo il self-hosting, consulta la Guida Discourse AI self-hosted per istruzioni dettagliate sulla configurazione.

Configurazione degli embeddings

Naviga su AdminSettingsDiscourse 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 modello utilizzare per generare gli embeddings

Impostazioni opzionali che possono essere modificate…

  • 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: Inclusione di argomenti chiusi nei risultati della ricerca AI
  • AI embeddings semantic search enabled: Abilita la ricerca AI a pagina intera
  • AI embeddings semantic search hyde model: Modello utilizzato per espandere le parole chiave per ottenere risultati migliori durante una ricerca semantica

Provider

All’interno delle impostazioni di amministrazione, naviga sulla scheda AI plugin → Embeddings per configurare eventuali impostazioni relative al provider, come le chiavi API.

Discourse AI supporta più provider di Embeddings:

  • Embeddings ospitati da Discourse (consigliato e predefinito)
  • OpenAI
  • Google
  • Modelli open source tramite Hugging Face
  • Opzioni personalizzate

Funzionalità

Argomenti Correlati

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

Ricerca AI

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

La ricerca semantica si basa su HyDE (Hypothetical Document Embedding). Espandiamo il termine di ricerca utilizzando un modello linguistico di grandi dimensioni che fornisci. Una volta espanso, convertiamo la ricerca espansa in un vettore e cerchiamo argomenti simili. Questa tecnica aggiunge un po’ di latenza alla ricerca e migliora i risultati.

Quando selezioni un modello per hyde tramite ai embeddings semantic search hyde model, assicurati di scegliere un modello veloce come Gemini Flash, Claude Haiku, GPT4o 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. Gli embeddings vengono creati quando una pagina viene visualizzata se mancano
  2. Discourse riempirà automaticamente gli embeddings per gli argomenti più vecchi.

FAQ

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

D: Posso escludere determinati 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.