Discourse AI - Artefactos web

¿Qué son los artefactos de IA?

Los artefactos de IA son herramientas poderosas que permiten a los usuarios crear, incrustar e interactuar con componentes web dinámicos directamente dentro de una publicación de Discourse. Estos componentes pueden contener HTML, CSS y JavaScript personalizados, lo que habilita una variedad de casos de uso, como:

  • Incrustar cuestionarios o formularios interactivos.
  • Visualizar datos con gráficos ricos y animaciones.
  • Integrar aplicaciones o herramientas web ligeras.
  • Una herramienta para aprender sobre frameworks web, bibliotecas de JavaScript y más.

Los artefactos de IA mejoran las publicaciones de Discourse de manera fluida al agregar interactividad, garantizando al mismo tiempo una experiencia de navegación segura.


Configuración del sitio

Los administradores pueden configurar varias opciones:

1. Activar la función

  • Configuración: discourse_ai_enabled
    • Asegúrate de que esta configuración global esté activada para que los artefactos de IA funcionen.

2. Modos de seguridad

  • Configuración: ai_artifact_security
    • Opciones:
      • disabled: Desactiva el sistema de artefactos.
      • lax: Los artefactos aparecen automáticamente en las publicaciones sin requerir interacción del usuario.
      • hybrid: Los artefactos requieren un clic para ejecutarse por defecto, pero los autores de las publicaciones pueden agregar data-ai-artifact-autorun al código de incrustación para que ciertos artefactos se ejecuten inmediatamente.
      • strict: Los usuarios deben activar explícitamente los artefactos en su navegador haciendo clic en un botón de “Ver” o “Ejecutar”. Esta configuración se recomienda para entornos con alta conciencia de seguridad. (predeterminado)

3. Acceso al creador de artefactos

  • Por defecto, el agente Creador de artefactos está restringido solo a usuarios del personal. Esta restricción garantiza que solo personas de confianza puedan crear artefactos, minimizando el riesgo de uso inadecuado o malicioso.
  • Si se requiere un acceso más amplio, los permisos deben configurarse manualmente por un administrador del sitio.

Uso de artefactos de IA en publicaciones

Los artefactos son creados automáticamente por el agente Creador de artefactos bajo demanda.

El artefacto anterior fue generado usando GPT-4o y la biblioteca anime.js

Una vez creados, son privados para ti y el agente Creador de artefactos. Los usuarios que pueden compartir conversaciones de IA (aquellos que pertenecen a los grupos permitidos para compartir públicamente bots de IA) también pueden hacer público un artefacto compartiendo la conversación.

Una vez compartido, puedes usar el siguiente código HTML para renderizarlo en una publicación:

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

(donde la versión y el ID del artefacto corresponden a tu artefacto versionado)

Consideraciones de seguridad

Dado que los artefactos de IA pueden ejecutar HTML, CSS y JavaScript escritos a medida, Discourse ha implementado salvaguardas robustas:

1. Aislamiento en iframes

  • Los artefactos se renderizan dentro de contenedores iframe aislados con atributos sandbox para restringir operaciones potencialmente inseguras como:
    • Ejecución de scripts entre sitios.
    • Acceso a sitios o APIs externas.

2. Política de seguridad de contenido (CSP)

3. Modo de seguridad

  • Modo estricto: Se recomienda para entornos donde los artefactos no son totalmente confiables. Los usuarios deberán activar manualmente los artefactos en su navegador antes de que se rendericen.

4. Acceso y permisos

  • Los artefactos son visibles solo para:
    • Su creador.
    • Usuarios con los permisos adecuados para ver la publicación asociada (por ejemplo, mensajes privados).
  • Los artefactos públicos deben marcarse explícitamente como tales al compartir la conversación de IA.

5. Límites de longitud

  • El tamaño del HTML, CSS y JavaScript en un artefacto está limitado a 64 KB cada uno. Esto asegura que los componentes permanezcan ligeros y no sobrecarguen a los usuarios o sistemas.

Almacenamiento de artefactos

Los artefactos web pueden almacenar opcionalmente datos por usuario. Para ello, indica al creador del artefacto “usar almacenamiento de usuario” o algo similar.

Este sistema permite almacenar pares clave-valor:

  • Privados (solo visibles para administradores y usuarios específicos)
  • Públicos (visibles para todos los usuarios, incluidos los anónimos)

Los pares clave-valor están protegidos contra la publicación desde la que se originó el artefacto; sin embargo, si compartes un artefacto públicamente, todos podrán agregar claves.

Para controlar el almacenamiento, puedes usar las configuraciones ocultas:

  • ai_artifact_kv_value_max_length (los elementos predeterminados solo pueden tener 5000 caracteres o menos)
  • ai_artifact_max_keys_per_user_per_artifact (predeterminado: 100)

Preguntas frecuentes

¿Quién puede crear artefactos de IA?

Por defecto, solo los usuarios del personal (por ejemplo, administradores o moderadores) pueden crear artefactos a través del agente Creador de artefactos. Este agente simplifica el proceso de diseño de widgets web interactivos usando HTML, CSS y JavaScript.

¿Qué sucede si hago clic en un artefacto?

  • En el modo lax, los artefactos aparecen automáticamente.
  • En el modo hybrid, los artefactos requieren un clic por defecto, pero pueden ejecutarse automáticamente si la incrustación incluye data-ai-artifact-autorun.
  • En el modo strict, hacer clic en el botón “Ejecutar” activa el artefacto y permite que se cargue en tu navegador.

¿Son seguros los artefactos de IA?

Sí. Los artefactos de IA se ejecutan en entornos estrictamente controlados:

  • Están aislados y no pueden interactuar directamente con la aplicación Discourse ni con el contexto del usuario, solo mediante mensajería de iframe.
  • El modo estricto te da control sobre la activación.
  • Los artefactos son privados por defecto; necesitas compartirlos activamente para otorgar acceso global.

¿Puedo ver el código fuente de los artefactos?

Sí. Cuando Discourse AI genera artefactos, incluirá el código completo, el CSS y el JavaScript.

¿Qué modelos de lenguaje (LLM) son compatibles?

Los artefactos pueden generarse con cualquier LLM que tengas configurado; sin embargo, varios LLM están especializados y mejor ajustados para la creación de artefactos.

Hemos obtenido buenos resultados con o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5 y más. En general, los modelos más avanzados funcionan mejor.

Existe un gran componente de prueba y error en la creación de artefactos; la experimentación es clave.

23 Me gusta

Sería genial tener un control un poco más granular sobre la privacidad de los artefactos para que puedan compartirse solo con ciertos grupos. Muy similar a cómo funcionan actualmente los permisos de categoría :smiley:

Creo que si añades el grupo al mensaje privado del bot, ¿podría funcionar?

1 me gusta

Voy a probarlo y reportaré aquí. Tengo un caso de uso específico que requiere que los artefactos sean accesibles solo para un grupo en una categoría privada.

1 me gusta

Así que etiqueté al bot Web Artifact Creator en un nuevo tema en una categoría privada a la que el grupo tiene acceso para que pueda crear un artefacto visible solo para mí y para ese grupo en particular. Sin embargo, la ventana del iframe del artefacto solo muestra el “¡Uy! Esa página no existe o es privada.” predeterminado que aparece cuando un usuario no tiene acceso a una página en particular.

Así que hice una consulta al explorador de datos para verificar quién podía ver ese tema y los usuarios de ese grupo que deberían poder ver el artefacto se muestran de hecho como capaces de verlo según la base de datos.

¿Así que quizás esto sea un error?

Mi 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 (
  -- El creador siempre tiene acceso
  SELECT 
    ai.creator_id as user_id,
    'Acceso del Creador' as access_reason
  FROM artifact_info ai
  
  UNION
  
  -- Usuarios con acceso a mensajes privados
  SELECT 
    tau.user_id,
    'Acceso a Mensaje Privado' 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
  
  -- Miembros del grupo con acceso a mensajes privados
  SELECT 
    gu.user_id,
    'Acceso a Mensaje Privado de 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
  
  -- Usuarios con acceso a categorías restringidas
  SELECT 
    gu.user_id,
    'Acceso a Categoría de Grupo' 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) -- acceso completo o crear/responder/ver
  
  UNION
  
  -- Todos los usuarios si el tema es público (no restringido y no mensaje privado)
  SELECT 
    u.id as user_id,
    'Acceso 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