Discourse AI - مجسمات الويب

ما هي مُقتنيات الذكاء الاصطناعي (AI Artifacts)؟

مُقتنيات الذكاء الاصطناعي (AI Artifacts) هي أدوات قوية تسمح للمستخدمين بإنشاء وتضمين والتفاعل مع مكونات ويب ديناميكية قائمة على الويب مباشرةً داخل منشور في Discourse. يمكن أن تحتوي هذه المكونات على HTML وCSS وJavaScript مخصصة، مما يتيح مجموعة متنوعة من حالات الاستخدام مثل:

  • تضمين اختبارات تفاعلية أو نماذج.
  • تصور البيانات باستخدام رسومات ورسوم متحركة غنية.
  • دمج تطبيقات أو أدوات ويب خفيفة الوزن.
  • أداة لتعلم أُطر عمل الويب ومكتبات JavaScript والمزيد.

تعمل مُقتنيات الذكاء الاصطناعي على تعزيز منشورات Discourse بسلاسة عن طريق إضافة التفاعلية مع ضمان تجربة تصفح آمنة.


إعدادات الموقع

يمكن للمسؤولين تكوين العديد من الإعدادات:

1. تفعيل الميزة

  • الإعداد: discourse_ai_enabled
    • تأكد من تفعيل هذا الإعداد العام لكي تعمل مُقتنيات الذكاء الاصطناعي.

2. أوضاع الأمان

  • الإعداد: ai_artifact_security
    • الخيارات:
      • disabled: تعطيل نظام المُقتنيات.
      • lax: تظهر المُقتنيات تلقائيًا في المنشورات دون الحاجة إلى تفاعل المستخدم.
      • hybrid: تتطلب المُقتنيات نقرة للتشغيل بشكل افتراضي، ولكن يمكن لمؤلفي المنشورات إضافة data-ai-artifact-autorun إلى ترميز التضمين لجعل مُقتنيات معينة تعمل فورًا.
      • strict: يجب على المستخدمين تفعيل المُقتنيات صراحةً في متصفحهم بالنقر على زر “عرض” أو “تشغيل”. يوصى بهذا الإعداد للبيئات التي تولي اهتمامًا كبيرًا للأمان. (الافتراضي)

3. الوصول إلى مُنشئ المُقتنيات

  • بشكل افتراضي، تقتصر شخصية مُنشئ المُقتنيات (Artifact Creator persona) على مستخدمي الموظفين فقط. يضمن هذا القيد أن الأفراد الموثوق بهم فقط هم من يمكنهم إنشاء المُقتنيات، مما يقلل من مخاطر الاستخدام غير المناسب أو الضار.
  • إذا كان الوصول الأوسع مطلوبًا، فيجب على مسؤول الموقع تكوين الأذونات يدويًا.

استخدام مُقتنيات الذكاء الاصطناعي في المنشورات

يتم إنشاء المُقتنيات تلقائيًا بواسطة شخصية مُنشئ المُقتنيات عند الطلب.

<div class="ai-artifact" data-ai-artifact-version="3" data-ai-artifact-id="71"></div>

تم إنشاء المُقتني السالف باستخدام GPT-4o ومكتبة anime.js

بمجرد إنشائها، تكون خاصة بك وبشخصية مُنشئ المُقتنيات. يمكن للمستخدمين القادرين على مشاركة محادثات الذكاء الاصطناعي (أولئك الذين ينتمون إلى المجموعات ai bot public sharing allowed) أيضًا جعل المُقتنيات عامة عن طريق مشاركة المحادثة.

بمجرد مشاركتها، يمكنك استخدام ترميز HTML التالي لعرضها في منشور:

&lt;div class="ai-artifact" data-ai-artifact-version="3" data-ai-artifact-id="71"&gt;&lt;/div&gt;

(حيث يمثل الإصدار ومعرّف المُقتنيات المُقتني الخاص بك المُتغير بالإصدار)

اعتبارات الأمان

نظرًا لأن مُقتنيات الذكاء الاصطناعي يمكنها تنفيذ HTML وCSS وJavaScript مكتوبة خصيصًا، فقد نفذت Discourse ضمانات قوية:

1. العزل في إطارات iframe

  • يتم عرض المُقتنيات داخل حاويات iframe معزولة تحتوي على سمات sandbox لتقييد العمليات غير الآمنة المحتملة مثل:
    • البرمجة النصية عبر المواقع (Cross-site scripting).
    • الوصول إلى مواقع أو واجهات برمجة تطبيقات خارجية.

2. سياسة أمن المحتوى (CSP)

3. وضع الأمان

  • الوضع الصارم (Strict Mode): يوصى بهذا الوضع للبيئات التي لا تثق تمامًا في المُقتنيات. سيحتاج المستخدمون إلى تفعيل المُقتنيات يدويًا في متصفحهم قبل عرضها.

4. الوصول والأذونات

  • تكون المُقتنيات مرئية فقط لـ:
    • منشئها.
    • المستخدمين الذين لديهم الأذونات الصحيحة لعرض المنشور المرتبط (على سبيل المثال، الرسائل الخاصة).
  • يجب تمييز المُقتنيات العامة صراحةً على أنها كذلك عن طريق مشاركة محادثة الذكاء الاصطناعي.

5. حدود الطول

  • يتم تحديد حجم HTML وCSS وJavaScript في المُقتني بـ 64 كيلوبايت لكل منها. يضمن هذا بقاء المكونات خفيفة الوزن وعدم إثقال كاهل المستخدمين أو الأنظمة.

تخزين المُقتنيات

يمكن لمُقتنيات الويب اختياريًا تخزين بيانات خاصة بكل مستخدم. للقيام بذلك، ألمح إلى مُنشئ المُقتني بـ “استخدام تخزين المستخدم” أو ما شابه.

يسمح هذا النظام بتخزين أزواج المفتاح والقيمة:

  • خاص (مرئي فقط للمسؤولين ومستخدمين محددين)
  • عام (مرئي لجميع المستخدمين بما في ذلك المجهولين)

يتم تأمين أزواج المفتاح والقيمة ضد المنشور الذي نشأ منه المُقتني، ومع ذلك، إذا شاركت مُقتنيًا علنًا، سيُسمح للجميع بإضافة مفاتيح.

للتحكم في التخزين، يمكنك استخدام الإعدادات المخفية:

  • ai_artifact_kv_value_max_length (قد تكون العناصر الافتراضية 5000 حرف أو أقصر)
  • ai_artifact_max_keys_per_user_per_artifact (الافتراضي 100)

الأسئلة الشائعة

من يمكنه إنشاء مُقتنيات الذكاء الاصطناعي؟

بشكل افتراضي، يمكن لمستخدمي الموظفين فقط (مثل المسؤولين أو المشرفين) إنشاء مُقتنيات من خلال شخصية مُنشئ المُقتنيات. تبسّط هذه الشخصية عملية تصميم أدوات الويب التفاعلية باستخدام HTML وCSS وJavaScript.

ماذا يحدث إذا نقرت على مُقتني؟

  • في الوضع المتساهل (lax)، تظهر المُقتنيات تلقائيًا.
  • في الوضع الهجين (hybrid)، تتطلب المُقتنيات نقرة بشكل افتراضي، ولكن يمكن أن تعمل تلقائيًا إذا كان التضمين يتضمن data-ai-artifact-autorun.
  • في الوضع الصارم (strict)، يؤدي النقر على زر “تشغيل” إلى تفعيل المُقتني والسماح له بالتحميل في متصفحك.

هل مُقتنيات الذكاء الاصطناعي آمنة؟

نعم. تعمل مُقتنيات الذكاء الاصطناعي في بيئات خاضعة للرقابة الصارمة:

  • يتم عزلها ولا يمكنها التفاعل مع تطبيق Discourse أو سياق المستخدم مباشرة، إلا عبر مراسلة إطار iframe.
  • يمنحك الوضع الصارم التحكم في التفعيل.
  • المُقتنيات خاصة بشكل افتراضي، ويجب عليك المشاركة بنشاط لمنح وصول عام.

هل يمكنني رؤية الكود المصدري للمُقتنيات؟

نعم. عندما ينشئ Discourse AI مُقتنيات، فإنه يتضمن ترميز CSS وJavaScript الكامل.

ما هي نماذج اللغة الكبيرة (LLMs) المدعومة؟

يمكن إنشاء المُقتنيات باستخدام أي نموذج لغة كبير (LLM) قمت بتكوينه، ومع ذلك، تتخصص نماذج LLM المختلفة وتكون مضبوطة بدقة أكبر لإنشاء المُقتنيات.

لقد رأينا نتائج جيدة مع o3، و Anthropic Claude Sonnet 3.7 - 4.0، و GPT-4.1، و Gemini Pro 2.5 والمزيد. بشكل عام، كلما كانت النماذج أكثر تقدمًا، كانت النتائج أفضل.

هناك قدر كبير من التجربة والخطأ في إنشاء المُقتنيات، والتجريب هو المفتاح.

23 إعجابًا

سيكون من الرائع أن يكون لدينا تحكم أكثر دقة في خصوصية القطع الأثرية بحيث يمكن مشاركتها مع مجموعات معينة فقط. يشبه إلى حد كبير كيف تعمل أذونات الفئات حاليًا :smiley:

أعتقد أنه إذا قمت بإضافة المجموعة إلى الرسائل الخاصة بالبوت فقد ينجح الأمر؟

إعجاب واحد (1)

سأقوم بتجربته والإبلاغ عن النتائج هنا. لدي حالة استخدام متخصصة تتطلب أن تكون القطع الأثرية متاحة فقط لمجموعة واحدة في فئة خاصة واحدة

إعجاب واحد (1)

لذلك قمت بوضع علامة على روبوت Web Artifact Creator في موضوع جديد في فئة خاصة يمكن للمجموعة الوصول إليها حتى يتمكن من إنشاء قطعة أثرية لا يمكنني أنا وتلك المجموعة المحددة رؤيتها. ومع ذلك، فإن نافذة iframe للقطعة الأثرية تعرض فقط الرسالة الافتراضية “عذرًا! هذه الصفحة غير موجودة أو خاصة.” التي تظهر عندما لا يمتلك المستخدم حق الوصول إلى صفحة معينة.

لذلك قمت بإنشاء استعلام مستكشف بيانات للتحقق من من يمكنه رؤية الموضوع، ويظهر المستخدمون في تلك المجموعة الذين يجب أن يكونوا قادرين على رؤية القطعة الأثرية أنهم قادرون على رؤيتها وفقًا لقاعدة البيانات.

لذا ربما يكون هذا خطأ؟

استعلام SQL الخاص بي
-- [params]
-- int :artifact_id = 22

WITH artifact_info AS (
  SELECT 
    a.id,
    a.user_id as creator_id,
    a.post_id,
    p.topic_id,
    t.category_id,
    t.archetype,
    c.read_restricted,
    t.title as topic_title
  FROM ai_artifacts a
  LEFT JOIN posts p ON a.post_id = p.id
  LEFT JOIN topics t ON p.topic_id = t.id
  LEFT JOIN categories c ON t.category_id = c.id
  WHERE a.id = :artifact_id
),
users_with_access AS (
  -- Creator always has access
  SELECT 
    ai.creator_id as user_id,
    'Creator' as access_reason
  FROM artifact_info ai
  
  UNION
  
  -- Users with access to private messages
  SELECT 
    tau.user_id,
    'Private Message Access' as access_reason
  FROM artifact_info ai
  JOIN topic_allowed_users tau ON ai.topic_id = tau.topic_id
  WHERE ai.archetype = 'private_message'
  
  UNION
  
  -- Group members with access to private messages
  SELECT 
    gu.user_id,
    'Private Message Group Access' as access_reason
  FROM artifact_info ai
  JOIN topic_allowed_groups tag ON ai.topic_id = tag.topic_id
  JOIN group_users gu ON tag.group_id = gu.group_id
  WHERE ai.archetype = 'private_message'
  
  UNION
  
  -- Users with access to restricted categories
  SELECT 
    gu.user_id,
    'Category Group Access' as access_reason
  FROM artifact_info ai
  JOIN category_groups cg ON ai.category_id = cg.category_id
  JOIN group_users gu ON cg.group_id = gu.group_id
  WHERE ai.read_restricted = true
    AND ai.archetype != 'private_message'
    AND cg.permission_type IN (1, 2) -- full access or create/reply/see
  
  UNION
  
  -- All users if topic is public (not restricted and not private message)
  SELECT 
    u.id as user_id,
    'Public Access' as access_reason
  FROM artifact_info ai
  CROSS JOIN users u
  WHERE (ai.read_restricted = false OR ai.read_restricted IS NULL)
    AND (ai.archetype != 'private_message' OR ai.archetype IS NULL)
    AND u.active = true
)

SELECT 
  u.id as user_id,
  u.username,
  u.name,
  u.trust_level,
  uwa.access_reason,
  ai.topic_title
FROM users_with_access uwa
JOIN users u ON uwa.user_id = u.id
CROSS JOIN artifact_info ai
WHERE u.active = true
ORDER BY u.username