Discourse AI - Artifacts Web

Qu’est-ce que les Artifacts IA ?

Les Artifacts IA sont des outils puissants permettant aux utilisateurs de créer, d’intégrer et d’interagir avec des composants web dynamiques directement dans un post Discourse. Ces composants peuvent contenir du HTML, du CSS et du JavaScript personnalisés, permettant diverses utilisations telles que :

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

Les Artifacts IA améliorent de manière transparente les posts 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 Artifacts IA fonctionnent.

2. Modes de sécurité

  • Paramètre : ai_artifact_security
    • Options :
      • disabled : Désactive le système d’artifacts.
      • lax : Les artifacts apparaissent automatiquement dans les posts sans nécessiter d’interaction utilisateur.
      • hybrid : Par défaut, les artifacts nécessitent un clic pour s’exécuter, mais les auteurs de posts peuvent ajouter data-ai-artifact-autorun au code d’intégration pour que certains artifacts s’exécutent immédiatement.
      • strict : Les utilisateurs doivent activer explicitement les artifacts dans leur navigateur en cliquant sur un bouton « Voir » 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’artifacts

  • Par défaut, l’agent Créateur d’artifacts est restreint aux seuls utilisateurs du personnel. Cette restriction garantit que seuls des individus de confiance peuvent créer des artifacts, minimisant ainsi le risque d’utilisation inappropriée ou malveillante.
  • Si un accès plus large est nécessaire, les permissions doivent être configurées manuellement par un administrateur du site.

Utilisation des Artifacts IA dans les posts

Les artifacts sont automatiquement créés par l’agent Créateur d’artifacts à la demande.

L'artifact 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 l’agent Créateur d’artifacts. Les utilisateurs pouvant partager des conversations IA (ceux qui appartiennent aux ai bot public sharing allowed groups) peuvent également rendre un artifact public en partageant la conversation.

Une fois partagé, vous pouvez utiliser le code HTML suivant pour le rendre dans un post :

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

(où la version et l’ID de l’artifact correspondent à votre artifact versionné)

Considérations de sécurité

Étant donné que les Artifacts IA peuvent exécuter du HTML, du CSS et du JavaScript personnalisés, Discourse a mis en place des garde-fous robustes :

1. Mise en sandbox dans des iframes

  • Les artifacts sont rendus dans des conteneurs iframe isolés avec des attributs sandbox pour restreindre les opérations potentiellement dangereuses telles que :
    • Le cross-site scripting (XSS).
    • L’accès à des sites ou des API externes.

2. Politique de sécurité du contenu (CSP)

3. Mode de sécurité

  • Mode strict : Recommandé pour les environnements où les artifacts ne sont pas entièrement de confiance. Les utilisateurs devront activer manuellement les artifacts dans leur navigateur avant qu’ils ne soient rendus.

4. Accès et permissions

  • Les artifacts sont visibles uniquement par :
    • Leur créateur.
    • Les utilisateurs disposant des permissions appropriées pour voir le post associé (par exemple, les messages privés).
  • Les artifacts publics doivent être explicitement marqués comme tels en partageant la conversation IA.

5. Limites de longueur

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

Stockage des artifacts

Les artifacts web peuvent optionnellement stocker des données par utilisateur. Pour ce faire, indiquez au créateur d’artifacts d’utiliser « user storage » ou une formulation similaire.

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

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

Les paires clé-valeur sont sécurisées par rapport au post d’origine de l’artifact. Cependant, si vous partagez un artifact publiquement, tout le monde pourra ajouter des clés.

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

  • 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 Artifacts IA ?

Par défaut, seuls les utilisateurs du personnel (par exemple, administrateurs ou modérateurs) peuvent créer des artifacts via l’agent Créateur d’artifacts. Cet agent simplifie le processus de conception de widgets web interactifs en utilisant HTML, CSS et JavaScript.

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

  • En mode lax, les artifacts apparaissent automatiquement.
  • En mode hybride, les artifacts 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’artifact et lui permet de se charger dans votre navigateur.

Les Artifacts IA sont-ils sûrs ?

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

  • Ils sont mis en sandbox 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 sur l’activation.
  • Les artifacts sont privés par défaut ; vous devez les partager activement pour leur donner un accès global.

Puis-je voir le code source des Artifacts ?

Oui. Lorsque Discourse AI génère des artifacts, il inclut le code complet (markup, CSS et JavaScript).

Quels LLM sont pris en charge ?

Les artifacts peuvent être générés avec n’importe quel LLM que vous avez configuré. Cependant, certains LLM sont spécialisés et mieux adaptés à la création d’artifacts.

Nous avons obtenu de bons résultats avec o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5, et d’autres. En général, les modèles les plus avancés donnent de meilleurs résultats.

La création d’artifacts implique une part importante d’essai et d’erreur ; 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