Discourse AI - Embeddings

:bookmark: Este tópico abrange a configuração do módulo Embeddings do plugin Discourse AI. Ele explica o que são embeddings, como são usados e como configurá-los.

:person_raising_hand: Nível de usuário necessário: Administrador

Embeddings são um componente crucial do plugin Discourse AI, permitindo recursos como Tópicos relacionados e Busca por IA. Este guia irá guiá-lo através da configuração e uso de embeddings em sua instância do Discourse.

O que são Embeddings?

Embeddings são representações numéricas de texto que capturam o significado semântico. No Discourse, eles são usados para:

  1. Gerar tópicos relacionados na parte inferior das páginas de tópicos
  2. Habilitar a funcionalidade de busca semântica

Configurando Embeddings

Para clientes hospedados

Se você é um cliente hospedado, os embeddings vêm pré-configurados. Você pode simplesmente habilitar os recursos de IA que dependem deles.

Para instâncias auto-hospedadas

Se você está auto-hospedando, consulte o Guia de auto-hospedagem do Discourse AI para instruções detalhadas de configuração.

Configurando embeddings

Navegue até AdminSettingsDiscourse AI, certifique-se de que as seguintes configurações estejam habilitadas.

  1. ai embeddings enabled: Ativa ou desativa o módulo de embeddings
  2. ai embeddings selected model: Seleciona qual modelo usar para gerar embeddings

Configurações opcionais que podem ser ajustadas…

  • AI embeddings generate for pms: Decide se deve gerar embeddings para mensagens privadas
  • AI embeddings semantic related topics enabled: Habilita ou desabilita o recurso “Tópicos relacionados”
  • AI embeddings semantic related topics: O número máximo de tópicos relacionados a serem exibidos
  • AI embeddings semantic related include closed topics: Inclusão de tópicos fechados nos resultados da busca por IA
  • AI embeddings semantic search enabled: Habilita a busca por IA em página inteira
  • AI embeddings semantic search hyde model: Modelo usado para expandir palavras-chave para obter melhores resultados durante uma busca semântica

Provedores

Dentro das configurações de administrador, navegue até a aba AI plugin → Embeddings para configurar quaisquer configurações relacionadas ao provedor, como chaves de API.

O Discourse AI suporta vários provedores de Embeddings:

  • Embeddings hospedados pelo Discourse (recomendado e padrão)
  • OpenAI
  • Google
  • Modelos de código aberto via Hugging Face
  • Opções personalizadas

Recursos

Tópicos Relacionados

Quando habilitada, uma seção “Tópicos Relacionados” aparece na parte inferior das páginas de tópicos, vinculando a discussões semanticamente semelhantes.

Busca por IA

Embeddings alimentam a opção de busca semântica na interface de busca em página inteira.

A busca semântica utiliza HyDE (Hypothetical Document Embedding). Expandimos o termo de busca usando um modelo de linguagem grande que você fornece. Uma vez expandido, convertemos a busca expandida em um vetor e procuramos por tópicos semelhantes. Essa técnica adiciona alguma latência à busca e melhora os resultados.

Ao selecionar um modelo para hyde via ai embeddings semantic search hyde model, certifique-se de escolher um modelo rápido como Gemini Flash, Claude Haiku, GPT4o Mini ou os modelos mais recentes disponíveis.

Gerando embeddings

Embeddings são gerados automaticamente para novas postagens. Para gerar embeddings para conteúdo existente:

  1. Embeddings são criados quando uma página é visualizada, se estiverem faltando
  2. O Discourse preencherá automaticamente os embeddings para tópicos mais antigos.

FAQs

P: Como os tópicos relacionados são determinados?
R: Tópicos relacionados são baseados unicamente em embeddings, que incluem o título, categoria, tags e o conteúdo das postagens.

P: Posso excluir tópicos específicos dos tópicos relacionados?
R: Sim, existe uma configuração do site para remover tópicos fechados dos resultados.

P: Os embeddings funcionam para postagens históricas?
R: Sim, o sistema preencherá automaticamente os embeddings para todo o seu conteúdo.

Recursos adicionais

17 curtidas

Ótimo trabalho, obrigado antes de tudo, mas não consigo ver tópicos semelhantes em “tópicos”, de alguma forma, minhas configurações são assim, adicionei uma chave openai. A pesquisa semântica funciona, mas como posso mostrar artigos semelhantes em “tópicos”?

Se você quiser usar o OpenAI para embeddings, deve definir ai embeddings model como text-embedding-ada-002.

3 curtidas

Como os trabalhos para gerar embeddings são agendados? Pelo código, parece que os embeddings só são gerados quando a página é visualizada e os embeddings estão faltando. Existe uma maneira de gerar embeddings para todo o site ao ativar o recurso?

2 curtidas

Você também pode executar rake ai:embeddings:backfill para gerar embeddings para todos os tópicos antecipadamente.

8 curtidas

Sugestão

Às vezes, ao ler um tópico, você conhece a maior parte do histórico, mas também há algumas menções que não são conhecidas. Embora exista a sumarização para resumir um tópico inteiro até aquele ponto, o que também seria útil seria uma opção de IA que insere um glossário para o tópico como uma postagem perto do topo e o atualiza se um usuário selecionar uma palavra ou frase que ele deseja que a IA inclua no glossário.


Hoje, ao ler este tópico, houve uma referência que não reconheci, então a procurei e adicionei uma resposta com uma referência para ela. Embora eu saiba as referências restantes, tenho certeza de que há outras, especialmente para aqueles que são novos em LLMs e afins, que não teriam ideia de muitas das referências mencionadas e, se a IA pudesse ajudá-los, eles visitariam o site com muito mais frequência.

Embora eu saiba o que RAG significa neste post inicial, quantos realmente sabem disso?

O que é RAG (Clique no triângulo para expandir)

Como funcionam os chatbots específicos de domínio? Uma visão geral da Geração Aumentada por Recuperação (RAG)


Observação: Não sabia em qual tópico postar isso, mas como precisava de embeddings para funcionar, postei aqui. Por favor, mova isso se fizer mais sentido em outro lugar ou conforme o plugin Discourse AI mudar.

1 curtida

Os embeddings são a única variável ao determinar “Tópicos Relacionados”? Ou existem outros fatores considerados (por exemplo, autor, pontuação do tópico, idade do tópico, categoria, etc.)?

3 curtidas

Apenas os embeddings, mas eles contêm o título, categoria, tags e posts. Há uma configuração do site para remover tópicos fechados dos resultados também.

5 curtidas

7 posts foram divididos em um novo tópico: A pesquisa semântica de página inteira é apenas em inglês?

2 posts foram divididos em um novo tópico: Diferenças na latência de pesquisa entre pesquisa semântica de IA e pesquisa por palavra-chave

Quem dera eu tivesse encontrado isso há alguns meses. Eu já criei embeddings usando bge-small-en-v1.5 e os hospedei em um banco de dados externo.

Vou ver se consigo encaixar isso na configuração ‘padrão’!

Encontrei um pequeno bug na versão recente que leva à falha 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)

Suspeito que o culpado seja que a gem parallel não está instalada neste plugin, nem no core do Discourse (só encontro uma no bloco if ENV[\"IMPORT\"] == \"1\": gem "parallel", require: false).

Encontro a gem ruby-progressbar também necessária para executar rake ai:embeddings:backfill.

Fiz um PR simples no Github:

2 curtidas

Observação para outros que este método rake parece ter sido rebaixado/semi-depreciado desde, de acordo com Falco no GitHub:

Obrigado pela PR @fokx, mas eu as deixei de fora não intencionalmente, pois a tarefa rake caiu em desuso e só deve ser usada em raras ocasiões por operadores experientes que podem facilmente instalá-las fora de banda.

A opção de pesquisa semântica não é mais exibida nesse menu suspenso e, em vez disso, é compreendida ou ativada através do alternador de IA?

1 curtida

Você pode confirmar para mim se os embeddings funcionarão apenas em postagens após a instalação ou se também nos permitirá pesquisar semanticamente postagens históricas? Espero que o último! Obrigado.

1 curtida

É mais tarde, pois ele preencherá automaticamente os embeddings para todo o seu conteúdo.

4 curtidas

Estou tentando configurar Embeddings de IA usando Gemini Flash, mas não consigo fazer funcionar. Não consigo encontrar boas descrições/exemplos de todos os campos de configuração, então posso ter perdido um ou dois que são importantes. Não sei se a configuração ‘ai_embeddings_model’ é necessária, mas se eu a definir como ‘gemini’, recebo o seguinte erro…

Não consegui encontrar a configuração ai_gemini_api_key. Eu tenho o Gemini Flash configurado como um LLM com uma chave de API e isso está funcionando em outros lugares, por exemplo, sumarização, mas estou assumindo que isso está querendo a chave de API inserida em outro lugar?

Suponho que isso também funcionaria com o OpenAI, não é?

Seria ótimo se pudesse suportar sua API em Lote (desconto de 50%)

Sim, mas hoje em dia fazemos o preenchimento retroativo automaticamente em segundo plano, então isso não é obrigatório.

Para pessoas com consciência de preço, suportamos ótimos modelos de pesos abertos que você pode executar em seu próprio hardware.

1 curtida

Obrigado. Eu entendi corretamente que o backfill é quando a vetorização acontece? Ao alternar entre modelos, os vetores precisam ser recalculados (eles são “proprietários”)? Eu assumo que sim.

Seria útil saber como os custos de uso da pilha da API OpenAI se comparam ao investimento em um servidor com GPU e solução de código aberto. Existe uma fórmula ou alguma maneira de estimar o número de tokens usados? Estamos usando a API apenas para vetorizar posts, não para calcular distâncias de vetores, certo? Então, o número de tokens usados depende de quanto conteúdo temos, correto?

Eu assumo que, tanto para tópicos relacionados quanto para pesquisa com IA, todos os posts precisam ser vetorizados apenas uma vez, então posso calcular o número total de palavras na tabela de posts e derivar o número de tokens necessários. O mesmo processo se aplicaria à adição diária de posts. Estou negligenciando as frases de pesquisa por enquanto.