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

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

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

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

Артефакты ИИ бесшовно дополняют сообщения 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 генерирует артефакты, он включает полный код разметки, CSS и JavaScript.

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

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

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

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

23 лайка

Было бы очень здорово иметь более детальный контроль над приватностью артефактов, чтобы их можно было делиться только с определёнными группами. Очень похоже на то, как сейчас работают права доступа к категориям :smiley:

Я думаю, что если добавить группу в личные сообщения боту, это может сработать?

1 лайк

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

1 лайк

Итак, я упомянул бота Web Artifact Creator в новой теме в приватной категории, к которой у группы есть доступ, чтобы он мог создать артефакт, видимый только мне и этой конкретной группе. Однако окно iframe артефакта показывает только стандартное сообщение «Ой! Эта страница не существует или является приватной», которое появляется, когда у пользователя нет доступа к определённой странице.

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

Возможно, это ошибка?

Мой 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 (
  -- Создатель всегда имеет доступ
  SELECT 
    ai.creator_id as user_id,
    'Creator' as access_reason
  FROM artifact_info ai
  
  UNION
  
  -- Пользователи с доступом к приватным сообщениям
  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
  
  -- Участники группы с доступом к приватным сообщениям
  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
  
  -- Пользователи с доступом к ограниченным категориям
  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) -- полный доступ или создание/ответ/просмотр
  
  UNION
  
  -- Все пользователи, если тема публична (не ограничена и не является приватным сообщением)
  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