Discourse AI - Web-Artefakte

Was sind KI-Artefakte?

KI-Artefakte sind leistungsstarke Werkzeuge, mit denen Benutzer dynamische webbasierte Komponenten direkt in einem Discourse-Beitrag erstellen, einbetten und mit ihnen interagieren können. Diese Komponenten können benutzerdefiniertes HTML, CSS und JavaScript enthalten und ermöglichen eine Vielzahl von Anwendungsfällen, wie zum Beispiel:

  • Einbetten interaktiver Quizze oder Formulare.
  • Visualisierung von Daten mit reichhaltigen Grafiken und Animationen.
  • Integration von schlanken Webanwendungen oder Tools.
  • Ein Werkzeug zum Erlernen von Webframeworks, JavaScript-Bibliotheken und mehr.

KI-Artefakte erweitern Discourse-Beiträge nahtlos um Interaktivität und gewährleisten gleichzeitig ein sicheres Surferlebnis.


Site-Einstellungen

Administratoren können mehrere Einstellungen konfigurieren:

1. Aktivierung der Funktion

  • Einstellung: discourse_ai_enabled
    • Stellen Sie sicher, dass diese globale Einstellung aktiviert ist, damit KI-Artefakte funktionieren.

2. Sicherheitsmodi

  • Einstellung: ai_artifact_security
    • Optionen:
      • disabled: Deaktiviert das Artefaktsystem
      • lax: Artefakte erscheinen automatisch in Beiträgen, ohne dass eine Benutzerinteraktion erforderlich ist.
      • hybrid: Artefakte erfordern standardmäßig einen Klick zum Ausführen, aber Beitragsautoren können data-ai-artifact-autorun zum Einbettungs-Markup hinzufügen, um bestimmte Artefakte sofort ausführen zu lassen.
      • strict: Benutzer müssen Artefakte in ihrem Browser explizit durch Klicken auf eine „Anzeigen“- oder „Ausführen“-Schaltfläche aktivieren. Diese Einstellung wird für sicherheitsbewusste Umgebungen empfohlen. (Standard)

3. Zugriff auf den Artefaktersteller

  • Standardmäßig ist die Artefaktersteller-Persona nur für Mitarbeiterbenutzer reserviert. Diese Beschränkung stellt sicher, dass nur vertrauenswürdige Personen Artefakte erstellen können, wodurch das Risiko unsachgemäßer oder böswilliger Nutzung minimiert wird.
  • Wenn ein breiterer Zugriff erforderlich ist, müssen Berechtigungen von einem Seitenadministrator manuell konfiguriert werden.

Verwendung von KI-Artefakten in Beiträgen

Artefakte werden auf Abruf automatisch von der Artefaktersteller-Persona erstellt.

<div class="ai-artifact" data-ai-artifact-version="3" data-ai-artifact-id="71"></div>
<small>Das obige Artefakt wurde mit GPT-4o und der anime.js Bibliothek generiert</small>

Sobald sie erstellt wurden, sind sie nur für Sie und die Artefaktersteller-Persona privat. Benutzer, die KI-Konversationen teilen können (die zu den Gruppen gehören, für die das öffentliche Teilen von KI-Bots erlaubt ist – ai bot public sharing allowed groups), können ein Artefakt auch öffentlich machen, indem sie die Konversation teilen.

Nach dem Teilen können Sie den folgenden HTML-Markup verwenden, um es in einem Beitrag darzustellen:

\u003cdiv class=\"ai-artifact\" data-ai-artifact-version=\"3\" data-ai-artifact-id=\"71\"\u003e\u003c/div\u003e

(wobei Version und Artefakt-ID Ihr versioniertes Artefakt sind)

Sicherheitsaspekte

Da KI-Artefakte benutzerdefinierten HTML-, CSS- und JavaScript-Code ausführen können, hat Discourse robuste Schutzmaßnahmen implementiert:

1. Sandboxing in iFrames

  • Artefakte werden in isolierten iframe-Containern mit sandbox-Attributen gerendert, um potenziell unsichere Vorgänge einzuschränken, wie zum Beispiel:
    • Cross-Site Scripting.
    • Zugriff auf externe Websites oder APIs.

2. Content Security Policy (CSP)

3. Sicherheitsmodus

  • Strikter Modus: Dieser wird für Umgebungen empfohlen, in denen Artefakte nicht vollständig vertrauenswürdig sind. Benutzer müssen Artefakte in ihrem Browser manuell aktivieren, bevor sie gerendert werden.

4. Zugriff und Berechtigungen

  • Artefakte sind nur sichtbar für:
    • Ihren Ersteller.
    • Benutzer mit den entsprechenden Berechtigungen, den zugehörigen Beitrag anzuzeigen (z. B. private Nachrichten).
  • Öffentliche Artefakte müssen explizit als solche gekennzeichnet werden, indem die KI-Konversation geteilt wird.

5. Längenbeschränkungen

  • Die Größe von HTML, CSS und JavaScript in einem Artefakt ist jeweils auf 64 KB begrenzt. Dies stellt sicher, dass Komponenten schlank bleiben und Benutzer oder Systeme nicht belasten.

Speicherung von Artefakten

Web-Artefakte können optional benutzerspezifische Daten speichern. Um dies zu tun, weisen Sie den Artefaktersteller mit „Benutzerspeicher verwenden“ oder Ähnlichem an.

Dieses System ermöglicht das Speichern von Schlüssel-Wert-Paaren:

  • Privat (nur sichtbar für Administratoren und bestimmte Benutzer)
  • Öffentlich (sichtbar für alle Benutzer, einschließlich anonymer)

Schlüssel-Wert-Paare sind gegen den Beitrag, aus dem das Artefakt stammt, gesichert. Wenn Sie jedoch ein Artefakt öffentlich teilen, ist es allen gestattet, Schlüssel hinzuzufügen.

Um die Speicherung zu steuern, können Sie die ausgeblendeten Einstellungen verwenden:

  • ai_artifact_kv_value_max_length (Standardmäßig dürfen Elemente nur 5000 Zeichen oder weniger lang sein)
  • ai_artifact_max_keys_per_user_per_artifact (Standard 100)

FAQ

Wer kann KI-Artefakte erstellen?

Standardmäßig können nur Mitarbeiterbenutzer (z. B. Administratoren oder Moderatoren) Artefakte über die Artefaktersteller-Persona erstellen. Diese Persona vereinfacht den Prozess der Gestaltung interaktiver Web-Widgets mithilfe von HTML, CSS und JavaScript.

Was passiert, wenn ich auf ein Artefakt klicke?

  • Im lax-Modus erscheinen Artefakte automatisch.
  • Im hybrid-Modus erfordern Artefakte standardmäßig einen Klick, können aber automatisch ausgeführt werden, wenn die Einbettung data-ai-artifact-autorun enthält.
  • Im strict-Modus aktiviert das Klicken auf die Schaltfläche „Ausführen“ das Artefakt und ermöglicht dessen Laden in Ihrem Browser.

Sind KI-Artefakte sicher?

Ja. KI-Artefakte werden in streng kontrollierten Umgebungen ausgeführt:

  • Sie sind sandboxed und können nicht direkt mit der Discourse-Anwendung oder dem Benutzerkontext interagieren, nur über iframe-Messaging.
  • Der strikte Modus gibt Ihnen die Kontrolle über die Aktivierung.
  • Artefakte sind standardmäßig privat; Sie müssen sie aktiv teilen, um globalen Zugriff zu gewähren.

Kann ich den Quellcode für Artefakte sehen?

Ja. Wenn Discourse AI Artefakte generiert, wird der vollständige Markup, CSS und JavaScript enthalten sein.

Welche LLMs werden unterstützt?

Artefakte können mit jedem konfigurierten LLM erstellt werden, allerdings sind verschiedene LLMs auf die Artefakterstellung spezialisiert und besser darauf abgestimmt.

Wir haben gute Ergebnisse mit o3, Anthropic Claude Sonnet 3.7 - 4.0, GPT-4.1, Gemini Pro 2.5 und mehr erzielt. Im Allgemeinen schneiden fortschrittlichere Modelle besser ab.

Die Erstellung von Artefakten beinhaltet ein großes Maß an Versuch und Irrtum; Experimentieren ist der Schlüssel.

23 „Gefällt mir“

Es wäre wirklich toll, etwas mehr Kontrolle über die Artefakt-Privatsphäre zu haben, damit sie nur mit bestimmten Gruppen geteilt werden können. Ähnlich wie die Berechtigungen für Kategorien derzeit funktionieren :smiley:

Ich denke, wenn du die Gruppe zum Bot-PM hinzufügst, könnte es funktionieren?

1 „Gefällt mir“

Ich werde es ausprobieren und hier berichten. Ich habe einen speziellen Anwendungsfall, der erfordert, dass Artefakte nur für eine Gruppe in einer privaten Kategorie zugänglich sind.

1 „Gefällt mir“

Ich habe den Web Artifact Creator Bot in einem neuen Thema in einer privaten Kategorie markiert, auf die die Gruppe Zugriff hat, damit er ein Artefakt erstellen kann, das nur für mich und diese spezielle Gruppe sichtbar ist. Das Artefakt-iframe-Fenster zeigt jedoch nur das Standard-„Hoppla! Diese Seite existiert nicht oder ist privat.“ an, das erscheint, wenn ein Benutzer keinen Zugriff auf eine bestimmte Seite hat.

Ich habe also eine Data Explorer-Abfrage erstellt, um zu überprüfen, wer diese Thema anzeigen kann, und die Benutzer in dieser Gruppe, die das Artefakt sehen können sollten, werden laut Datenbank tatsächlich dazu in der Lage angezeigt.

Vielleicht ist das also ein Fehler?

Meine SQL-Abfrage
-- [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 hat immer Zugriff
  SELECT
    ai.creator_id as user_id,
    'Creator' as access_reason
  FROM artifact_info ai

  UNION

  -- Benutzer mit Zugriff auf private Nachrichten
  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

  -- Gruppenmitglieder mit Zugriff auf private Nachrichten
  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

  -- Benutzer mit Zugriff auf eingeschränkte Kategorien
  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) -- voller Zugriff oder Erstellen/Antworten/Anzeigen

  UNION

  -- Alle Benutzer, wenn das Thema öffentlich ist (nicht eingeschränkt und keine private Nachricht)
  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