Discourse-zu-Markdown-Plugin

discourse-to-markdown ist ein neues Plugin, das Forum-Inhalte als Markdown zurückgibt, wenn der Client Accept: text/markdown sendet oder .md an jede Inhalts-URL anhängt.

Wir nutzen es auf unserem eigenen Forum unter https://discourse.roots.io:

curl -H "Accept: text/markdown" https://discourse.roots.io/latest
curl https://discourse.roots.io/t/serve-your-wordpress-posts-as-markdown/30321.md

HTML ist teuer für die Verarbeitung durch ein LLM, und die Bereitstellung von Markdown, das nur den Inhalt enthält, reduziert den Token-Verbrauch oft um das 3- bis 5-fache. Das bedeutet günstigere API-Aufrufe, schnellere Antworten und mehr Spielraum im Kontextfenster, damit das Modell besser reasoning betreiben kann. Weitere Informationen, einschließlich eines längeren Pitchs und eines Ready-Checks für jede Seite, finden Sie unter https://acceptmarkdown.com.

Wie Clients Markdown anfordern

Drei Einstiegspunkte:

  1. Header Accept: text/markdown (ideal für LLMs)
  2. .md-URL-Suffix
  3. Entdeckung (jede HTML-Antwort wirbt über Link: <...>; rel="alternate"; type="text/markdown" und ein <link rel="alternate">-Tag im <head> um ihr Markdown-Geschwister; RSS-Feeds enthalten einen <atom:link>, der auf die Markdown-Variante verweist)

Unterstützte Routen

Route HTML Markdown
Thema /t/:slug/:id /t/:slug/:id.md
Einzelner Beitrag /t/:slug/:id/:post_number /t/:slug/:id/:post_number.md
Kategorie /c/:slug/:id /c/:slug/:id.md
Tag /tag/:tag /tag/:tag.md
Neueste /latest /latest.md
Top /top /top.md
Heiß /hot /hot.md
Benutzeraktivität /u/:username/activity /u/:username/activity.md

Installation

Fügen Sie das Plugin zu Ihrer app.yml hinzu:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/roots/discourse-to-markdown.git

Stellen Sie den Container neu her:

cd /var/discourse
./launcher rebuild app

Aktivieren Sie es dann unter Admin → Einstellungen → Plugins → Markdown-Ausgabe.

Hinweise zur Konvertierung

Das Plugin konvertiert Discourses cooked-HTML – die gerenderte Darstellung, die Leser sehen, mit expandierten Oneboxes, verlinkten Erwähnungen und zugeordneten Zitaten – nicht raw. Dies bewahrt, was Leser tatsächlich sehen, und hält die Ausgabe portabel für jeden GFM-kompatiblen Renderer. Discourse-spezifische Konstrukte (Zitate, Oneboxes, Details, Erwähnungen, Hashtags, Emojis, Lightboxen, Umfragen) werden vor der Konvertierung sinnvoll umgeschrieben.

Konvertiertes Markdown wird in Redis pro Beitrag zwischengespeichert, wobei post.id + post.updated_at als Schlüssel dienen; Änderungen werden automatisch ungültig gemacht.

Einstellungen

Einstellung Standard Zweck
discourse_to_markdown_enabled false Hauptschalter für das Plugin
discourse_to_markdown_md_urls_enabled true Akzeptiert .md-URL-Suffixe als Geschwister zur HTML-Route
discourse_to_markdown_strict_accept false Gibt 406 Not Acceptable zurück, wenn der Accept-Header des Clients sowohl text/html als auch text/markdown ausschließt
discourse_to_markdown_emit_vary true Sendet Vary: Accept bei Markdown- und 406-Antworten, damit Caches keine Darstellungen kreuzweise ausliefern
discourse_to_markdown_include_post_metadata true Fügt URL, Kategorie, Tags, Autor und Zeitstempel in die Markdown-Darstellung ein

Ressourcen