Plugin Discourse per Markdown

discourse-to-markdown è un nuovo plugin che restituisce il contenuto del forum in formato Markdown quando il client invia Accept: text/markdown o aggiunge .md a qualsiasi URL di contenuto.

Lo stiamo utilizzando sul nostro forum all’indirizzo 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

L’HTML è costoso da elaborare per un LLM, e fornire Markdown contenente solo il testo spesso riduce l’utilizzo dei token da 3 a 5 volte. Ciò significa chiamate API più economiche, risposte più rapide e più spazio nella finestra del contesto per il ragionamento del modello. Consulta https://acceptmarkdown.com per una spiegazione più dettagliata e un controllo di compatibilità per qualsiasi sito.

Come i client richiedono il Markdown

Tre punti di accesso:

  1. Intestazione Accept: text/markdown (ideale per gli LLM)
  2. Suffisso URL .md
  3. Scoperta (ogni risposta HTML annuncia il proprio fratello Markdown tramite Link: <...>; rel="alternate"; type="text/markdown" e un tag <link rel="alternate"> nell’<head>, i feed RSS includono un <atom:link> che punta all’equivalente Markdown)

Route supportate

Route HTML Markdown
Argomento /t/:slug/:id /t/:slug/:id.md
Singolo post /t/:slug/:id/:post_number /t/:slug/:id/:post_number.md
Categoria /c/:slug/:id /c/:slug/:id.md
Tag /tag/:tag /tag/:tag.md
Ultime /latest /latest.md
Top /top /top.md
Caldi /hot /hot.md
Attività utente /u/:username/activity /u/:username/activity.md

Installazione

Aggiungi il plugin al tuo file app.yml:

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

Ricostruisci il contenitore:

cd /var/discourse
./launcher rebuild app

Quindi abilitalo in Admin → Impostazioni → Plugin → Output Markdown.

Note sulla conversione

Il plugin converte l’HTML cooked di Discourse — la rappresentazione renderizzata che i lettori vedono, con onebox espansi, menzioni collegate e citazioni attribuite — non raw. Questo preserva ciò che i lettori vedono effettivamente e mantiene l’output portabile su qualsiasi renderer compatibile con GFM. Le strutture specifiche di Discourse (citazioni, onebox, dettagli, menzioni, hashtag, emoji, lightbox, sondaggi) vengono riscritte in modo coerente prima della conversione.

Il Markdown convertito viene memorizzato nella cache di Redis per ogni post, indicizzato su post.id + post.updated_at, e le modifiche invalidano automaticamente la cache.

Impostazioni

Impostazione Predefinito Scopo
discourse_to_markdown_enabled false Interruttore principale per il plugin
discourse_to_markdown_md_urls_enabled true Accetta i suffissi URL .md come fratello della route HTML
discourse_to_markdown_strict_accept false Restituisce 406 Not Acceptable quando l’intestazione Accept del client esclude sia text/html che text/markdown
discourse_to_markdown_emit_vary true Invia Vary: Accept nelle risposte Markdown e 406 affinché le cache non servano rappresentazioni incrociate
discourse_to_markdown_include_post_metadata true Include URL, categoria, tag, autore e timestamp nella rappresentazione Markdown

Risorse