Discourse AI - Artefatti Web

Cosa sono gli AI Artifacts?

Gli AI Artifacts sono strumenti potenti che consentono agli utenti di creare, incorporare e interagire con componenti web dinamici direttamente all’interno di un post su Discourse. Questi componenti possono contenere HTML, CSS e JavaScript personalizzati, abilitando una varietà di casi d’uso come:

  • Incorporare quiz o moduli interattivi.
  • Visualizzare dati con grafici ricchi e animazioni.
  • Integrare applicazioni o strumenti web leggeri.
  • Uno strumento per apprendere framework web, librerie JavaScript e altro.

Gli AI Artifacts migliorano in modo fluido i post di Discourse aggiungendo interattività, garantendo al contempo un’esperienza di navigazione sicura.


Impostazioni del sito

Gli amministratori possono configurare diverse impostazioni:

1. Abilitazione della funzionalità

  • Impostazione: discourse_ai_enabled
    • Assicurati che questa impostazione globale sia abilitata affinché gli AI Artifacts funzionino.

2. Modalità di sicurezza

  • Impostazione: ai_artifact_security
    • Opzioni:
      • disabled: Disabilita il sistema degli artifacts.
      • lax: Gli artifacts appaiono automaticamente nei post senza richiedere interazione dell’utente.
      • hybrid: Gli artifacts richiedono un clic per essere eseguiti per impostazione predefinita, ma gli autori dei post possono aggiungere data-ai-artifact-autorun al markup di incorporamento per far sì che specifici artifacts vengano eseguiti immediatamente.
      • strict: Gli utenti devono attivare esplicitamente gli artifacts nel proprio browser cliccando un pulsante “Visualizza” o “Esegui”. Questa impostazione è consigliata per ambienti attenti alla sicurezza. (predefinito)

3. Accesso al creatore di artifacts

  • Per impostazione predefinita, l’agente Artifact Creator è limitato esclusivamente agli utenti dello staff. Questa restrizione garantisce che solo individui fidati possano creare artifacts, minimizzando il rischio di utilizzi impropri o dannosi.
  • Se è necessario un accesso più ampio, le autorizzazioni devono essere configurate manualmente da un amministratore del sito.

Utilizzo degli AI Artifacts nei post

Gli artifacts vengono creati automaticamente dall’agente Artifact Creator su richiesta.

L'artifact sopra è stato generato utilizzando GPT-4o e la libreria anime.js

Una volta creati, sono privati solo per te e per l’agente Artifact Creator. Gli utenti che possono condividere le conversazioni con l’IA (quelli che appartengono ai gruppi ai bot public sharing allowed groups) possono anche rendere pubblico un artifact condividendo la conversazione.

Una volta condiviso, puoi utilizzare il seguente markup HTML per renderizzarlo in un post:

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

(dove la versione e l’ID dell’artifact corrispondono alla tua artifact versionata)

Considerazioni sulla sicurezza

Dato che gli AI Artifacts possono eseguire HTML, CSS e JavaScript scritti su misura, Discourse ha implementato robuste misure di protezione:

1. Sandboxing negli iframe

  • Gli artifacts vengono renderizzati all’interno di contenitori iframe isolati con attributi sandbox per limitare operazioni potenzialmente pericolose come:
    • Cross-site scripting.
    • Accesso a siti o API esterne.

2. Content Security Policy (CSP)

3. Modalità di sicurezza

  • Modalità Strict: È consigliata per ambienti in cui gli artifacts non sono completamente attendibili. Gli utenti dovranno attivare manualmente gli artifacts nel proprio browser prima che vengano renderizzati.

4. Accesso e autorizzazioni

  • Gli artifacts sono visibili solo a:
    • Il loro creatore.
    • Gli utenti con le autorizzazioni corrette per visualizzare il post associato (ad esempio, messaggi privati).
  • Gli artifacts pubblici devono essere esplicitamente contrassegnati come tali condividendo la conversazione con l’IA.

5. Limiti di lunghezza

  • La dimensione di HTML, CSS e JavaScript in un artifact è limitata a 64 KB ciascuno. Questo garantisce che i componenti rimangano leggeri e non appesantiscano gli utenti o i sistemi.

Archiviazione degli artifacts

Gli artifacts web possono opzionalmente archiviare dati per utente. Per farlo, indica al creatore dell’artifact di “utilizzare l’archiviazione utente” o qualcosa di simile.

Questo sistema permette di archiviare coppie chiave-valore:

  • Private (visibili solo agli amministratori e a utenti specifici)
  • Pubbliche (visibili a tutti gli utenti, inclusi quelli anonimi)

Le coppie chiave-valore sono protette rispetto al post da cui è originato l’artifact; tuttavia, se condividi pubblicamente un artifact, tutti potranno aggiungere chiavi.

Per controllare l’archiviazione puoi utilizzare le impostazioni nascoste:

  • ai_artifact_kv_value_max_length (gli elementi predefiniti possono essere lunghi al massimo 5000 caratteri)
  • ai_artifact_max_keys_per_user_per_artifact (predefinito 100)

FAQ

Chi può creare AI Artifacts?

Per impostazione predefinita, solo gli utenti dello staff (ad esempio amministratori o moderatori) possono creare artifacts tramite l’agente Artifact Creator. Questo agente semplifica il processo di progettazione di widget web interattivi utilizzando HTML, CSS e JavaScript.

Cosa succede se clicco su un artifact?

  • In modalità lax, gli artifacts appaiono automaticamente.
  • In modalità hybrid, gli artifacts richiedono un clic per impostazione predefinita, ma possono essere eseguiti automaticamente se l’incorporamento include data-ai-artifact-autorun.
  • In modalità strict, cliccando il pulsante “Esegui” si attiva l’artifact e si permette il caricamento nel proprio browser.

Gli AI Artifacts sono sicuri?

Sì. Gli AI Artifacts vengono eseguiti in ambienti strettamente controllati:

  • Sono isolati in sandbox e non possono interagire direttamente con l’applicazione Discourse o il contesto dell’utente, ma solo tramite messaggi iframe.
  • La modalità strict ti dà il controllo sull’attivazione.
  • Gli artifacts sono privati per impostazione predefinita; è necessario condividerli attivamente per concedere l’accesso globale.

Posso vedere il codice sorgente degli artifacts?

Sì. Quando Discourse AI genera artifacts, includerà il markup completo, il CSS e il JavaScript.

Quali LLM sono supportati?

Gli artifacts possono essere generati utilizzando qualsiasi LLM configurato; tuttavia, alcuni LLM sono specializzati e meglio ottimizzati per la creazione di artifacts.

Abbiamo ottenuto buoni risultati con o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5 e altri. In generale, i modelli più avanzati funzionano meglio.

La creazione di artifacts comporta un ampio processo di prova ed errore; la sperimentazione è fondamentale.

23 Mi Piace

Sarebbe davvero bello avere un controllo leggermente più granulare sulla privacy degli artefatti in modo che possano essere condivisi solo con determinati gruppi. Molto simile a come funzionano attualmente le autorizzazioni per categoria :smiley:

Penso che se aggiungi il gruppo al pm del bot potrebbe funzionare?

1 Mi Piace

Ho intenzione di provarlo e riferire qui. Ho un caso d’uso di nicchia che richiede che gli artefatti siano accessibili solo a un gruppo in una categoria privata

1 Mi Piace

Ho taggato il bot Web Artifact Creator in un nuovo argomento in una categoria privata a cui il gruppo ha accesso in modo che possa creare un artefatto visibile solo a me e a quel particolare gruppo. Tuttavia, la finestra dell’iframe dell’artefatto mostra solo il messaggio predefinito " Oops! That page doesn’t exist or is private." che appare quando un utente non ha accesso a una particolare pagina.

Quindi ho creato una query di esplorazione dati per verificare chi potesse visualizzare quell’argomento e gli utenti di quel gruppo che dovrebbero essere in grado di vedere l’artefatto sono effettivamente mostrati come in grado di visualizzarlo secondo il database.

Quindi forse questo è un bug?

La mia query 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 (
  -- Il creatore ha sempre accesso
  SELECT 
    ai.creator_id as user_id,
    'Accesso Creatore' as access_reason
  FROM artifact_info ai
  
  UNION
  
  -- Utenti con accesso ai messaggi privati
  SELECT 
    tau.user_id,
    'Accesso Messaggio Privato' 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
  
  -- Membri del gruppo con accesso ai messaggi privati
  SELECT 
    gu.user_id,
    'Accesso Gruppo Messaggio Privato' 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
  
  -- Utenti con accesso a categorie ristrette
  SELECT 
    gu.user_id,
    'Accesso Gruppo Categoria' 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) -- accesso completo o crea/rispondi/vedi
  
  UNION
  
  -- Tutti gli utenti se l'argomento è pubblico (non ristretto e non messaggio privato)
  SELECT 
    u.id as user_id,
    'Accesso Pubblico' 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