Discourse AI - Artefactos Web

¿Qué son los Artefactos de IA?

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

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

Los Artefactos de IA mejoran sin problemas las publicaciones de Discourse al agregar interactividad y garantizar una experiencia de navegación segura.


Configuración del Sitio

Los administradores pueden configurar varias opciones:

1. Habilitación de la Función

  • Configuración: discourse_ai_enabled
    • Asegúrese de que esta configuración global esté habilitada para que los Artefactos de IA funcionen.

2. Modos de Seguridad

  • Configuración: ai_artifact_security
    • Opciones:
      • disabled: Deshabilitar el sistema de artefactos
      • lax: Los artefactos aparecen automáticamente en las publicaciones sin requerir la interacción del usuario.
      • strict: Los usuarios deben activar explícitamente los artefactos en su navegador haciendo clic en un botón “Ver” o “Ejecutar”. Esta configuración se recomienda para entornos conscientes de la seguridad. (por defecto)

3. Acceso al Creador de Artefactos

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

Uso de Artefactos de IA en Publicaciones

Los artefactos son creados automáticamente por la persona del Creador de Artefactos bajo demanda.

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

El artefacto anterior se generó utilizando GPT-4o y la biblioteca anime.js

Una vez creados, son privados para usted y la persona del 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, puede usar el siguiente marcado 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 son su artefacto versionado)

Consideraciones de Seguridad

Dado que los Artefactos de IA pueden ejecutar HTML, CSS y JavaScript personalizados, Discourse ha implementado sólidas medidas de seguridad:

1. Sandboxing en iFrames

  • Los artefactos se renderizan dentro de contenedores iframe aislados con atributos sandbox para restringir operaciones potencialmente inseguras como:
    • Cross-site scripting.
    • 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 completamente confiables. Los usuarios deberán activar manualmente los artefactos en su navegador antes de que se rendericen.

4. Acceso y Permisos

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

5. Límites de Longitud

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

Almacenamiento de Artefactos

Los artefactos web pueden opcionalmente almacenar datos por usuario. Para hacerlo, indique al creador del artefacto con “usar almacenamiento de usuario” o similar.

Este sistema permite almacenar pares clave, valor:

  • Privado (solo visible para administradores y usuarios específicos)
  • Público (visible para todos los usuarios, incluidos los anónimos)

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

Para controlar el almacenamiento, puede usar las configuraciones ocultas:

  • ai_artifact_kv_value_max_length (los elementos por defecto solo pueden tener 5000 letras o menos)
  • ai_artifact_max_keys_per_user_per_artifact (por defecto 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 de la Persona del Creador de Artefactos. Esta persona simplifica el proceso de diseño de widgets web interactivos utilizando HTML, CSS y JavaScript.

¿Qué Sucede Si Hago Clic en un Artefacto?

  • En modo lax, los artefactos aparecen automáticamente.
  • En modo strict, hacer clic en el botón “Ejecutar” activa el artefacto y permite que se cargue en su navegador.

¿Son Seguros los Artefactos de IA?

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

  • Están en un sandbox y no pueden interactuar directamente con la aplicación Discourse o el contexto del usuario, solo a través de mensajes iframe.
  • El modo estricto le da control sobre la activación.
  • Los artefactos son privados por defecto, necesita compartir activamente para dar acceso global.

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

Sí. Cuando Discourse AI genera artefactos, incluirá el marcado, CSS y JavaScript completos.

¿Qué LLMs son compatibles?

Los artefactos se pueden generar utilizando cualquier LLM que haya configurado, sin embargo, varios LLMs se especializan y están más finamente ajustados para la creación de artefactos.

Hemos visto 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 funcionarán mejor.

Hay un gran componente de prueba y error con la creación de artefactos, la experimentación es clave.

21 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