Discourse AI - آثار الويب

ما هي القطع الفنية للذكاء الاصطناعي؟

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

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

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


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

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

1. تمكين الميزة

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

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

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

3. وصول منشئ القطع الفنية

  • افتراضيًا، يكون وكيل منشئ القطع الفنية مقيدًا بمستخدمي الطاقم فقط. يضمن هذا القيد أن الأشخاص الموثوقين فقط هم من يمكنهم إنشاء القطع الفنية، مما يقلل من خطر الاستخدام غير السليم أو الخبيث.
  • إذا لزم الوصول الأوسع، فيجب تكوين الأذونات يدويًا من قبل مسؤول الموقع.

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

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

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

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

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

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

(حيث الإصدار ومعرف القطعة الفنية هما نسختك المؤرخة من القطعة الفنية)

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

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

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

  • يتم عرض القطع الفنية داخل حاويات iframe معزولة مع سمات sandbox لتقييد العمليات غير الآمنة محتملة مثل:
    • تنفيذ البرمجة النصية عبر المواقع.
    • الوصول إلى مواقع أو واجهات برمجة تطبيقات خارجية.

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

3. وضع الأمان

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

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 الاصطناعي قطعًا فنية، فإنه يتضمن كود العرض الكامل و CSS و JavaScript.

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

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

لقد شهدنا نتائج جيدة مع 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