Discourse AI - Detecção de spam

:bookmark: Este guia explica como configurar e usar o recurso de detecção de spam do Discourse AI, incluindo o processo de configuração, critérios de varredura, lógica de classificação, personalizações e contrastes com a triagem de IA.

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

:megaphone: Isso agora está ativado por padrão para clientes Starter e Pro, bem como para nossos clientes legados Basic, Open Source, Creator e Business.

O Discourse AI oferece um recurso eficiente de detecção de spam que identifica e sinaliza posts de spam com configuração mínima. Embora projetado para simplicidade, ele complementa o sistema de triagem de IA mais versátil, que suporta fluxos de trabalho mais amplos e casos de uso maiores.

Resumo

Neste guia, você aprenderá:

  • Como funciona a detecção de spam por IA e qual conteúdo é escaneado
  • A lógica de classificação e o contexto usados pela IA
  • Passos para configurar a detecção de spam através de /admin/plugins/discourse-ai/ai-spam
  • Diretrizes para seleção de Large Language Model (LLM)
  • Principais diferenças entre detecção de spam e triagem de IA
  • Como gerenciar posts sinalizados e perdidos

Como funciona a detecção de spam por IA

Qual conteúdo é escaneado?

A detecção de spam por IA avalia posts com base nestes critérios:

  1. Nível de confiança do usuário:

    • Escaneia posts de usuários com nível de confiança 1 ou inferior.
    • Exclui posts de níveis de confiança mais altos.
  2. Tipo de post:

    • Posts públicos (excluindo mensagens privadas).
    • Posts de resposta e posts de primeiro tópico estão incluídos, com base em limites adicionais.
  3. Edições de post:

    • Escaneia posts com edições significativas (por exemplo, alterações que excedem 10 caracteres).
    • Impõe um atraso de 10 minutos entre as varreduras do mesmo post.
  4. Frequência de post:

    • Prioriza posts de novos usuários com menos de 4 posts totais em tópicos públicos.
    • Exclui posts de usuários que excedem esse limite.

O processo de classificação

Posts que atendem aos critérios são enviados a um modelo de IA (LLM) para análise. O modelo avalia se o post é “SPAM” ou “NÃO SPAM” com base em:

  • Contexto: Inclui o conteúdo do post, título do tópico, dados da conta do usuário (por exemplo, idade da conta e nível de confiança) e diretrizes do site.
  • Instruções personalizadas: Regras definidas pelo administrador para critérios de varredura reforçados ou adaptados.
  • Detecção automatizada:
    • Sinaliza conteúdo irrelevante ou promocional (por exemplo, anúncios ou materiais comerciais).
    • Identifica comportamentos automatizados ou semelhantes a bots.
    • Avalia a relevância do conteúdo para a discussão.

Prompt e contexto padrão

A IA usa um prompt de sistema padrão para orientar a detecção de spam. Este prompt descreve as regras de classificação de spam. Por exemplo:

Você é um sistema de detecção de spam. Analise o seguinte conteúdo e contexto.
Notas:
- As respostas devem permanecer relevantes para o tópico de discussão.
- Marque como SPAM se o conteúdo for irrelevante, promocional ou automatizado.
- Considere posts de novos usuários com links como SPAM potencial, a menos que sejam explicitamente relevantes para o tópico.
Responda apenas com "SPAM" ou "NÃO SPAM".

O scanner também compila um pacote de contexto, incluindo:

  • Metadados de tópicos e categorias.
  • Relevância das respostas para o tópico.
  • Dados do autor (por exemplo, data de criação da conta, total de posts, nível de confiança).
  • Texto do post truncado para 5000 caracteres para processamento.

Configurar a detecção de spam por IA

Guia de configuração

  1. Acessar configurações:
    Navegue até /admin/plugins/discourse-ai/ai-spam.

  2. Selecionar um LLM:

:information_source: Se o seu site for hospedado pelo Discourse

Você pode selecionar nosso CDCK Hosted Small LLM na lista de LLMs.

  1. Ativar detecção de spam:
    Ative a detecção de spam alternando o recurso.

:information_source: Observação: Um LLM conectado é obrigatório.

  1. Adicionar instruções personalizadas:
    • Defina regras específicas para o seu fórum (por exemplo, monitoramento mais rigoroso de links externos).
    • Salve quaisquer alterações para aplicá-las.

Diferenças da triagem de IA

Enquanto a detecção de spam é projetada especificamente para identificar spam, a triagem de IA suporta tarefas mais amplas de gerenciamento de posts.

Recurso Detecção de Spam por IA Triagem de IA
Complexidade Configuração simplificada e opinativa Altamente personalizável e flexível
Caso de uso principal Detecção de spam com sobrecarga mínima Fluxos de trabalho avançados para categorização, marcação, respostas, detecção de spam, detecção de nsfw
Ações Sinaliza spam, silencia usuários Marca, categoriza, oculta posts, adiciona respostas, sinaliza posts, silencia usuários
Recomendação Configuração fácil e eficaz para a maioria das situações Use para fluxos de trabalho ricos e altamente personalizáveis

Para mais detalhes, consulte Discourse AI - AI triage.


Recomendações de seleção de LLM

O desempenho da detecção de spam depende do LLM escolhido.

A maioria dos LLMs de baixo custo funciona de forma eficaz, como:

  • GPT-4o-mini
  • Claude 3.5 Haiku
  • Gemini 2.0 Flash

Experimente diferentes modelos para encontrar o melhor ajuste. Configure seus modelos via /admin/plugins/discourse-ai/ai-llms.


Testando o comportamento do scanner de spam

Você pode testar as regras de detecção de spam diretamente da página de configuração.

  • Cole uma URL ou ID de post no campo de teste.
  • Revise o resultado da classificação (por exemplo, “SPAM” ou “NÃO SPAM”) e analise os logs para entender o raciocínio.
  • Alterações não salvas são aplicadas durante o teste, permitindo experimentação sem risco.

Gerenciando posts sinalizados e perdidos

Lidando com posts sinalizados

Posts sinalizados aparecem na fila de moderação. Os administradores podem:

  • Aprovar posts legítimos classificados incorretamente como spam.
  • Rejeitar tópicos de spam para manter o sistema preciso.

:warning: Importante: Rejeite sinalizações de spam para posts classificados incorretamente. Os usuários permanecem silenciados até que a sinalização seja resolvida.

Lidando com spam perdido

Spam perdido refere-se a posts que não foram detectados, mas foram sinalizados pela comunidade. Os moderadores podem gerenciá-los conforme necessário.


Melhores práticas

  • Monitore regularmente o spam sinalizado e perdido para refinar a precisão do sistema. Métricas clicáveis simplificam esse processo.
  • Use casos de teste para avaliar instruções personalizadas contra casos extremos.
  • Revise e ajuste as configurações do LLM quando necessário.

Recursos adicionais


:mega: Configurar a detecção de spam por IA reduz efetivamente os esforços de moderação manual, garantindo uma comunidade limpa e livre de spam.

16 curtidas

Fizemos muitos testes com isso e não parece que obtemos resultados confiáveis. Para contexto, estamos usando o modelo gpt-4o.

Para testar sua precisão, dei as seguintes instruções simples:

Você é um sistema de detecção de spam. Analise o conteúdo e o contexto a seguir.
Observações abaixo. Se *QUALQUER* um dos itens for verdadeiro abaixo, marque como spam:
- O nome de usuário é muito especificamente "testjon", então é *SEMPRE* spam.
- Responda apenas com "SPAM - É o Jon!" ou "NÃO É SPAM".

Testar em uma postagem, pelo nome de usuário testjon, resulta em NÃO É SPAM. Parece que ele não está prestando atenção às instruções. Alguma sugestão?

Mais alguém teve alguma experiência boa ou ruim com a detecção de spam por IA?

Não sei como são as coisas nesta situação, mas, em geral, a declaração citada é muito propensa a falhar. Ela não entende o que QUALQUER significa e segue alegremente enquanto obtém. E, a partir daí, ela encontrou por fim NÃO SPAM.

1 curtida

Então você está dizendo para remover a negrito de QUALQUER coisa? Ou você está dizendo a declaração geral de “se algum item abaixo”?

Estou dizendo que você tem que escrever de forma mais lógica e exata. Você não pode deixar uma IA escolher de forma alguma. Lembre-se que ela não sabe contar e definitivamente não lê tudo primeiro e depois volta para tentar trabalhar logicamente. Tente explicar de forma tão simples quanto daria instruções a uma criança de 3 anos com TDAH preguiçosa. Exemplos não estão errados, mas aumentarão o uso de tokens.

1 curtida

Esta é uma informação incrível. Por exemplo, como você poderia escrever este cenário exato de forma diferente?

1 curtida

Algo como…

Você é um sistema de detecção de spam. Seu trabalho é analisar silenciosamente o conteúdo para manter a alta qualidade neste fórum. Você deve seguir as regras para definir quando uma postagem é spam. Quando você encontrar um spam, sua resposta será informada nas regras. Você está usando apenas respostas informadas.

## Regras para spam

Eu não faço isso por você 😏 Mas você precisa de algumas explicações e exemplos. Como um exemplo rápido e grosseiro:
* se uma postagem tiver links externos conectados a jogos de azar, sexo, criptomoedas, etc. (semelhante é arriscado neste contexto, aliás), então uma postagem é classificada como spam. Exemplo: www.buy-crypto.deal

Isso você terá que ajustar caso a caso, pois terá falsos positivos e falsos negativos.

Então você terá que dar algumas diretrizes para o conteúdo também. Mas ao testar:

* se o nome de usuário for "testjon", ignore a análise do conteúdo e classifique-o diretamente como spam. Sua resposta será "SPAM - é o Jon"

Aliás, ele pode ver o usuário?

## Regras para outro conteúdo

Quando uma postagem passar pela análise de spam e você tiver certeza de que é conteúdo legítimo, sua única resposta será "NÃO É SPAM".

Algo assim. Você tem que testar, é claro. E toda vez que você obtiver uma resposta incorreta, tente encontrar o ponto confuso. Mas não dê à IA a oportunidade de escolher o que pode fazer, porque ela então tomará a direção final, mais fácil ou mais agradável. Ela tem a necessidade codificada de responder e ficar feliz.

Acabei de ativar isso e estou animado para ver como vai!

Existe alguma configuração ou consideração para o nível de confiança que os usuários têm?

Por exemplo: não preciso que a IA seja ativada para TL2 e acima, eles conquistaram seu lugar e não devem ser considerados para verificação. Se eles enlouquecerem, teremos que ter uma conversa com eles :sweat_smile:

2 posts foram divididos para um novo tópico: Discourse AI plugin missing

Como isso está substituindo o Akismet, me pergunto qual é a melhor alternativa para detecção/prevenção de spam se você não quiser os custos de LLM que vêm com IA?

2 curtidas

Na verdade, o Gemini 2.0 Flash está disponível gratuitamente, desde que você não envie um milhão de requisições por dia. Ele está funcionando bem para o meu fórum agora com zero custo, e é definitivamente mais preciso e “inteligente” que o Akismet.

No entanto, se a detecção de spam por IA falhar, ainda tenho o plugin Akismet instalado no meu site e pronto para uso, caso eu precise dele novamente, e acho que você ainda pode instalá-lo. (Como ele está sendo descontinuado, não espero que ele permaneça para sempre). Lembre-se também que os níveis de confiança são um núcleo fundamental do Discourse que ajudam você a gerenciar spam no seu site. :+1:

5 curtidas

Que legal, é possível colocar um limite de tokens para garantir que o limite (custo zero) esteja lá do LLM?

2 curtidas

Pelo que sei, acho que se você exceder o limite, a API do LLM simplesmente parará de responder. Minha conta do Google Cloud Console não tem uma conta de faturamento anexada, e eu ainda posso usar a API gratuitamente no nível gratuito, então você deve ficar bem. :+1:

5 curtidas

Uma postagem foi dividida em um novo tópico: Melhorando a detecção de spam por IA para edições e mesclagens

Onde obtenho a “Chave de API do serviço que hospeda o modelo”?

Se você estiver em nossa hospedagem, poderá usar o LLM Small.

Caso contrário, você precisará configurar um LLM e obter uma chave da OpenAI/Google/Anthropic/X/o que quer que seja…

2 curtidas

Ah, uma chave de API deles, não do Discourse.

2 curtidas

Ativar a detecção de spam por IA com o Gemini 2.0 Flash não parece ter ajudado a bloquear essas coisas. Eu nunca tive um spam tão óbvio passando pelo filtro antes. Talvez ele seja projetado especificamente para sites do Discourse?

| Erro do QuickBooks Payroll Após uma Atualização +1-800-223-1608 Resolução Passo a Passo novo | Américas - Canadá | | 1 | 2 | 1h |
|----|----|----|----|----|----|
| Entendendo o Erro de Atualização da Tabela de Impostos do QuickBooks Payroll +1-800-223-1608 novo | Américas - Canadá | | 1 | 2 | 1h |
| Entendendo o Erro PS107 do QuickBooks Payroll +1-800-223-1608 novo | Américas - Canadá | | 1 | 2 | 2h |
| Lista Completa de Números de Contato de Suporte ao Cliente QuickBooks®️ EUA: Seu Guia Especializado novo | Américas - Canadá | | 1 | 2 | 5h |
| Guia de Referência 2025 - Números de Suporte de Erros e QuickBooks®️ Payroll Completos novo | Ásia | | 1 | 2 | 5h |
| {Guia Especializado} QuickBooks®️ Suporte de Payroll® Informações de Contato – Guia EUA 2025 novo | Américas - Canadá | | 1 | 4 | 5h |
| {Ligue @ +1-855-510-6777} Como Posso Falar Com o Suporte de Reserva de Pacotes de Férias da ~#Expedia? novo | Louisiana | | 1 | 6 | 5h |
| Lista Completa de Suporte™️ Caribenho – O Guia Oficial Detalhado novo | Ásia | | 1 | 2 | 6h |
| [Ligue^Direto^Para^Agente] Que Número Conecta ao Suporte de Pacotes de Férias da Expedia? {Disque +1-855-510-6777} novo | Américas - Canadá |

Sua chave de API é inválida, por isso não está realizando nenhum teste.

Se você fizer um teste em https://www.foodtalkcentral.com/admin/plugins/discourse-ai/ai-spam e colar esse URL, você receberá um erro 500. Se você examinar os logs em
/var/discourse/shared/web-only/log/rails/production.log e procurar por " 500 ", você verá

Completed 200 OK in 399ms (Views: 123.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 22.9ms)
DiscourseAi::Completions::Endpoints::Gemini: status: 400 - body: {
  "error": {
    "code": 400,
    "message": "API key not valid. Please pass a valid API key.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_INVALID",
        "domain": "googleapis.com",
        "metadata": {
          "service": "generativelanguage.googleapis.com"
        }
      },
      {
        "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
        "locale": "en-US",
        "message": "API key not valid. Please pass a valid API key."
      }
    ]
  }
}
1 curtida

Ah, obrigado. Selecionei acidentalmente o Gemini 2.0 Flash em vez do Gemini 2.0 Flash Lite. Agora está testando OK.

1 curtida