Resumo do tópico do Discourse AI 🤖

|||
-|-|-|
:information_source: | Resumo | Usa um modelo de linguagem de IA remoto para preparar e postar um resumo de um tópico.
:hammer_and_wrench: | Link do Repositório | GitHub - merefield/discourse-ai-topic-summary: Uses a remote AI language model to prepare and post a summary of a Topic
:open_book: | Guia de Instalação | Como instalar plugins no Discourse
:heart: | Patrocínio | Por favor, considere se tornar um patrocinador contínuo do meu trabalho de código aberto em um nível que se adeque aos recursos e necessidades de sua organização ou suas, para garantir que este plugin receba a manutenção que merece e continue funcionando para seu site no futuro.

Gostando deste plugin? Por favor, dê :star: no GitHub ! :pray:

Funcionalidades

  • Resumos de Tópicos gerados por IA:
    • Você pode escolher quando eles são gerados pela primeira vez e o número de novas postagens necessárias para recriá-los, tornando o plugin econômico.
    • Escolha do local de exibição do Tópico, seja no Topo ou em uma barra lateral (componente de tema Bars necessário)
    • Sistema de votação para permitir que a comunidade vote em resumos ruins. Se os votos excederem um limite, um novo resumo é buscado.
    • Exibi-los na Lista de Tópicos - Resumos de IA são mostrados em vez de trechos quando disponíveis
  • Sistema de auto-tagging
    • Reutiliza o resumo para marcar inteligentemente seu Tópico
    • Escolha entre duas estratégias para melhor se adequar ao seu caso de uso
  • Auto-gerar uma Miniatura de Tópico que retrata o Tópico
  • Todos os prompts são editáveis em Personalizar → Texto.
  • Este plugin foi o primeiro plugin de IA para Discourse :1st_place_medal:

(NB, esta é apenas uma prévia da interface do usuário usando algumas configurações de desenvolvimento aleatórias horríveis, os resultados são vastamente melhores em dados reais)

Após um número mínimo de Postagens, se um Tópico estiver em uma Categoria incluída no escopo, o plugin enviará o texto do tópico para um Modelo de Linguagem Grande Open AI com um prompt e postará a resposta, destinada a ser um resumo do conteúdo, o que ele consegue fazer muito bem. Há uma escolha de modelo.

Os resumos são frequentemente surpreendentemente bons, ocasionalmente sublimes. No entanto, quando um não é bom o suficiente, adicionei um mecanismo de votação comunitária para forçar a atualização de resumos ruins após um limite definido.

Os resumos são, em qualquer caso, buscados novamente quando um número definido de postagens adicionais foi feito.

Você pode modificar o prompt e os limites

NOTA IMPORTANTE: os resumos nunca são expostos a anônimos, portanto o texto não será rastreável (você pode ou não achar isso bom, mas pelo menos os rastreadores operarão apenas em seus dados humanos genuínos).

Suporte de Auto-tagging:

Cansado de marcar Tópicos? Deixe a IA fazer isso por você! (Relativamente inteligentemente!)

Às vezes, a IA fica muito criativa, apesar da direção que estamos dando aqui, então você pode restringi-la ao conjunto das existentes.

Você pode criar rapidamente um usuário não administrador para esse fim a partir do console rails usando:

rake admin:create (não dê privilégios de administrador a este usuário)

(Esta é uma solução alternativa um pouco improvisada porque a API interna atual do Discourse para marcação atualmente não permite especificar “sem novas tags”, então a única maneira de evitar isso facilmente no momento é criá-las como um usuário que não tem esse privilégio (ou seja, nível de confiança inferior a min_trust_to_create_tag))

Opcionalmente, substitua trechos na Lista de Tópicos pelo Resumo da IA

A configuração ai_topic_summary_expose_as_excerpt quando habilitada substituirá o trecho nas Listas de Tópicos que exibem trechos (por exemplo, via Componente de Tema como Topic List Previews ou Topic List Excerpts), com o resumo da IA, se disponível.

Alternando Trechos:

Você pode usá-lo para meu Componente de Tema Topic List Previews (TLP) - #592 by merefield

Imagem Opcional representando o assunto do Tópico

Adicionei um recurso opcional de geração de miniaturas a este plugin.

Ele representará o resumo em uma imagem que ele adicionará automaticamente ao topo do OP.

  • Você deve habilitá-lo nas configurações do plugin
  • Você pode opcionalmente eleger para excluir automaticamente a última imagem superior a cada vez
  • Você pode editar o prompt através do link nas configurações do plugin para que possa influenciar o estilo e o conteúdo (mas isso será aplicado a todas as imagens geradas subsequentemente)

Aproveite :framed_picture:

Limitações

Devido aos limites de tokens, atualmente é bom para no máximo cerca de 160 Postagens (dependendo do modelo!), então não incluirá material em Postagens após um certo ponto. Isso quase certamente mudará no futuro, à medida que os modelos se tornarem mais poderosos e os serviços mais sofisticados.

Limites de taxa e custos

A recuperação de dados do Open AI não é gratuita. No entanto, os limites de taxa são implicitamente baseados em Postagens. Você tem controle sobre quantas postagens são necessárias antes que novos resumos sejam buscados. Isso provavelmente não será um problema.

Suporte a “Barras” Laterais!!

Agora existe um widget compatível com Bars que vem com o plugin. Você só precisa instalar o Componente de Tema Bars e configurá-lo:

Após a instalação, você pode desativar o resumo padrão no topo do tópico e confiar no widget na barra lateral.

Notas

Aviso Legal: Eu não sou responsável pelo que o LLM responder. Por favor, entenda os prós e contras de um LLM e o que eles são e não são capazes de fazer e suas limitações. Eles são muito bons em criar textos convincentes e conscientes do contexto, mas podem estar factualmente errados.

Nota Importante de Privacidade: Seus dados do fórum estão sendo enviados para o Open AI. Embora quase certamente não sejam incorporados aos seus modelos pré-treinados, eles usarão os dados em suas análises e logs. Certifique-se de adicionar este fato aos Termos de Serviço e declarações de privacidade do seu fórum. Links relacionados: Termos de uso, Política de privacidade

Direitos Autorais: O Open AI fez uma declaração sobre Direitos Autorais aqui: O OpenAI reivindicará direitos autorais sobre os resultados que gero com a API? | Central de Ajuda OpenAI

A FAZER

  • Adicionar testes frontais e traseiros :construction:
  • Adicionar mais configuração de usuário para afetar o estilo da resposta :white_check_mark:
  • Adicionar suporte a nome de modelo personalizado :white_check_mark:
  • Adicionar suporte GPT-4 quando disponível :white_check_mark:
  • Tornar a configuração do modelo uma lista suspensa :white_check_mark:
  • Adicionar suporte de widget para o plugin Layouts :white_check_mark:
30 curtidas

Era só uma questão de tempo até conseguirmos isso!

Mas minha principal pergunta é: quão caro isso pode ficar para nós?

4 curtidas

Já está ativo em um dos meus fóruns há alguns dias. Está ativo em quase todas as categorias públicas.

É difícil responder porque não sei o quão ativo é o seu fórum.

Minha sugestão é experimentá-lo em uma categoria e ver como você se sai.

Há um painel decente.

Após desenvolver dois plugins baseados em GPT3 (o modelo mais caro) e ir ao ar em um site no final do mês passado, o meu ficou assim em fevereiro:

Então, provavelmente menos do que seus custos de e-mail.

10 curtidas

Oh, isso pode ser bom para o crescimento dos nossos tópicos de glossário.

Isso deveria funcionar em espanhol?

3 curtidas

Não tenho ideia, talvez você precise alterar o prompt nas configurações. Mas tente!

(esta deveria ser uma string localizada, vou mudar isso em breve)

4 curtidas

Obrigado @merefield - este parece ser um ótimo plugin!

Eu o ativei e inseri minha chave de API, habilitei categorias, etc., mas ainda não vi nenhum resumo. Existe alguma maneira de monitorar seu progresso em meu fórum Discourse? Não consigo ver nada nos logs ou no sidekiq (embora admito que ainda não dei uma olhada aprofundada).

3 curtidas

Olá Chris, ele reage a novas postagens. Se elas estiverem dentro dos limites e atenderem aos critérios de localização da categoria, ele criará um resumo.

3 curtidas

Entendi, obrigado pelo esclarecimento @merefield

2 curtidas

Olá,

Minha reconstrução falha quando habilito este plugin de resumo. Não sei se isso tem a ver com minha configuração subjacente ou com plugins conflitantes. Anexo alguns detalhes, caso seja útil.

Comentar o plugin ai-topic-summary resolve o problema e a compilação é bem-sucedida.

Muito obrigado por qualquer orientação.

I, [2023-03-12T17:24:25.390052 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-03-12T17:24:31.668769 #1]  INFO -- : discourse-ai-topic-summary já está na versão compatível mais recente
discourse-assign já está na versão compatível mais recente
discourse-chat-integration já está na versão compatível mais recente
discourse-chatbot já está na versão compatível mais recente
discourse-checklist já está na versão compatível mais recente
discourse-solved já está na versão compatível mais recente
docker_manager já está na versão compatível mais recente

I, [2023-03-12T17:24:31.677801 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Gem::LoadError: não é possível ativar ruby-openai-3.4.0, já ativado ruby-openai-3.3.0
/var/www/discourse/lib/plugin_gem.rb:26:in `load'
/var/www/discourse/lib/plugin/instance.rb:796:in `gem'
/var/www/discourse/plugins/discourse-chatbot/plugin.rb:9:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:693:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:693:in `activate!'
/var/www/discourse/lib/discourse.rb:352:in `block in activate_plugins!'
/var/www/discourse/lib/discourse.rb:349:in `each'
/var/www/discourse/lib/discourse.rb:349:in `activate_plugins!'
/var/www/discourse/config/application.rb:216:in `block in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:216:in `<class:Application>'
/var/www/discourse/config/application.rb:75:in `<module:Discourse>'
/var/www/discourse/config/application.rb:74:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
(See full trace by running task with --trace)
I, [2023-03-12T17:24:38.020166 #1]  INFO -- : gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
When you HTTParty, you must party hard!
Successfully installed httparty-0.21.0
1 gem installed
gem install ruby-openai -v 3.3.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
Successfully installed ruby-openai-3.3.0
1 gem installed
gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
When you HTTParty, you must party hard!
Successfully installed httparty-0.21.0
1 gem installed
gem install ruby-openai -v 3.4.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
Successfully installed ruby-openai-3.4.0
1 gem installed

I, [2023-03-12T17:24:38.021523 #1]  INFO -- : Terminating async processes
I, [2023-03-12T17:24:38.022106 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 41
2023-03-12 17:24:38.022 UTC [41] LOG:  received fast shutdown request
I, [2023-03-12T17:24:38.022874 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 102
102:signal-handler (1678641878) Received SIGTERM scheduling shutdown...
2023-03-12 17:24:38.035 UTC [41] LOG:  aborting any active transactions
2023-03-12 17:24:38.046 UTC [41] LOG:  background worker "logical replication launcher" (PID 50) exited with exit code 1
2023-03-12 17:24:38.049 UTC [45] LOG:  shutting down
102:M 12 Mar 2023 17:24:38.053 # User requested shutdown...
102:M 12 Mar 2023 17:24:38.054 * Saving the final RDB snapshot before exiting.
102:M 12 Mar 2023 17:24:38.120 * DB saved on disk
102:M 12 Mar 2023 17:24:38.122 # Redis is now ready to exit, bye bye...
2023-03-12 17:24:38.153 UTC [41] LOG:  database system is shut down


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1043 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
3 curtidas

Oops, minha falha. É um conflito entre meus dois plugins de IA. Resolverei e retornarei! :sweat_smile: Desculpas!

5 curtidas

Tente isto: FIX: conflict with chatbot · merefield/discourse-ai-topic-summary@0067eaf · GitHub

5 curtidas

Muito obrigado por responder tão rapidamente. Tentarei isso amanhã. Estou ansioso para ver este plugin em ação!

3 curtidas

Atualização rápida: tive meu primeiro resumo real acionado e ele fez um trabalho razoavelmente bom. @merefield Acho que você acertou este plugin :-). Acho que, na verdade, colocar o ChatGPT para funcionar assim tem um potencial futuro muito melhor do que apenas adicioná-lo a um tópico de discussão.

Aqui está o resumo que foi gerado e que ficou no topo do tópico, fazendo um ótimo trabalho em encorajar outros a ler - ou não.

Recebi um erro (erro 500) ao postar uma atualização que teria acionado o resumo. Isso ocorreu porque tentei usar gpt-3.5-turbo nas configurações. Talvez, se houver um erro na API do ChatGPT, seja melhor permitir o envio da postagem em vez de o usuário receber um erro 500 com o qual não sabe o que fazer.

Nos logs, ficou claro o que eu havia feito de errado

StandardError (Este é um modelo de chat e não é suportado no endpoint v1/completions. Você quis dizer usar v1/chat/completions?)

Evoluções potenciais:

  • Permitir que o proprietário do tópico / administrador remova o resumo se ele não for relevante / apropriado?
  • Talvez um lugar para ver todos os resumos em uma categoria / no geral

Fora isso, estou ansioso para ver como isso evolui. Muito obrigado pelo que você fez até agora. Meu site é muito pequeno, com apenas alguns usuários, mas posso realmente ver seu potencial.

4 curtidas

Ótimo feedback, obrigado. São boas ideias.

Sim, um botão de administrador/autor seria muito bom. Vou adicionar ao roadmap.

Legal!

Será que “o lugar para ver a lista de resumos” é, na verdade, um trecho alternativo na lista de tópicos?

Vou adicionar ao roadmap.

Sim, eu deveria converter isso para um menu suspenso como fiz com o Chatbot. Boa tentativa, no entanto :wink:

O GPT-4 está chegando, o que melhorará muito os resumos e lidará com tópicos muito mais longos.

6 curtidas

Você pode me dizer se o plugin atualmente suporta ChatGPT 4 e a API do aplicativo POE (plataforma de chat de IA desenvolvida pela Quora)?

3 curtidas

Lol, me dê uma chance! :sweat_smile: Pelo que sei, só foi anunciado ontem?

Muito poucos desenvolvedores tiveram acesso à API até agora. Há uma lista de espera. Portanto, os usuários do plugin provavelmente não conseguirão se conectar em nenhum caso.

(Você notou o título do tópico, aliás?)

Não e sem planos no momento. Qual seria o benefício? É conhecido por se destacar na sumarização?

2 curtidas

^^
Desculpe por ter sido pouco claro ^^ eu só queria saber se você está interessado em integrá-los no futuro? Estou acompanhando as notícias sobre o GPT 04 e é surpreendente e especial para nós da comunidade vietnamita.

3 curtidas

Obrigado pelo seu interesse. Quanto ao suporte ao GPT-4, deixe-me responder desta forma:

Hell Yeah Dcuniverse GIF by DC

Provavelmente adicionarei primeiro ao Chatbot, mas certamente passarei para o Resumo de Tópicos de IA logo depois.

Estou aguardando o e-mail da Open AI … (e depois um pouco de tempo livre!)

5 curtidas

Na verdade, pensei em uma solução um pouco mais simples para isso, para que não precisemos sobrecarregar a interface do usuário:

Que tal simplesmente darmos configurações para “peso de voto” para Administrador e Autor?

Assim, você pode definir o peso de voto do Autor para 3 e, se o limite for 3, isso resultará na geração de um novo resumo.

A desvantagem de ambas as soluções (botão ou ponderação que corresponde ao limite) é que o Autor pode simplesmente spammar por novos resumos, custando muito em chamadas de API.

Então, sugiro que você faça o voto dos autores ter um peso logo abaixo do limite (mas mais do que um usuário regular) e o administrador no limite?

Então não precisamos mudar a interface do usuário e apenas incorporar isso na lógica e nas configurações do back-end.

Votos negativos do administrador sempre criarão um novo resumo e redefinirão a contagem.

Pensamentos @JamesPick?

4 curtidas

Concordo com sua preocupação sobre o spam de novos resumos.
Acho que não se trata tanto de a IA fornecer um resumo ruim, mas sim de o tópico não ser propício a um bom resumo. Talvez o tópico tenha perdido o foco ou se tornado mais um chat e as postagens principais se perdem do que é enviado ao ChatGPT.

Em última análise, quando o administrador / proprietário do tópico vê claramente que o resumo não produzirá nada de significativo para o tópico, ele pode cancelá-lo.

Suponho que, com o tempo, os recursos possam ser adicionados para selecionar as postagens específicas que podem ser escolhidas para enviar à API para resumo.

Eu estava pensando nisso para algo como este tópico. Você poderia sinalizar sua primeira postagem para ser sempre incluída em um resumo? E então, talvez adicionar algumas outras que mais se adequem a um resumo.

Você poderia até ter uma opção de ‘gerar resumo’ onde, mesmo quando um tópico tem apenas uma postagem, um resumo pode ser gerado. Isso se encaixa bem com seu comentário anterior

4 curtidas