Ciao Anton!
Migrare da Mattermost a Discourse è certamente fattibile, ma richiederà la creazione di uno script di importazione personalizzato, poiché non esiste ancora uno script predefinito (vedi gli script di importazione disponibili qui). Puoi studiare gli script esistenti come riferimento, ma ti preghiamo di controllare attentamente le date dei loro ultimi aggiornamenti e di adattarli di conseguenza, poiché alcuni potrebbero avere riferimenti obsoleti alle tabelle di Discourse.
Una pull request con uno script di importazione per Mattermost sarebbe molto apprezzata dalla community!
Mappatura di canali e dati
Puoi importare tutto come canali di chat, ma puoi anche mapparli come altri tipi:
- Canali come Categorie: Importa ogni canale Mattermost come una categoria Discourse. I thread all’interno dei canali possono diventare argomenti, con ogni messaggio come post. In alternativa, i singoli post possono essere l’OP degli argomenti.
- Canali come Argomenti: Un altro approccio è rendere ogni canale Mattermost un singolo argomento, con i messaggi come risposte; i thread verranno visualizzati in sequenza in questo caso.
- DM: Possono essere importati anche come messaggi privati. È una buona idea per le discussioni che necessitano di archiviazione.
Pensa attentamente a quale approccio si adatta meglio alla tua community e al volume dei contenuti.
Titoli degli argomenti
Quando mappi una chat in argomenti e post, devi creare i titoli per ogni argomento. Un modo fantastico per farlo è usare Discourse AI per generare i titoli con un contesto effettivo per l’argomento.
Generazione di titoli di argomenti tramite AI
In breve, usa questo metodo:
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
Richiede un LLM e un prompt master
llm = DiscourseAi::Completions::Llm.proxy(SiteSetting.ai_helper_model)
system_prompt = <<-PROMPT
Voglio che tu agisca come un generatore di titoli per testi scritti. Ti fornirò un testo,
e tu genererai un titolo. Per favore, mantieni il titolo conciso, entro le 20 parole,
e assicurati che il significato sia mantenuto. Il titolo utilizzerà il tipo di lingua dell'argomento.
Voglio che tu risponda solo con il titolo proposto e nient'altro, non scrivere spiegazioni.
Non usare mai due punti nel titolo. Usa sempre la capitalizzazione delle frasi, usando una lettera maiuscola all'inizio
del titolo, non iniziare mai il titolo con una lettera minuscola. I nomi propri nel titolo
possono avere una lettera maiuscola e gli acronimi come LLM possono usare lettere maiuscole. Formatta alcuni titoli
come domande, altri come affermazioni. Assicurati di usare punti interrogativi se il titolo è una domanda.
PROMPT
Quindi puoi ciclare su un elenco di argomenti come preferisci:
# genera tutto
Topic
.joins(:_custom_fields)
.where('topic_custom_fields.name = ?', 'import_id')
.find_each { |topic| gen_title(llm, system_prompt, topic) }
# filtra PM
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) }
Considerazioni importanti
- Reazioni: Mattermost supporta più reazioni per post. Se importi come post Discourse, dovrai limitarti a una, a meno che tu non stia mappando in Discourse Chat (che supporta nativamente più reazioni).
- Emoji personalizzate: Puoi portare con te le emoji personalizzate, consulta la documentazione del plugin Discourse Reactions.
- Team e permessi: I “team” di Mattermost non si mappano direttamente a Discourse, ma puoi impostare categorie/canali con appropriati controlli di accesso basati sui gruppi.
- Allegati: Gli allegati di Mattermost (immagini e documenti) non sono incorporati nel contenuto come in Discourse. Durante l’importazione, dovrai aggiungere i link agli allegati (Markdown) o incorporarli nei corpi dei post.
Materiali di riferimento
Abbiamo esperienza con le migrazioni di piattaforme di chat, se desideri l’aiuto del nostro team, consulta la nostra pagina dei servizi di migrazione Discourse.
Se hai domande specifiche durante lo sviluppo dello script o le decisioni di mappatura, non esitare a chiedere su Meta per una guida!