質問のネクロマンシー:Mattermostからの移行

こんにちは、アントン!

Mattermost から Discourse への移行は確かに可能ですが、カスタムインポートスクリプトを作成する必要があります。現時点では、既製のスクリプトは利用できません(利用可能なインポートスクリプトはこちらを参照してください)。既存のスクリプトを参考に学習することはできますが、それらの最終更新日を十分に確認し、適宜調整してください。一部のスクリプトは Discourse のテーブルへの参照が古い可能性があります。

Mattermost インポートスクリプトを含むプルリクエストは、コミュニティにとって非常に歓迎されるでしょう!

チャンネルとデータのマッピング

すべてをチャットチャンネルとしてインポートすることもできますが、他のタイプとしてマッピングすることも可能です。

  • チャンネルをカテゴリとして: 各 Mattermost チャンネルを Discourse のカテゴリとしてインポートします。チャンネル内のスレッドはトピックになり、各メッセージは投稿になります。あるいは、個々の投稿がトピックの OP になることもあります。
  • チャンネルをトピックとして: 別の方法として、各 Mattermost チャンネルを 1 つのトピックにし、メッセージを返信として追加します。この場合、スレッドは順番に表示されます。
  • DM: プライベートメッセージとしてもインポートできます。アーカイブが必要なディスカッションに適しています。

コミュニティとコンテンツの量に最適なアプローチを慎重に検討してください。

トピックタイトル

チャットをトピックと投稿にマッピングする場合、各トピックのタイトルを作成する必要があります。そのための素晴らしい方法の 1 つは、Discourse AI を使用して、トピックの実際のコンテキストでタイトルを生成することです。

AI を使用したトピックタイトルの生成

要するに、この方法を使用します。

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

LLM とマスタープロンプトが必要です。

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

system_prompt = <<-PROMPT
  I want you to act as a title generator for written pieces. I will provide you with a text,
  and you will generate a title. Please keep the title concise and under 20 words,
  and ensure that the meaning is maintained. The title will utilize the language type of the topic.
  I want you to only reply the proposed title and nothing else, do not write explanations.
  Never ever use colons in the title. Always use sentence case, using a capital letter at
  the start of the title, never start the title with a lower case letter. Proper nouns in the title
  can have a capital letter, and acronyms like LLM can use capital letters. Format some titles
  as questions, some as statements. Make sure to use question marks if the title is a question.
PROMPT

次に、好みに応じてトピックのリストにループ処理できます。

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

# filter 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) }

重要な考慮事項

  • リアクション: Mattermost は投稿ごとに複数のリアクションをサポートしています。Discourse の投稿としてインポートする場合、Discourse Chat(ネイティブで複数のリアクションをサポート)にマッピングしない限り、1 つに制限する必要があります。
  • カスタム絵文字: カスタム絵文字を持ち込むことができます。Discourse Reactions プラグインのドキュメントを参照してください。
  • チームと権限: Mattermost の「チーム」は Discourse に直接マッピングされませんが、適切なグループベースのアクセス制御を持つカテゴリ/チャンネルを設定できます。
  • 添付ファイル: Mattermost の添付ファイル(画像やドキュメント)は、Discourse のようにコンテンツに埋め込まれません。インポート時に、添付ファイルのリンク(Markdown)を追加するか、投稿本文に埋め込む必要があります。

参考資料


チャットプラットフォームの移行経験があります。当社のチームからの支援をご希望の場合は、Discourse 移行サービスページをご覧ください。

スクリプト開発やマッピングの決定中に特定の質問がある場合は、Meta でお気軽にご質問ください!

「いいね!」 5