Discourse AI - Artefacts Web

Que sont les artefacts IA ?

Les artefacts IA sont de puissants outils qui permettent aux utilisateurs de créer, d’intégrer et d’interagir avec des composants dynamiques basés sur le Web 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 :

  • L’intégration de quiz ou de formulaires interactifs.
  • La visualisation de données avec des graphiques et des animations riches.
  • L’intégration d’applications ou d’outils Web légers.
  • Un outil pour en apprendre davantage sur les frameworks Web, les bibliothèques JavaScript et plus encore.

Les artefacts 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 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 utilisateur.
      • strict : Les utilisateurs doivent activer explicitement les artefacts 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’artefacts

  • Par défaut, le persona du créateur d’artefacts est réservé aux utilisateurs du 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 requis, les autorisations doivent être configurées manuellement par un administrateur du site.

Utilisation des artefacts IA dans les publications

Les artefacts sont automatiquement créés par le persona du créateur d’artefacts à la 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é à l’aide de GPT-4o et de la bibliothèque anime.js

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

Une fois partagé, vous pouvez utiliser le balisage HTML suivant pour le rendre 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 IA peuvent exécuter du HTML, du CSS et du JavaScript personnalisés, Discourse a mis en œuvre des mesures de sécurité 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 cross-site scripting.
    • L’accès aux sites ou API externes.

2. Politique de sécurité du contenu (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 afficher la publication associée (par exemple, les messages privés).
  • Les artefacts 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 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, suggérez au créateur d’artefacts « utiliser le stockage utilisateur » ou similaire.

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

  • Privé (visible uniquement par les administrateurs et les utilisateurs spécifiques)
  • Public (visible par tous les utilisateurs, y compris les anonymes)

Les paires clé-valeur sont sécurisées par rapport à la publication dont l’artefact est originaire, mais si vous partagez un artefact publiquement, tout le monde sera autorisé à ajouter des clés.

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

  • ai_artifact_kv_value_max_length (les éléments par défaut ne peuvent faire que 5000 lettres ou moins)
  • ai_artifact_max_keys_per_user_per_artifact (par défaut 100)

FAQ

Qui peut créer des artefacts 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 du 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, les artefacts apparaissent automatiquement.
  • En mode strict, cliquer sur le bouton « Exécuter » active l’artefact et permet son chargement dans votre navigateur.

Les artefacts IA sont-ils sûrs ?

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

  • Ils sont isolés et ne peuvent pas interagir directement avec l’application Discourse ou le contexte utilisateur, seulement 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 donner un accès global.

Puis-je voir le code source des artefacts ?

Oui. Lorsque Discourse AI génère des artefacts, il inclut le balisage, le CSS et le JavaScript complets.

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é, mais divers 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.

La création d’artefacts implique une grande part d’essais et d’erreurs, l’expérimentation est la clé.

21 « 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