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:
- Header
Accept: text/markdown(ideal für LLMs) .md-URL-Suffix- 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
- Quellcode/Issues: GitHub - roots/discourse-to-markdown: Serve Discourse content as Markdown via Accept: text/markdown or .md URLs — content negotiation for LLMs and agents. · GitHub
- acceptmarkdown.com – Bereitstellung von Markdown für Agenten über Inhaltsverhandlung sowie ein Ready-Check für Ihre Seite
- RFC 9110 §12.5.1 – Proaktive Verhandlung – die Spezifikation, die dieses Plugin implementiert
- RFC 7763 – Registrierung des Medientyps
text/markdown - MDN – Inhaltsverhandlung – zugängliche Einführung in das Konzept
- Weitere Informationen zum vollständigen Spezifikations- und Entwicklerdokumenten-Liste finden Sie unter acceptmarkdown.com/reference