Discourse AI - Artefatti Web

Cosa sono gli Artefatti AI?

Gli Artefatti AI sono potenti strumenti che consentono agli utenti di creare, incorporare e interagire con componenti dinamici basati sul web direttamente all’interno di un post di 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 ricche grafiche e animazioni.
  • Integrare applicazioni o strumenti web leggeri.
  • Uno strumento per imparare framework web, librerie JavaScript e altro ancora.

Gli Artefatti AI migliorano senza soluzione di continuità i post di Discourse aggiungendo interattività e garantendo 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 Artefatti AI funzionino.

2. Modalità di Sicurezza

  • Impostazione: ai_artifact_security
    • Opzioni:
      • disabled: Disabilita il sistema di artefatti
      • lax: Gli artefatti appaiono automaticamente nei post senza richiedere l’interazione dell’utente.
      • strict: Gli utenti devono attivare esplicitamente gli artefatti nel loro browser facendo clic su un pulsante “Visualizza” o “Esegui”. Questa impostazione è consigliata per ambienti attenti alla sicurezza. (predefinito)

3. Accesso al Creatore di Artefatti

  • Per impostazione predefinita, la persona del Creatore di Artefatti è riservata solo agli utenti dello staff. Questa restrizione garantisce che solo individui fidati possano creare artefatti, riducendo al minimo il rischio di un uso improprio o dannoso.
  • Se è richiesto un accesso più ampio, le autorizzazioni devono essere configurate manualmente da un amministratore del sito.

Utilizzo degli Artefatti AI nei Post

Gli artefatti vengono creati automaticamente dalla persona del Creatore di Artefatti su richiesta.

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

Una volta creati, sono privati per te e per la persona del Creatore di Artefatti. Gli utenti che sono in grado di condividere conversazioni AI (quelli che appartengono ai ai bot public sharing allowed groups) possono anche rendere pubblico un artefatto 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’artefatto sono il tuo artefatto versionato)

Considerazioni sulla Sicurezza

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

1. Sandboxing in iFrame

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

2. Content Security Policy (CSP)

3. Modalità di Sicurezza

  • Modalità Strict: Questa è consigliata per ambienti in cui gli artefatti non sono completamente fidati. Gli utenti dovranno attivare manualmente gli artefatti nel loro browser prima che vengano renderizzati.

4. Accesso e Autorizzazioni

  • Gli artefatti sono visibili solo a:
    • Il loro creatore.
    • Utenti con le giuste autorizzazioni per visualizzare il post associato (ad esempio, messaggi privati).
  • Gli artefatti pubblici devono essere esplicitamente contrassegnati come tali condividendo la conversazione AI.

5. Limiti di Lunghezza

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

Archiviazione degli Artefatti

Gli artefatti web possono facoltativamente archiviare dati per utente. Per farlo, suggerisci al creatore dell’artefatto con “usa archiviazione utente” o simili.

Questo sistema consente di archiviare coppie chiave, valore:

  • Privato (visibile solo agli amministratori e a utenti specifici)
  • Pubblico (visibile a tutti gli utenti, inclusi gli anonimi)

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

Per controllare l’archiviazione puoi utilizzare le impostazioni nascoste:

  • ai_artifact_kv_value_max_length (gli elementi predefiniti possono essere solo di 5000 lettere o meno)
  • ai_artifact_max_keys_per_user_per_artifact (predefinito 100)

FAQ

Chi Può Creare Artefatti AI?

Per impostazione predefinita, solo gli utenti dello staff (ad esempio, amministratori o moderatori) possono creare artefatti tramite la Persona del Creatore di Artefatti. Questa persona semplifica il processo di progettazione di widget web interattivi utilizzando HTML, CSS e JavaScript.

Cosa Succede Se Clicco su un Artefatto?

  • In modalità lax, gli artefatti appaiono automaticamente.
  • In modalità strict, fare clic sul pulsante “Esegui” attiva l’artefatto e consente il suo caricamento nel tuo browser.

Gli Artefatti AI Sono Sicuri?

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

  • Sono sandboxed e non possono interagire direttamente con l’applicazione Discourse o il contesto utente, solo tramite messaggistica iframe.
  • La modalità strict ti dà il controllo sull’attivazione.
  • Gli artefatti sono privati per impostazione predefinita, è necessario condividerli attivamente per concedere l’accesso globale.

Posso vedere il codice sorgente degli Artefatti?

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

Quali LLM sono supportati?

Gli artefatti possono essere generati utilizzando qualsiasi LLM configurato, tuttavia vari LLM sono specializzati e più finemente ottimizzati per la creazione di artefatti.

Abbiamo visto buoni risultati con o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5 e altri. Generalmente i modelli più avanzati daranno risultati migliori.

C’è un grande aspetto di tentativi ed errori con la creazione di artefatti, la sperimentazione è la chiave.

21 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