Making Agent-Friendly Pages with Content Negotiation
核心观点
Agent 浏览网页的方式与人类不同。它们不需要 CSS、客户端 JavaScript 或图片。所有这些标记都会填满它们的 context window,在不增加有用信息的情况下消耗 tokens。Agent 需要的是干净的、结构化的文本。
创新: Vercel 通过内容协商(content negotiation)让同一 URL 同时提供 markdown 给 Agent 和 HTML 给人类,无需重复内容或单独站点。
技术实现
1. HTTP Accept Header
Agent 使用 HTTP Accept header 指定它们偏好的格式。例如 Claude Code 发送:
Accept: text/markdown, text/html, */*
通过将 text/markdown 放在第一位,Agent 表明当有 markdown 时优先于 HTML。
2. 中间件路由
Vercel 中间件检查传入请求的 Accept header,检测这些偏好。当 markdown 被偏好时,将请求路由到 Next.js route handler,将 Contentful 富文本内容转换为 markdown。
3. Markdown Sitemap
实现了 markdown sitemap,以 Agent 优化的格式列出所有内容。Sitemap 包含每个内容的元数据,包括发布日期、内容类型,以及 HTML 和 markdown 版本的直接链接。
性能收益
| 指标 | 数据 |
|---|---|
| 典型博客文章(HTML) | 500 KB |
| 相同内容(Markdown) | 2 KB |
| Payload 减少 | 99.6% |
对于在 token 限制下运行的 Agent,较小的 payload 意味着它们每请求可以消费更多内容,将预算花在实际信息而不是标记上。
同步机制
使用 Next.js 16 remote cache 和共享 slugs 保持 HTML 和 markdown 版本同步。当内容在 Contentful 中更新时,两个版本同时刷新。
实践方法
尝试一下:发送 curl 请求
curl https://vercel.com/blog/self-driving-infrastructure -H "accept: text/markdown"
或者直接在 URL 末尾添加 .md:
https://vercel.com/blog/making-agent-friendly-pages-with-content-negotiation.md