Distúrbio de Discurso

Também modifiquei sua consulta para exibir a pontuação de uma maneira mais conveniente usando o Explorador de Dados.
Créditos para o ChatGPT e Pistas do PostgreSQL por Leonardo:

SELECT
  json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS severe_toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS obscene,
  json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS identity_attack,
  json_extract_path_text(pcf.value::json, 'classification', 'insult') AS insult,
  json_extract_path_text(pcf.value::json, 'classification', 'threat') AS threat,
  json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS sexual_explicit,
  json_extract_path_text(pcf.value::json, 'model') AS model,
  pcf.created_at,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post__id
INNER JOIN
  topics AS t ON t.id = p.topic_id
WHERE
  pcf.name = 'disorder' 
  AND t.archetype = 'regular'
ORDER BY created_at DESC
E esta modificação retornará aquelas linhas onde qualquer um dos valores de classificação for maior que 50 (ou o que você definir)
-- [params]
-- int :threshold = 50
SELECT DISTINCT ON (p.id, pcf.created_at)
  json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS severe_toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS obscene,
  json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS identity_attack,
  json_extract_path_text(pcf.value::json, 'classification', 'insult') AS insult,
  json_extract_path_text(pcf.value::json, 'classification', 'threat') AS threat,
  json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS sexual_explicit,
  json_extract_path_text(pcf.value::json, 'model') AS model,
  p.id as post_id,
  pcf.created_at,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
INNER JOIN
  topics AS t ON t.id = p.topic_id
WHERE
  pcf.name = 'disorder' 
  AND t.archetype = 'regular'
GROUP BY p.id, pcf.value, pcf.created_at
HAVING 
  CAST(json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'insult') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'threat') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS FLOAT) > :threshold
ORDER BY pcf.created_at DESC, p.id

Você também pode modificá-lo introduzindo mais alguns parâmetros para poder definir diferentes limites para relatar usando o Explorador de Dados.

Por favor, note: isso retornará apenas posts públicos, sem acessar mensagens privadas.

3 curtidas

Estamos trabalhando exatamente neste recurso agora!

Também estamos planejando usar as taxas de falso positivo/negativo para executar um otimizador que possa sugerir os melhores limites para cada opção, então guarde essa informação, pois será útil em um futuro próximo.

5 curtidas

Ótimo. Que bom saber.
Até agora, tendo a recusar/ignorar todas as sinalizações que o Disorderbot faz, mesmo com os limites elevados para um máximo de 90-100. Mas, devido à natureza do fórum em que estamos testando (NSFW), a IA se confunde facilmente se a comunicação é realmente tóxica ou não. Enquanto não for tão confiável para o nosso caso de uso, continuaremos a usá-lo, mas usaremos seus relatórios apenas para “reforçar” outros relatórios sobre postagens realmente tóxicas.

Assim que encontrarmos limites melhores para usar a longo prazo, poderemos ativar avisos preventivos quando o usuário tentar postar algo realmente tóxico.

É isso que suspeito quando a IA se torna mainstream. Ela permitirá a censura e limitará o questionamento genuíno do status quo, que é necessário para a saúde de todas as comunidades no mundo.

Não limitar ou proibir, educar e discutir. Talvez haja uma maneira de usar as ferramentas sem o efeito colateral (como minhas preocupações, que é o efeito desejado), mas vejo que não é possível no momento.

Obrigado pelo seu feedback, ele tem valor para mim. E, claro, obrigado à equipe por manter o Discourse atualizado e melhorando como sempre :slight_smile:

Definir todos os limites para 100 e depender apenas dos mais extremos, como “toxicidade severa” e “ameaça”, é algo que pode ser adotado em comunidades como essa.

3 curtidas

Obrigado. Atualmente está configurado assim e ainda está muito sensível. Vou aumentar ainda mais e ver como vai

1 curtida

Teria que ver as classificações brutas, mas eu aumentaria a de insulto primeiro também.

É melhor eu te afastar de ler isso :smiley: Aquilo pode ser realmente NSFW, mesmo em forma de texto
Aumentei o primeiro limite para 100 também, vamos ver como vai agora :smiley:

1 curtida

Espero sinceramente que seja possível que o Disorder não verifique (ou não relate) mensagens privadas nas versões futuras. Não acessamos e achamos que a IA verificando conversas privadas é altamente antiética.

4 curtidas

Sim, é a mesma coisa que @davidkingham perguntou, vamos colocar isso em nosso roteiro.

3 curtidas

…e inglês? :sweat_smile:

Além disso, estou me perguntando em que medida isso pode substituir o Akismet. Estamos com uma taxa de discordância de 97% nas sinalizações do Akismet no momento. Ele parece simplesmente reagir a postagens com muitos dígitos nelas, então, se você estiver postando logs de trabalho, onde cada linha começa com um timestamp…

1 curtida

A guerra armamentista entre spam e detecção de spam acabou de se tornar nuclear com o advento de LLMs amplamente disponíveis. Estamos trabalhando arduamente em recursos usando uma ampla gama de modelos e, embora o spam não seja nossa prioridade no momento, é algo que investigaremos.

4 curtidas

Ok, então: eu liguei. Como sei que está funcionando?

Além de diminuir os limites para capturar tudo, quero dizer.

Existe um modo de diagnóstico ou um log onde posso ver qual pontuação uma determinada postagem recebeu?

2 curtidas

A maneira mais fácil é provocá-lo postando algo insultuoso. Certifique-se de que o grupo do seu usuário não seja ignorado nas configurações do plugin.

A melhor maneira é consultar o Data Explorer. Consulte uma de minhas consultas neste post:

1 curtida

Obrigado. Isso está retornando zeros em todas as postagens até agora… é esperado?

1 curtida

A maioria das nossas postagens também tem 0 em todos os critérios. Isso é normal para um fórum com uma comunicação saudável.

2 curtidas

Legal — eu não tinha certeza de quão propenso o modelo é a disparar. :slight_smile:

1 curtida

Instalei o plugin, mas ele não está funcionando, preciso fazer alguma configuração extra?

Estou vendo um grande número de erros a seguir do plugin:
Job exception: uninitialized constant Jobs::ClassifyChatMessage::ChatMessage

O problema parece ocorrer quando um dos meus plugins cria uma mensagem de chat usando o seguinte comando:
Chat::MessageCreator.create(chat_channel: matching_channel, user: message_user, content: raw).chat_message

Obrigado

1 curtida

Ohhh isso deveria ter quebrado com a nova reorganização do Chat. Estamos prestes a lançar um novo plugin que incorporará a funcionalidade deste nos próximos dias, então fique atento.

5 curtidas