介绍 如果您最近访问过开发者 Twitter,您可能已经看到过 Bun 关于直接向 Claude Code 等 AI 编码助手提供 Markdown 的推文。
Mintlify和Fumadocs都已经在其文档平台中立即实现了该功能,而我刚刚为Lingo.dev亲自实现了该功能。
这就是为什么它很重要以及如何自己实现它。
问题:HTML 膨胀 AI 代理可以抓取网页内容来帮助开发者。大多数情况下,这些内容会以 HTML 格式返回。但 HTML 中包含一些标记,它们会消耗 token 而不会添加任何有意义的信息,从而降低性能。
解决方案:内容协商 优雅的解决方案是内容协商。这是一种标准的 HTTP 机制,客户端使用Accept标头告诉服务器它们喜欢什么格式。
当 AI 代理使用Accept: text/markdown或请求您的文档时Accept: text/plain,您的服务器可以使用 Markdown 而不是 HTML 进行响应。
这意味着:
相同信息使用更少的令牌 更容易解析和理解 上下文窗口中可容纳更多文档 实施指南 确切的实现细节取决于您的编程语言和框架,但总体方法是相同的。
让我们通过 Express.js 来看一下示例。
- 检测Accept头 当请求到达时,检查Accept标头是否包含text/markdown或text/plain:
app.get("/docs/*", (req, res) => { const acceptHeader = req.headers.accept || "";
if (acceptHeader.includes("text/markdown")) { // Serve Markdown } else if (acceptHeader.includes("text/plain")) { // Serve plain text } else { // Serve HTML (default behavior) } }); 2. 提供原始 Markdown 加载并返回所请求页面的原始 Markdown 内容:
if (acceptHeader.includes("text/markdown")) { const markdownContent = await loadMarkdownForPage(req.path); res.setHeader("Content-Type", "text/markdown; charset=utf-8"); res.send(markdownContent); return; } 3. 恢复现有行为 对于所有其他请求(浏览器、爬虫等),继续使用现有的 HTML 渲染:
res.render("docs", { content: processedContent }); 4. 测试你的实现 用于curl验证您的实施是否正常工作:
Request Markdown
curl -H 'Accept: text/markdown'
Request plain text
curl -H 'Accept: text/plain'
Request HTML (default)
curl -H 'Accept: text/html' 对于 Markdown 请求,您应该看到:
响应头:Content-Type: text/markdown; charset=utf-8 正文:不带 HTML 标签的原始 Markdown 内容 对于 HTML 请求,您应该看到正常呈现的页面。
进一步阅读和资源 要了解有关如何实现这一点的更多信息,请查看以下资源:
接受标题文档 Next.js 模板由@cramforce提供 @retlehs的Laravel 设置指南 @skeptrune提供的静态网站、Cloudflare Workers 和 Caddy 设置指南。 (如果您创建了自己的指南、示例或模板,请在评论中分享,以便我将其添加到帖子中。) 查看更多www.youjiutian.com