Discourse AI - Artefatos Web

O Que São Artefatos de IA?

Artefatos de IA são ferramentas poderosas que permitem aos usuários criar, incorporar e interagir com componentes web dinâmicos diretamente em uma postagem do Discourse. Esses componentes podem conter HTML, CSS e JavaScript personalizados, possibilitando uma variedade de casos de uso, como:

  • Incorporar questionários ou formulários interativos.
  • Visualizar dados com gráficos e animações ricas.
  • Integrar aplicações ou ferramentas web leves.
  • Uma ferramenta para aprender sobre frameworks web, bibliotecas JavaScript e mais.

Os Artefatos de IA aprimoram perfeitamente as postagens do Discourse adicionando interatividade enquanto garantem uma experiência de navegação segura.


Configurações do Site

Os administradores podem configurar várias configurações:

1. Ativando o Recurso

  • Configuração: discourse_ai_enabled
    • Certifique-se de que esta configuração global esteja ativada para que os Artefatos de IA funcionem.

2. Modos de Segurança

  • Configuração: ai_artifact_security
    • Opções:
      • disabled: Desativa o sistema de artefatos
      • lax: Artefatos aparecem automaticamente nas postagens sem exigir interação do usuário.
      • hybrid: Artefatos exigem um clique para serem executados por padrão, mas os autores das postagens podem adicionar data-ai-artifact-autorun à marcação de incorporação para fazer com que artefatos específicos sejam executados imediatamente.
      • strict: Os usuários devem ativar explicitamente os artefatos em seu navegador clicando em um botão “Visualizar” ou “Executar”. Esta configuração é recomendada para ambientes com foco em segurança. (padrão)

3. Acesso ao Criador de Artefatos

  • Por padrão, a persona Criador de Artefatos é restrita apenas a usuários da equipe. Essa restrição garante que apenas indivíduos confiáveis possam criar artefatos, minimizando o risco de uso impróprio ou malicioso.
  • Se for necessário um acesso mais amplo, as permissões precisam ser configuradas manualmente por um administrador do site.

Usando Artefatos de IA em Postagens

Os artefatos são criados automaticamente pela persona Criador de Artefatos sob demanda.

<div class="ai-artifact" data-ai-artifact-version="3" data-ai-artifact-id="71"></div>
<small>O artefato acima foi gerado usando GPT-4o e a biblioteca anime.js</small>

Uma vez criados, eles são privados para você e para a persona Criador de Artefatos. Usuários que podem compartilhar conversas de IA (aqueles que pertencem aos grupos ai bot public sharing allowed) também podem tornar um artefato público compartilhando a conversa.

Uma vez compartilhado, você pode usar a seguinte marcação HTML para renderizá-lo em uma postagem:

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

(onde a versão e o ID do artefato são o seu artefato versionado)

Considerações de Segurança

Dado que os Artefatos de IA podem executar HTML, CSS e JavaScript escritos sob medida, o Discourse implementou salvaguardas robustas:

1. Sandboxing em iFrames

  • Os artefatos são renderizados dentro de contêineres iframe isolados com atributos sandbox para restringir operações potencialmente inseguras, como:
    • Script entre sites (Cross-site scripting).
    • Acesso a sites ou APIs externas.

2. Política de Segurança de Conteúdo (CSP)

3. Modo de Segurança

  • Modo Estrito: Recomendado para ambientes onde os artefatos não são totalmente confiáveis. Os usuários precisarão ativar manualmente os artefatos em seu navegador antes que eles sejam renderizados.

4. Acesso e Permissões

  • Os artefatos são visíveis apenas para:
    • Seu criador.
    • Usuários com as permissões corretas para visualizar a postagem associada (por exemplo, mensagens privadas).
  • Artefatos públicos devem ser explicitamente marcados como tal compartilhando a conversa de IA.

5. Limites de Tamanho

  • O tamanho de HTML, CSS e JavaScript em um artefato é limitado a 64 KB cada. Isso garante que os componentes permaneçam leves e não sobrecarreguem os usuários ou sistemas.

Armazenamento de Artefatos

Os artefatos da web podem opcionalmente armazenar dados por usuário. Para fazer isso, sinalize o criador do artefato com “usar armazenamento de usuário” ou similar.

Este sistema permite armazenar pares de chave, valor:

  • Privado (visível apenas para administradores e usuários específicos)
  • Público (visível para todos os usuários, incluindo anônimos)

Pares de chave-valor são protegidos contra a postagem de origem do artefato, no entanto, se você compartilhar um artefato publicamente, todos estarão autorizados a adicionar chaves.

Para controlar o armazenamento, você pode usar as configurações ocultas:

  • ai_artifact_kv_value_max_length (itens padrão podem ter apenas 5000 caracteres ou menos)
  • ai_artifact_max_keys_per_user_per_artifact (padrão 100)

FAQ

Quem Pode Criar Artefatos de IA?

Por padrão, apenas usuários da equipe (por exemplo, administradores ou moderadores) podem criar artefatos por meio da Persona Criadora de Artefatos. Essa persona simplifica o processo de criação de widgets web interativos usando HTML, CSS e JavaScript.

O Que Acontece Se Eu Clicar em um Artefato?

  • No modo lax (flexível), os artefatos aparecem automaticamente.
  • No modo hybrid (híbrido), os artefatos exigem um clique por padrão, mas podem ser executados automaticamente se a incorporação incluir data-ai-artifact-autorun.
  • No modo strict (rígido), clicar no botão “Executar” ativa o artefato e permite que ele seja carregado no seu navegador.

Os Artefatos de IA São Seguros?

Sim. Os Artefatos de IA são executados em ambientes rigorosamente controlados:

  • Eles são isolados (sandboxed) e não podem interagir diretamente com a aplicação ou o contexto do usuário do Discourse, apenas através de mensagens iframe.
  • O modo estrito lhe dá controle sobre a ativação.
  • Artefatos são privados por padrão, você precisa compartilhar ativamente para conceder acesso global.

Posso ver o código-fonte dos Artefatos

Sim. Quando o Discourse AI gera artefatos, ele incluirá a marcação completa, CSS e JavaScript.

Quais LLMs são suportados?

Os artefatos podem ser gerados usando qualquer LLM que você configurou, no entanto, vários LLMs se especializam e são mais ajustados para a criação de artefatos.

Vimos bons resultados com o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5 e outros. Geralmente, modelos mais avançados terão um desempenho melhor.

Há uma grande componente de tentativa e erro na criação de artefatos, a experimentação é fundamental.

23 curtidas

Seria muito bom ter um controle um pouco mais granular sobre a privacidade de artefatos para que eles possam ser compartilhados apenas com grupos específicos. Muito semelhante a como as permissões de categoria funcionam atualmente :smiley:

Acho que se você adicionar o grupo ao PM do bot, pode funcionar?

1 curtida

Vou testar e reportar aqui. Tenho um caso de uso específico que exige que os artefatos sejam acessíveis apenas a um grupo em uma categoria privada.

1 curtida

Então marquei o bot Web Artifact Creator em um novo tópico em uma categoria privada à qual o grupo tem acesso para que ele possa criar um artefato visualizável apenas por mim e por esse grupo específico. No entanto, a janela do iframe do artefato mostra apenas o padrão “Oops! Essa página não existe ou é privada.” que aparece quando um usuário não tem acesso a uma página específica.

Então fiz uma consulta no explorador de dados para verificar quem poderia visualizar esse tópico e os usuários nesse grupo que deveriam ser capazes de ver o artefato são de fato mostrados como capazes de visualizá-lo de acordo com o banco de dados.

Então, talvez isso seja um bug?

Minha consulta 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 (
  -- O criador sempre tem acesso
  SELECT 
    ai.creator_id as user_id,
    'Criador' as access_reason
  FROM artifact_info ai
  
  UNION
  
  -- Usuários com acesso a mensagens privadas
  SELECT 
    tau.user_id,
    'Acesso a Mensagem Privada' 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
  
  -- Membros do grupo com acesso a mensagens privadas
  SELECT 
    gu.user_id,
    'Acesso a Mensagem Privada em Grupo' 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
  
  -- Usuários com acesso a categorias restritas
  SELECT 
    gu.user_id,
    'Acesso em Grupo à 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) -- acesso total ou criar/responder/ver
  
  UNION
  
  -- Todos os usuários se o tópico for público (não restrito e não mensagem privada)
  SELECT 
    u.id as user_id,
    'Acesso Público' 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