Hallo Anton!
Die Migration von Mattermost zu Discourse ist durchaus machbar, erfordert jedoch die Erstellung eines benutzerdefinierten Importskripts, da noch kein fertiges Skript verfügbar ist (siehe verfügbare Importskripte hier). Sie können die vorhandenen Skripte als Referenz studieren, aber überprüfen Sie bitte sorgfältig deren letzte Aktualisierungsdaten und passen Sie sie entsprechend an, da einige veraltete Verweise auf Discourse-Tabellen enthalten könnten.
Ein Pull Request mit einem Mattermost-Importskript wäre für die Community sehr willkommen!
Kanal- und Datenzuordnung
Sie können alles als Chat-Kanäle importieren, aber Sie können sie auch als andere Typen zuordnen:
- Kanäle als Kategorien: Importieren Sie jeden Mattermost-Kanal als Discourse-Kategorie. Threads innerhalb von Kanälen können zu Themen werden, wobei jede Nachricht ein Beitrag ist. Alternativ können einzelne Beiträge der OP von Themen sein.
- Kanäle als Themen: Ein anderer Ansatz ist, jeden Mattermost-Kanal zu einem einzigen Thema zu machen, wobei Nachrichten Antworten sind. Threads werden in diesem Fall sequenziell angezeigt.
- Direktnachrichten (DMs): Diese können auch als private Nachrichten importiert werden. Dies ist eine gute Idee für Diskussionen, die archiviert werden müssen.
Überlegen Sie sorgfältig, welcher Ansatz am besten zu Ihrer Community und Ihrem Inhaltsvolumen passt.
Thema-Titel
Wenn Sie einen Chat Themen und Beiträgen zuordnen, müssen Sie die Titel für jedes Thema erstellen. Eine erstaunliche Methode dafür ist die Verwendung von Discourse AI, um die Titel mit tatsächlichem Kontext für das Thema zu generieren.
Thema-Titel mit KI generieren
KURZ GESAGT, verwenden Sie diese Methode:
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
Es benötigt ein LLM und einen Master-Prompt
llm = DiscourseAi::Completions::Llm.proxy(SiteSetting.ai_helper_model)
system_prompt = <<-PROMPT
Ich möchte, dass Sie als Titelgenerator für geschriebene Texte fungieren. Ich werde Ihnen einen Text geben, und Sie werden einen Titel generieren. Bitte halten Sie den Titel kurz und unter 20 Wörtern, und stellen Sie sicher, dass die Bedeutung erhalten bleibt. Der Titel wird die Sprache des Themas verwenden. Ich möchte, dass Sie nur den vorgeschlagenen Titel antworten und nichts anderes, schreiben Sie keine Erklärungen. Verwenden Sie niemals Doppelpunkte im Titel. Verwenden Sie immer Satzschreibung, mit einem Großbuchstaben am Anfang des Titels, beginnen Sie niemals den Titel mit einem Kleinbuchstaben. Eigennamen im Titel können einen Großbuchstaben haben, und Akronyme wie LLM können Großbuchstaben verwenden. Formatieren Sie einige Titel als Fragen, einige als Aussagen. Stellen Sie sicher, dass Sie Fragezeichen verwenden, wenn der Titel eine Frage ist.
PROMPT
Dann können Sie nach Belieben eine Liste von Themen durchlaufen:
# Alles generieren
Topic
.joins(:_custom_fields)
.where('topic_custom_fields.name = ?', 'import_id')
.find_each { |topic| gen_title(llm, system_prompt, topic) }
# PMs filtern
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) }
Wichtige Überlegungen
- Reaktionen: Mattermost unterstützt mehrere Reaktionen pro Beitrag. Wenn Sie als Discourse-Beiträge importieren, müssen Sie sich auf eine beschränken, es sei denn, Sie ordnen sie Discourse Chat zu (das mehrere Reaktionen nativ unterstützt).
- Benutzerdefinierte Emojis: Sie können benutzerdefinierte Emojis mitbringen. Sehen Sie sich die Dokumentation des Discourse Reactions Plugins an.
- Teams & Berechtigungen: Mattermost “Teams” werden nicht direkt auf Discourse abgebildet, aber Sie können Kategorien/Kanäle mit entsprechenden gruppenbasierten Zugriffskontrollen einrichten.
- Anhänge: Mattermost-Anhänge (Bilder und Dokumente) sind nicht wie in Discourse in den Inhalt eingebettet. Beim Import müssen Sie Anhangslinks (Markdown) anhängen oder sie in die Beitragskörper einbetten.
Referenzmaterialien
Wir haben Erfahrung mit Migrationen von Chat-Plattformen. Wenn Sie Hilfe von unserem Team wünschen, besuchen Sie unsere Discourse-Migrationsdienste-Seite.
Wenn Sie spezifische Fragen während der Skriptentwicklung oder bei Zuordnungsentscheidungen haben, können Sie sich gerne auf Meta um Rat fragen!