Necromancia de perguntas: migrando do mattermost

Olá Anton!

Migrar do Mattermost para o Discourse é certamente viável, mas exigirá a criação de um script de importação personalizado, pois ainda não existe um script pronto (veja os scripts de importação disponíveis aqui). Você pode estudar os scripts existentes como referência, mas verifique as datas de última atualização e adapte-os conforme necessário, pois alguns podem ter referências desatualizadas às tabelas do Discourse.

Um pull request com um script de importação do Mattermost seria muito bem-vindo pela comunidade!

Mapeamento de Canais e Dados

Você pode importar tudo como canais de chat, mas também pode mapeá-los como outros tipos:

  • Canais como Categorias: Importe cada canal do Mattermost como uma categoria do Discourse. As threads dentro dos canais podem se tornar tópicos, com cada mensagem como uma postagem. Alternativamente, postagens individuais podem ser o OP dos tópicos.
  • Canais como Tópicos: Outra abordagem é fazer de cada canal do Mattermost um único tópico, com mensagens como respostas; as threads serão exibidas em sequência neste caso.
  • DMs: Eles também podem ser importados como mensagens privadas. É uma boa ideia para discussões que precisam ser arquivadas.

Pense cuidadosamente sobre qual abordagem se adapta melhor à sua comunidade e ao volume de conteúdo.

Títulos de Tópicos

Ao mapear um chat para tópicos e postagens, você precisa criar os títulos para cada tópico. Uma maneira incrível de fazer isso é usar Discourse AI para gerar os títulos com contexto real para o tópico.

Gerando títulos de tópicos usando IA

RESUMO: use este método:

def gen_title(llm, system_prompt, topic)
  begin
  content = topic.posts.map(&:cooked).join("\n").slice(0..10_000)
  message = [{type: :user, content: content}]
  prompt = DiscourseAi::Completions::Prompt.new(system_prompt, messages: message)

  title = llm.generate(
      prompt,
      user: Discourse.system_user,
      temperature: 0.3,
      feature_name: "ai_helper"
  )

  topic.title = title
  topic.save!
  puts "Topic: #{topic.id}, changed sucessfully."
  rescue ActiveRecord::RecordInvalid
    puts "validation error"
  end
end

Precisa de um LLM e um prompt mestre

llm = DiscourseAi::Completions::Llm.proxy(SiteSetting.ai_helper_model)

system_prompt = <<-PROMPT
  Quero que você atue como um gerador de títulos para textos escritos. Fornecerei um texto,
  e você gerará um título. Por favor, mantenha o título conciso, com menos de 20 palavras,
  e garanta que o significado seja mantido. O título utilizará o tipo de linguagem do tópico.
  Quero que você responda apenas com o título proposto e nada mais, não escreva explicações.
  Nunca use dois pontos no título. Sempre use caixa de frase, com uma letra maiúscula no
  início do título, nunca comece o título com uma letra minúscula. Nomes próprios no título
  podem ter letra maiúscula, e acrônimos como LLM podem usar letras maiúsculas. Formate alguns títulos
  como perguntas, outros como afirmações. Certifique-se de usar pontos de interrogação se o título for uma pergunta.
PROMPT

Então você pode iterar sobre uma lista de tópicos como preferir:

# gerar tudo
Topic
  .joins(:_custom_fields)
  .where('topic_custom_fields.name = ?', 'import_id')
  .find_each { |topic| gen_title(llm, system_prompt, topic) }

# filtrar PMs
Topic
  .joins(:_custom_fields)
  .where('topic_custom_fields.name = ?', 'import_id')
  .where.not(archetype: "private_message")
  .find_each { |topic| gen_title(llm, system_prompt, topic) }

Considerações Importantes

  • Reações: O Mattermost suporta múltiplas reações por postagem. Se importar como postagens do Discourse, você precisará limitar a uma, a menos que esteja mapeando para o Discourse Chat (que suporta múltiplas reações nativamente).
  • Emojis Personalizados: Você pode trazer emojis personalizados, veja a documentação do plugin Discourse Reactions.
  • Equipes e Permissões: As “equipes” do Mattermost não se mapeiam diretamente para o Discourse, mas você pode configurar categorias/canais com controles de acesso apropriados baseados em grupos.
  • Anexos: Os anexos do Mattermost (imagens e documentos) não são incorporados ao conteúdo como no Discourse. Ao importar, você precisará anexar links de anexos (Markdown) ou incorporá-los nos corpos das postagens.

Materiais de Referência


Temos experiência com migrações de plataformas de chat, se você desejar ajuda de nossa equipe, consulte nossa página de serviços de migração do Discourse.

Se você tiver perguntas específicas durante o desenvolvimento do script ou nas decisões de mapeamento, sinta-se à vontade para perguntar no Meta para obter orientação!

5 curtidas