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 dinâmicos baseados na web diretamente em uma postagem do Discourse. Esses componentes podem conter HTML, CSS e JavaScript personalizados, permitindo uma variedade de casos de uso, como:

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

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


Configurações do Site

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

1. Habilitando o Recurso

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

2. Modos de Segurança

  • Configuração: ai_artifact_security
    • Opções:
      • disabled: Desabilitar o sistema de artefatos
      • lax: Os artefatos aparecem automaticamente nas postagens sem exigir interação do usuário.
      • strict: Os usuários devem ativar explicitamente os artefatos em seus navegadores clicando em um botão “Ver” 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 inadequado ou malicioso.
  • Se um acesso mais amplo for necessário, 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>

O artefato acima foi gerado usando GPT-4o e a biblioteca anime.js

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 ai bot public sharing allowed groups) 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 seu artefato versionado)

Considerações de Segurança

Dado que os Artefatos de IA podem executar HTML, CSS e JavaScript personalizados, 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:
    • 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: Recomenda-se para ambientes onde os artefatos não são totalmente confiáveis. Os usuários precisarão ativar manualmente os artefatos em seus navegadores 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

Artefatos da web podem opcionalmente armazenar dados por usuário. Para fazer isso, sugira ao criador do artefato com “usar armazenamento de usuário” ou similar.

Este sistema permite armazenar pares 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 chave-valor são protegidos contra a postagem de origem do artefato, no entanto, se você compartilhar um artefato publicamente, todos poderão 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 letras 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 através da Persona Criador de Artefatos. Essa persona simplifica o processo de design de widgets web interativos usando HTML, CSS e JavaScript.

O Que Acontece Se Eu Clicar em um Artefato?

  • No modo lax, os artefatos aparecem automaticamente.
  • No modo strict, clicar no botão “Executar” ativa o artefato e permite que ele seja carregado em seu navegador.

Artefatos de IA São Seguros?

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

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

Posso Ver o Código Fonte dos Artefatos?

Sim. Quando o Discourse AI gera artefatos, ele incluirá o markup, CSS e JavaScript completos.

Quais LLMs São Suportados?

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.

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

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

21 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