如何为 AI 代理提供 Markdown 服务:让你的文档更适合 AI

50 阅读2分钟

介绍 如果您最近访问过开发者 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 来看一下示例。

  1. 检测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