Discourse AI — веб-артефакты

Что такое артефакты ИИ?

Артефакты ИИ — это мощные инструменты, позволяющие пользователям создавать, внедрять и взаимодействовать с динамическими веб-компонентами непосредственно в постах Discourse. Эти компоненты могут содержать пользовательский HTML, CSS и JavaScript, что открывает множество возможностей, таких как:

  • Внедрение интерактивных викторин или форм.
  • Визуализация данных с помощью богатой графики и анимаций.
  • Интеграция легковесных веб-приложений или инструментов.
  • Инструмент для изучения веб-фреймворков, библиотек JavaScript и многого другого.

Артефакты ИИ seamlessly улучшают посты Discourse, добавляя интерактивность и обеспечивая безопасный просмотр.


Настройки сайта

Администраторы могут настроить несколько параметров:

1. Включение функции

  • Параметр: discourse_ai_enabled
    • Убедитесь, что этот глобальный параметр включен, чтобы артефакты ИИ работали.

2. Режимы безопасности

  • Параметр: ai_artifact_security
    • Варианты:
      • disabled: Отключить систему артефактов.
      • lax: Артефакты автоматически отображаются в постах без необходимости взаимодействия пользователя.
      • hybrid: По умолчанию артефакты требуют клика для запуска, но авторы постов могут добавить data-ai-artifact-autorun в код встраивания, чтобы определенные артефакты запускались немедленно.
      • strict: Пользователи должны явно активировать артефакты в своем браузере, нажав кнопку «Просмотр» или «Запустить». Этот параметр рекомендуется для сред, требующих повышенного внимания к безопасности (по умолчанию).

3. Доступ к создателю артефактов

  • По умолчанию персона Создателя артефактов ограничена только сотрудниками. Это ограничение гарантирует, что только доверенные лица могут создавать артефакты, минимизируя риск неправомерного или злонамеренного использования.
  • Если требуется более широкий доступ, права необходимо настроить вручную администратором сайта.

Использование артефактов ИИ в постах

Артефакты автоматически создаются персоной Создателя артефактов по запросу.

Вышеуказанный артефакт был создан с использованием GPT-4o и библиотеки anime.js

После создания они являются приватными для вас и персоны Создателя артефактов. Пользователи, имеющие возможность делиться разговорами с ИИ (те, кто входит в группы ai bot public sharing allowed groups), также могут сделать артефакт общедоступным, поделившись разговором.

После публикации вы можете использовать следующий HTML-код для его отображения в посте:

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

(где версия и идентификатор артефакта соответствуют вашей версионированной версии артефакта)

Вопросы безопасности

Поскольку артефакты ИИ могут выполнять пользовательский HTML, CSS и JavaScript, в Discourse реализованы надежные меры защиты:

1. Песочница в iFrames

  • Артефакты рендерятся внутри изолированных контейнеров iframe с атрибутом sandbox, чтобы ограничить потенциально опасные операции, такие как:
    • Межсайтовый скриптинг (XSS).
    • Доступ к внешним сайтам или API.

2. Политика безопасности контента (CSP)

3. Режим безопасности

  • Строгий режим: Рекомендуется для сред, где артефакты не полностью доверены. Пользователям потребуется вручную активировать артефакты в своем браузере перед их отображением.

4. Доступ и права

  • Артефакты видны только:
    • Их создателю.
    • Пользователям с соответствующими правами для просмотра связанного поста (например, личных сообщений).
  • Общедоступные артефакты должны быть явно помечены как таковые путем публикации разговора с ИИ.

5. Ограничения по длине

  • Размер HTML, CSS и JavaScript в артефакте ограничен 64 КБ для каждого. Это гарантирует, что компоненты остаются легковесными и не создают нагрузки на пользователей или системы.

Хранение артефактов

Веб-артефакты могут опционально хранить данные для каждого пользователя. Для этого укажите создателю артефакта «использовать хранилище пользователя» или что-то подобное.

Эта система позволяет хранить пары ключ-значение:

  • Приватные (видны только администраторам и определенным пользователям)
  • Публичные (видны всем пользователям, включая анонимных)

Пары ключ-значение защищены относительно поста, из которого произошел артефакт. Однако, если вы публикуете артефакт общедоступно, все пользователи смогут добавлять ключи.

Для управления хранилищем можно использовать скрытые параметры:

  • ai_artifact_kv_value_max_length (по умолчанию элементы могут содержать не более 5000 символов)
  • ai_artifact_max_keys_per_user_per_artifact (по умолчанию 100)

Часто задаваемые вопросы (FAQ)

Кто может создавать артефакты ИИ?

По умолчанию только сотрудники (например, администраторы или модераторы) могут создавать артефакты через персону Создателя артефактов. Эта персона упрощает процесс создания интерактивных веб-виджетов с использованием HTML, CSS и JavaScript.

Что произойдет, если я нажму на артефакт?

  • В слабом (lax) режиме артефакты отображаются автоматически.
  • В гибридном (hybrid) режиме артефакты по умолчанию требуют клика, но могут запускаться автоматически, если в код встраивания добавлено data-ai-artifact-autorun.
  • В строгом (strict) режиме нажатие кнопки «Запустить» активирует артефакт и позволяет ему загрузиться в вашем браузере.

Безопасны ли артефакты ИИ?

Да. Артефакты ИИ работают в строго контролируемых средах:

  • Они находятся в песочнице и не могут напрямую взаимодействовать с приложением Discourse или контекстом пользователя, только через обмен сообщениями в iframe.
  • Строгий режим дает вам контроль над активацией.
  • По умолчанию артефакты приватны; для предоставления глобального доступа необходимо активно поделиться ими.

Могу ли я увидеть исходный код артефактов?

Да. Когда Discourse AI генерирует артефакты, он включает полный HTML-код, CSS и JavaScript.

Какие LLM поддерживаются?

Артефакты могут быть созданы с использованием любой настроенной вами большой языковой модели (LLM), однако различные LLM специализируются и лучше настроены для создания артефактов.

Мы получили хорошие результаты с o3, Anthropic Claude Sonnet 3.7–4.0, GPT-4.1, Gemini Pro 2.5 и другими. Как правило, более продвинутые модели работают лучше.

Создание артефактов во многом основано на методе проб и ошибок, поэтому эксперименты являются ключевыми.

23 лайка

It’d be really neat to have slightly more granular control over artifact privacy so that they can be shared only with certain groups. Quite similar to how category permissions currently work :smiley:

I think that if you add the group to the bot pm it may work?

1 лайк

I’m gonna test it out and report back here. I have a niche use case that requires artifacts to be accessible only to one group in one private category

1 лайк

So I tagged the Web Artifact Creator bot in a new topic in a private category which the group has access so it can make an artifact only viewable to me and that particular group. However the artifact iframe window only shows that default " Oops! That page doesn’t exist or is private." that pops up when a user doesn’t have access to a particular page

So I made a data explorer query to check who could view that topic and the users in that group that should be able to see the artifact are indeed shown to be able to view it according to the database.

So perhaps this is a bug?

My SQL query
-- [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 (
  -- Creator always has access
  SELECT 
    ai.creator_id as user_id,
    'Creator' as access_reason
  FROM artifact_info ai
  
  UNION
  
  -- Users with access to private messages
  SELECT 
    tau.user_id,
    'Private Message Access' 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
  
  -- Group members with access to private messages
  SELECT 
    gu.user_id,
    'Private Message Group Access' 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
  
  -- Users with access to restricted categories
  SELECT 
    gu.user_id,
    'Category Group Access' 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) -- full access or create/reply/see
  
  UNION
  
  -- All users if topic is public (not restricted and not private message)
  SELECT 
    u.id as user_id,
    'Public Access' 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