pmusaraj
(Penar Musaraj)
1
Discourse 现在支持原生的 Markdown 端点,这使得 AI 工具和其他客户端能够更轻松地读取论坛内容,而无需解析完整的 HTML 页面。
该功能将通过“即将推出的更改”系统在所有托管站点上默认启用。希望选择退出的管理员可以通过禁用 enable_markdown_endpoints 站点设置来实现。
非常感谢 @benword 创建了最初的 Discourse to Markdown 插件,它是 Discourse 核心中此功能的前身。
Markdown 输出是根据帖子渲染后的(“cooked”)HTML 生成的,保留了读者看到的内容,包括展开的链接和已处理的格式。Discourse 特有的元素,如引用、onebox、代码块、投票和可折叠部分,会被转换回 Markdown。主题回复包含元数据和分页链接,并且转换后的帖子正文会使用内容摘要进行缓存,以便在编辑时生成新的输出。
客户端可以通过 .md URL 或发送 Accept: text/markdown 头来明确请求 Markdown。协商机制会尊重质量值,并在 Markdown 优于 HTML 和 JSON 时选择 Markdown;明确的 .md 请求将保留其格式。支持的 HTML 页面会通过 HTTP Link 头和一个 <link rel="alternate"> 元素来宣传其 Markdown 等效版本。
20 個讚
你能说明一下哪些主题列表是支持的,哪些是不支持的吗?
Orioni
(John)
3
由于我目前使用的是原始的 Discourse-to-Markdown 插件,为了避免输出冲突,我是否需要将其禁用并移除?请给出建议。
我有一个疑问:对于使用 Cloudflare 代理的用户来说,核心功能与他们的转换工具之间似乎存在冲突。问题是:如果我在代理后面,由于该功能仅限订阅用户使用,他们是否会阻止将标头从 HTML 转换为 .md?还是说,由于客户端支持转换,无论是否订阅,转换都会照常进行?
pmusaraj
(Penar Musaraj)
6
是的。如果该插件保持启用状态,它会替换一些核心端点,因此我们建议禁用/卸载该插件,以便使用现在内置于核心中的功能。
目前支持以下列表:
| 支持类型 |
示例 |
| 主要列表 |
/latest.md, /hot.md, /top.md |
| 需要身份验证的个性化列表 |
/new.md, /unread.md |
| 默认分类/子分类列表 |
/c/support/6.md, /c/parent/child/12.md |
| 单标签列表 |
/tag/example.md, /tag/example/123.md |
此外,/categories.md 和 /tags.md 也作为目录受到支持。路由定义
我对 Cloudflare 的这个功能不太熟悉,但据我了解,它会在请求到达服务器之前捕获 Accept text/markdown 请求,将 HTML 进行转换,然后提供该结果。因此,如果使用 Cloudflare,该功能似乎会覆盖 Discourse 的功能。
1 個讚
如果启用了,应该会覆盖吧?我在他们的博客里没找到任何关于他们是否阻止源站自行发送该标头的信息。
pmusaraj
(Penar Musaraj)
8
我不太确定,最简单的办法是在一个实时网站上进行测试,并将其输出结果与 meta 的输出进行对比。两者所包含的内容会有所不同。如果你得到的响应在启用或未启用 Cloudflare 功能时完全相同,那么说明它确实遵循了 Discourse 核心返回的 Markdown。
1 個讚
感谢提供指引,以下是关于此问题的回复:
X-Discourse-Route: topics/show:显示处理该话题的 Discourse(Ruby on Rails)内部控制器/操作。
X-Runtime: 0.133969:应用生成响应所花费的时间(约 133 毫秒)。
Cf-Ray: ...-GRU:请求由位于圣保罗瓜鲁柳斯(Guarulhos/São Paulo,代码 GRU)的 Cloudflare 边缘节点处理。
Cf-Cache-Status: DYNAMIC 和 Cache-Control: no-cache, no-store:动态内容,不会滞留在边缘缓存中。
- 检查不带
.json 的常规 HTML URL 时,服务器返回:
Link: <https://segredin.com/t/conselhos-duvidosos/22054.md>; rel="alternate"; type="text/markdown"
X-Discourse-Crawler-View: true(表明 Discourse 也为爬虫和阅读器提供了原生 .md / Markdown 格式的干净版本)。
指示替代版本的 Link 头部:Link: <https://segredin.com/t/conselhos-duvidosos/22054.md>; rel="alternate"; type="text/markdown"
无论 DNS 层面的外部功能如何,源站都会返回 Vary: Accept。
如果请求选择不带 .json 后缀,它将默认返回 .md 作为转换结果。
HTTP/1.1 200 OK
Content-Type: text/markdown
Vary: Accept
我有些疑惑,因为我收到了来自 Claude 的 12.3 万个请求,而且自从我使用核心功能更新 Discourse 以来,大多数请求量并没有呈指数级增长。我将在未来几周内继续监控。
谢谢,我之前在一个按类别和标签过滤的主题列表中尝试过,但没起作用,所以有点困惑。我测试时总爱选些不合适的例子。
为什么你包含了 /new 和 /unread,却没有包含 /unseen?
1 個讚