Discourse AI - Artefacts Web

Que sont les artefacts d’IA ?

Les Artefacts d’IA sont des outils puissants qui permettent aux utilisateurs de créer, d’intégrer et d’interagir avec des composants Web dynamiques directement dans une publication Discourse. Ces composants peuvent contenir du HTML, du CSS et du JavaScript personnalisés, permettant une variété de cas d’utilisation tels que :

  • Intégrer des quiz ou des formulaires interactifs.
  • Visualiser des données avec des graphiques et des animations riches.
  • Intégrer des applications ou des outils Web légers.
  • Un outil pour apprendre sur les frameworks Web, les bibliothèques JavaScript et plus encore.

Les Artefacts d’IA améliorent de manière transparente les publications Discourse en ajoutant de l’interactivité tout en garantissant une expérience de navigation sécurisée.


Paramètres du Site

Les administrateurs peuvent configurer plusieurs paramètres :

1. Activation de la Fonctionnalité

  • Paramètre : discourse_ai_enabled
    • Assurez-vous que ce paramètre global est activé pour que les Artefacts d’IA fonctionnent.

2. Modes de Sécurité

  • Paramètre : ai_artifact_security
    • Options :
      • disabled : Désactive le système d’artefacts
      • lax : Les artefacts apparaissent automatiquement dans les publications sans nécessiter d’interaction de l’utilisateur.
      • hybrid : Les artefacts nécessitent un clic pour s’exécuter par défaut, mais les auteurs de publications peuvent ajouter data-ai-artifact-autorun au balisage d’intégration pour faire exécuter certains artefacts immédiatement.
      • strict : Les utilisateurs doivent activer explicitement les artefacts dans leur navigateur en cliquant sur un bouton « Afficher » ou « Exécuter ». Ce paramètre est recommandé pour les environnements soucieux de la sécurité. (par défaut)

3. Accès au Créateur d’Artefacts

  • Par défaut, le persona Créateur d’Artefacts est restreint au personnel uniquement. Cette restriction garantit que seules les personnes de confiance peuvent créer des artefacts, minimisant ainsi le risque d’utilisation inappropriée ou malveillante.
  • Si un accès plus large est nécessaire, les autorisations doivent être configurées manuellement par un administrateur du site.

Utilisation des Artefacts d’IA dans les Publications

Les artefacts sont automatiquement créés par le persona Créateur d’Artefacts sur demande.

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

L’artefact ci-dessus a été généré en utilisant GPT-4o et la bibliothèque anime.js

Une fois créés, ils sont privés pour vous et le persona Créateur d’Artefacts. Les utilisateurs qui peuvent partager des conversations d’IA (ceux qui appartiennent aux groupes ai bot public sharing allowed) peuvent également rendre un artefact public en partageant la conversation.

Une fois partagé, vous pouvez utiliser le balisage HTML suivant pour l’afficher dans une publication :

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

(où la version et l’ID de l’artefact sont votre artefact versionné)

Considérations de Sécurité

Étant donné que les Artefacts d’IA peuvent exécuter du HTML, du CSS et du JavaScript personnalisés, Discourse a mis en place des mécanismes de protection robustes :

1. Sandboxing dans les iFrames

  • Les artefacts sont rendus à l’intérieur de conteneurs iframe isolés avec des attributs sandbox pour restreindre les opérations potentiellement dangereuses telles que :
    • Le script intersites.
    • L’accès à des sites ou API externes.

2. Content Security Policy (CSP)

3. Mode de Sécurité

  • Mode Strict : Ceci est recommandé pour les environnements où les artefacts ne sont pas entièrement fiables. Les utilisateurs devront activer manuellement les artefacts dans leur navigateur avant qu’ils ne soient rendus.

4. Accès et Autorisations

  • Les artefacts ne sont visibles que par :
    • Leur créateur.
    • Les utilisateurs ayant les bonnes autorisations pour voir la publication associée (par exemple, messages privés).
  • Les artefacts publics doivent être explicitement marqués comme tels en partageant la conversation d’IA.

5. Limites de Taille

  • La taille du HTML, du CSS et du JavaScript dans un artefact est plafonnée à 64 Ko chacun. Cela garantit que les composants restent légers et ne surchargent pas les utilisateurs ou les systèmes.

Stockage des artefacts

Les artefacts Web peuvent éventuellement stocker des données par utilisateur. Pour ce faire, indiquez au créateur de l’artefact « utiliser le stockage utilisateur » ou similaire.

Ce système permet de stocker des paires clé, valeur :

  • Privées (visibles uniquement par les administrateurs et certains utilisateurs)
  • Publiques (visibles par tous les utilisateurs, y compris les anonymes)

Les paires clé-valeur sont sécurisées par rapport à la publication d’origine de l’artefact, cependant si vous partagez un artefact publiquement, tous seront autorisés à ajouter des clés.

Pour contrôler le stockage, vous pouvez utiliser les paramètres masqués :

  • ai_artifact_kv_value_max_length (par défaut, les éléments ne peuvent contenir que 5000 caractères ou moins)
  • ai_artifact_max_keys_per_user_per_artifact (par défaut 100)

FAQ

Qui peut créer des artefacts d’IA ?

Par défaut, seuls les utilisateurs du personnel (par exemple, les administrateurs ou les modérateurs) peuvent créer des artefacts via le Persona Créateur d’Artefacts. Ce persona simplifie le processus de conception de widgets Web interactifs à l’aide de HTML, CSS et JavaScript.

Que se passe-t-il si je clique sur un artefact ?

  • En mode lax (détendu), les artefacts apparaissent automatiquement.
  • En mode hybrid (hybride), les artefacts nécessitent un clic par défaut, mais peuvent s’exécuter automatiquement si l’intégration inclut data-ai-artifact-autorun.
  • En mode strict, cliquer sur le bouton « Exécuter » active l’artefact et lui permet de se charger dans votre navigateur.

Les artefacts d’IA sont-ils sûrs ?

Oui. Les artefacts d’IA s’exécutent dans des environnements strictement contrôlés :

  • Ils sont sandboxed et ne peuvent pas interagir directement avec l’application Discourse ou le contexte utilisateur, uniquement via la messagerie iframe.
  • Le mode strict vous donne le contrôle de l’activation.
  • Les artefacts sont privés par défaut ; vous devez partager activement pour accorder un accès global.

Puis-je voir le code source des artefacts

Oui. Lorsque Discourse AI génère des artefacts, il inclura le balisage complet, le css et le JavaScript.

Quels LLM sont pris en charge ?

Les artefacts peuvent être générés à l’aide de n’importe quel LLM que vous avez configuré, cependant différents LLM se spécialisent et sont plus finement réglés pour la création d’artefacts.

Nous avons obtenu de bons résultats avec o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5 et plus. Généralement, les modèles plus avancés donneront de meilleurs résultats.

Il y a une grande part d’essais et d’erreurs dans la création d’artefacts, l’expérimentation est la clé.

23 « J'aime »

Il serait vraiment intéressant d’avoir un contrôle un peu plus granulaire sur la confidentialité des artefacts afin qu’ils puissent être partagés uniquement avec certains groupes. Très similaire à la façon dont les autorisations de catégorie fonctionnent actuellement :smiley:

Je pense que si vous ajoutez le groupe au message privé du bot, cela pourrait fonctionner ?

1 « J'aime »

Je vais le tester et vous faire un rapport ici. J’ai un cas d’utilisation de niche qui exige que les artefacts ne soient accessibles qu’à un seul groupe dans une seule catégorie privée.

1 « J'aime »

J’ai donc tagué le bot Web Artifact Creator dans un nouveau sujet dans une catégorie privée à laquelle le groupe a accès afin qu’il puisse créer un artefact visible uniquement par moi et ce groupe particulier. Cependant, la fenêtre iframe de l’artefact affiche uniquement le message par défaut « Oops ! Cette page n’existe pas ou est privée. » qui apparaît lorsqu’un utilisateur n’a pas accès à une page particulière.

J’ai donc créé une requête d’explorateur de données pour vérifier qui pouvait voir ce sujet et les utilisateurs de ce groupe qui devraient pouvoir voir l’artefact sont effectivement montrés comme pouvant le voir selon la base de données.

Alors, est-ce peut-être un bug ?

Ma requête 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 (
  -- Le créateur a toujours accès
  SELECT
    ai.creator_id as user_id,
    'Accès Créateur' as access_reason
  FROM artifact_info ai

  UNION

  -- Utilisateurs ayant accès aux messages privés
  SELECT
    tau.user_id,
    'Accès Message Privé' 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

  -- Membres du groupe ayant accès aux messages privés
  SELECT
    gu.user_id,
    'Accès Groupe Message Privé' 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

  -- Utilisateurs ayant accès aux catégories restreintes
  SELECT
    gu.user_id,
    'Accès Groupe Catégorie' 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) -- accès complet ou créer/répondre/voir

  UNION

  -- Tous les utilisateurs si le sujet est public (non restreint et pas message privé)
  SELECT
    u.id as user_id,
    'Accès Public' 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