Discourse AI - Embeddings

:bookmark: Este tópico aborda a configuração do módulo de Embeddings (Incorporações) 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, possibilitando recursos como Tópicos Relacionados e Busca por IA. Este guia o orientará na 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 (hosted)

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 (self-hosted)

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

Configurando Definições de Embedding

Os modelos de embedding agora são configurados como Definições de Embedding na interface de administração. Navegue até AdminAI plugin → aba Embeddings. Ao adicionar uma nova definição de embedding, você pode escolher entre presets (modelos predefinidos) ou configurar um manualmente.

Os presets disponíveis incluem:

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

Cada definição de embedding inclui: nome de exibição, provedor, URL, chave de API (ou AI Secret), tokenizador, dimensões, função de distância, comprimento máximo de sequência e prompts opcionais de incorporação/busca.

Configurando embeddings

Navegue até AdminPluginsDiscourse 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 definição de embedding usar para gerar embeddings

Configurações opcionais que podem ser ajustadas…

  • AI embeddings generate for pms: Decide se deve gerar embeddings para mensagens privadas (pms)
  • 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: Incluir tópicos fechados nos resultados de tópicos relacionados
  • AI embeddings semantic related age penalty: Aplica uma penalidade de idade exponencial aos tópicos nos resultados relacionados (0.0 desativa, valores mais altos penalizam tópicos mais antigos)
  • AI embeddings semantic related age time scale: Escala de tempo em dias para o cálculo da penalidade de idade (padrão: 365)
  • AI embeddings semantic search enabled: Habilita a busca de IA em página inteira
  • AI embeddings semantic quick search enabled: Habilita a opção de busca semântica no pop-up do menu de busca
  • AI embeddings semantic search use hyde: Habilita o HyDE (Hypothetical Document Embedding) para busca semântica
  • AI embeddings semantic search hyde agent: O agente de IA usado para expandir termos de busca quando o HyDE está habilitado

Provedores

O Discourse AI suporta múltiplos provedores de embedding:

  • OpenAI
  • Google
  • Hugging Face (para modelos open source/open weights)
  • Cloudflare Workers AI

Para clientes hospedados, o Discourse fornece definições de embedding pré-configuradas (seedadas) que funcionam imediatamente.

Recursos

Tópicos Relacionados

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

Busca por IA

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

A busca semântica pode opcionalmente usar HyDE (Hypothetical Document Embedding). Quando habilitada via ai embeddings semantic search use hyde, o termo de busca é expandido usando o agente de IA configurado em ai embeddings semantic search hyde agent. A busca expandida é então convertida em um vetor e usada para encontrar tópicos semelhantes. Esta técnica adiciona alguma latência à busca, mas pode melhorar os resultados.

Ao selecionar um agente para HyDE, escolha um modelo rápido como Gemini Flash, Claude Haiku, GPT-4o 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. O Discourse preencherá automaticamente embeddings para tópicos mais antigos através de um trabalho agendado que é executado a cada 5 minutos
  2. O preenchimento retroativo processa os tópicos em ordem de atividade recente primeiro

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 certos tópicos dos tópicos relacionados?
R: Sim, existe uma configuração do site para remover tópicos fechados dos resultados

P: Embeddings funcionam para postagens históricas?
R: Sim, o sistema preencherá automaticamente 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.