أهلاً أنتوني!
إن الترحيل من Mattermost إلى Discourse قابل للتنفيذ بالتأكيد، ولكنه سيتطلب بناء نص استيراد مخصص، حيث لا يوجد نص جاهز متاح حاليًا ( انظر نصوص الاستيراد المتاحة هنا ). يمكنك دراسة النصوص الحالية كمرجع، ولكن يرجى التحقق جيدًا من تواريخ آخر تحديث لها وتكييفها وفقًا لذلك، حيث قد تحتوي بعضها على مراجع قديمة لجداول Discourse.
طلب سحب (pull request) يتضمن نص استيراد Mattermost سيكون موضع ترحيب كبير من المجتمع!
تعيين القنوات والبيانات
يمكنك استيراد كل شيء كقنوات دردشة ولكن يمكنك أيضًا تعيينها كأنواع أخرى:
- القنوات كفئات: استيراد كل قناة Mattermost كفئة Discourse. يمكن أن تصبح المواضيع داخل القنوات مواضيع، مع كل رسالة كمنشور. بدلاً من ذلك، يمكن أن تكون المنشورات الفردية هي المنشئ للمواضيع.
- القنوات كمواضيع: نهج آخر هو جعل كل قناة Mattermost موضوعًا واحدًا، مع الرسائل كردود، وسيتم عرض المواضيع بالتسلسل في هذه الحالة.
- الرسائل المباشرة: يمكن استيرادها كرسائل خاصة أيضًا. إنها فكرة جيدة للمناقشات التي تحتاج إلى أرشفة.
فكر جيدًا في النهج الذي يناسب مجتمعك وحجم المحتوى بشكل أفضل.
عناوين المواضيع
عند تعيين دردشة إلى مواضيع ومنشورات، يتعين عليك إنشاء عناوين لكل موضوع. إحدى الطرق الرائعة للقيام بذلك هي استخدام Discourse 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 (الذي يدعم ردود الفعل المتعددة أصلاً).
- الرموز التعبيرية المخصصة: يمكنك جلب الرموز التعبيرية المخصصة، انظر وثائق إضافة ردود فعل Discourse.
- الفرق والأذونات: لا تتطابق “فرق” Mattermost مباشرة مع Discourse، ولكن يمكنك إعداد فئات/قنوات مع ضوابط وصول مناسبة تعتمد على المجموعات.
- المرفقات: لا يتم تضمين مرفقات Mattermost (الصور والمستندات) في المحتوى كما هو الحال في Discourse. عند الاستيراد، ستحتاج إلى إلحاق روابط المرفقات (Markdown) أو تضمينها في جسم المنشورات.
مواد مرجعية
لدينا خبرة في عمليات ترحيل منصات الدردشة، إذا كنت ترغب في الحصول على مساعدة من فريقنا، انظر صفحة خدمات ترحيل Discourse.
إذا كانت لديك أسئلة محددة أثناء تطوير النص أو اتخاذ قرارات التعيين، فلا تتردد في طرحها على Meta للحصول على التوجيه!