跳转到内容
搜索文档

Markdown for Agents(面向 Agent 的 Markdown)

最后更新 查看 MarkdownAgent 设置

什么是 Markdown for Agents

Markdown 已迅速成为 Agent 和 AI 系统的通用语言。该格式的明确结构使其非常适合 AI 处理,最终获得更好的结果,同时最小化 token 浪费。

Cloudflare 的网络支持在源站进行实时内容转换,对于使用内容协商标头且启用了 Markdown for Agents 的 zone,当 AI 系统从任何使用 Cloudflare 的网站请求页面时,它们可以在请求中表达 text/markdown 偏好,我们的网络会在可能的情况下自动高效地将 HTML 转换为 Markdown。

在我们的博客公告中阅读更多信息。

如何使用

要从启用了 Markdown for Agents 的 zone 获取任何页面的 Markdown 版本,客户端需要添加带有 text/markdown 作为选项之一的 Accept 协商标头。Cloudflare 会检测到此请求,从源站获取原始 HTML 版本,并在提供给客户端之前将其转换为 Markdown。

以下是一个带有 Accept 协商标头、从我们的开发者文档请求此页面的 curl 示例:

curl https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ \
  -H "Accept: text/markdown"

如果您使用 Workers 构建 AI Agent,可以使用 TypeScript:

const r = await fetch(
	`https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/`,
	{
		headers: {
			Accept: "text/markdown",
		},
	},
);
const tokenCount = r.headers.get("x-markdown-tokens");
const originalTokenCount = r.headers.get("x-original-tokens");
const markdown = await r.text();
const r = await fetch(
	`https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/`,
	{
		headers: {
			Accept: "text/markdown",
		},
	},
);
const tokenCount = r.headers.get("x-markdown-tokens");
const originalTokenCount = r.headers.get("x-original-tokens");
const markdown = await r.text();

此请求的响应现在以 markdown 格式呈现:

HTTP/2 200
date: Wed, 11 Feb 2026 11:44:48 GMT
content-type: text/markdown; charset=utf-8
content-length: 2899
vary: accept
cache-control: public, max-age=3600
strict-transport-security: max-age=63072000; includeSubDomains
x-markdown-tokens: 725
x-original-tokens: 12345
content-signal: ai-train=yes, search=yes, ai-input=yes

---
title: Markdown for Agents · Cloudflare Agents docs
---

## 什么是 Markdown for Agents

Markdown has quickly become the lingua franca for agents and AI systems
as a whole. The format’s explicit structure makes it ideal for AI processing,
ultimately resulting in better results while minimizing token waste.
...

响应标头

Markdown for Agents 在转换后的响应中保留源站响应的标头,因此与安全性和缓存相关的标头在转换后仍然保留。这包括 Strict-Transport-Security(HSTS)、Content-Security-Policy(CSP)、X-Frame-OptionsSet-Cookie、CORS 标头(例如 Access-Control-Allow-Origin)以及缓存标头(Cache-ControlExpiresAge)等标头。

由于正文被替换为转换后的 Markdown,将应用以下更改:

  • Content-Type 设置为 text/markdown; charset=utf-8
  • Vary 包含 Accept(保留源站已声明的任何 Vary 维度),以便缓存为 Markdown 和 HTML 存储单独的变体。
  • Content-Length 重新计算以匹配 Markdown 响应的大小。
  • 描述原始正文的标头被移除,因为它们不再与转换后的响应匹配:Content-EncodingContent-RangeTransfer-EncodingETagLast-ModifiedETagLast-Modified 被丢弃,因为无法对转换后的响应满足条件请求(If-None-MatchIf-Modified-Since)。

Markdown for Agents 还会添加下面描述的 token 计数标头。

Token 计数标头

请注意,我们在转换后的响应中包含 token 计数标头。x-markdown-tokens 表示 Markdown 文档中的估计 token 数,x-original-tokens 表示转换前原始 HTML 文档中的估计 token 数。您可以在流程中使用这些值,例如计算上下文窗口大小、估计 Markdown 转换的 token 节省,或决定分块策略。

Content Signals Policy

Content Signals 是一个框架,允许任何人在访问内容后表达其内容使用偏好。

如果您的源站已设置 content-signal 标头,Markdown for Agents 会在转换后的响应中保留该值——源站的政策具有权威性。这使您可以通过在源站设置 content-signal 标头来定义自定义 Content Signal 政策。

当源站响应不包含 content-signal 标头时,Markdown for Agents 会添加默认的 Content-Signal: ai-train=yes, search=yes, ai-input=yes,表示内容可用于 AI 训练、搜索结果和 AI 输入(包括 Agent 用途)。

输出格式

Markdown for Agents 返回具有一致、可预测结构的 Markdown 文档,以便 AI 系统可以依赖它而无需针对每个站点编写解析逻辑。响应始终遵循以下布局:

  1. YAML frontmatter(YAML 前置元数据),包含从页面 <meta> 标签提取的元数据。仅当存在至少一个受支持的 meta 标签时才输出。
  2. 正文 Markdown,从文档正文转换。非内容元素(如页眉、页脚、导航、脚本和样式)在预处理期间被剥离。有关被移除元素的完整列表,请参阅 Workers AI Markdown Conversion 文档中的 HTML 预处理
  3. JSON-LD 结构化数据,在文档末尾保留为围栏 json 代码块。仅当源 HTML 包含 JSON-LD 时才输出。

YAML 前置元数据

当源 HTML 包含受支持的 <meta> 标签时,Markdown for Agents 会在响应前添加 YAML 前置元数据块。该块使用以下字段:

字段 <meta> 标签
title <meta name="title">,回退到 <meta property="og:title">
description <meta name="description">,回退到 <meta property="og:description">
image <meta property="og:image">

仅输出有值的字段。如果源 HTML 不包含任何受支持的 meta 标签,则完全省略 frontmatter 块。

对于 titledescription,标准 <meta name="..."> 形式始终优先于 Open Graph <meta property="og:..."> 形式,无论它们在 HTML 中的顺序如何。仅当标准形式缺失时才使用 Open Graph 值作为回退。

示例输出:

---
title: My Page Title
description: A short summary of the page.
image: https://example.com/cover.png
---

# Page heading

...

JSON-LD

JSON-LD 是一种结构化数据格式,搜索引擎和 AI 系统使用它来解读页面的语义内容。Markdown for Agents 通过在转换后的 Markdown 末尾的单个围栏 json 代码块中附加,保留源 HTML 中任何 <script type="application/ld+json"> 块。

如果源 HTML 包含多个 JSON-LD 脚本,它们全部连接在同一代码块内,每个占一行。

JSON-LD 是输出中唯一保留的 <script> 内容——所有其他 <script><style> 内容在 HTML 预处理期间被剥离。

示例输出:

... main markdown content ...

```json
{
	"@context": "https://schema.org",
	"@type": "Article",
	"headline": "Article Title",
	"author": { "@type": "Person", "name": "Jane Doe" }
}
```

如何启用

要在仪表板中为您的 zone 启用 Markdown for Agents:

  1. 登录 Cloudflare 仪表板 并选择您的账户(您需要 Pro 或 Business 计划)。
  2. 选择要配置的 zone。
  3. 访问 AI Crawl Control 部分。
  4. 启用 Markdown for Agents(面向代理的 Markdown)

为特定子域或路径启用

要为特定子域或路径(而非整个 zone)启用 Markdown for Agents,请创建配置规则

  1. 登录 Cloudflare 仪表板 并选择您的账户。
  2. 选择要配置的 zone。
  3. 前往 Rules(规则) > Overview(概览),选择 Create rule(创建规则) > Configuration Rules(配置规则)
  4. When incoming requests match 下,构建表达式以匹配您的子域(例如 http.host eq "docs.example.com")或路径。
  5. Then the settings are(然后设置为) 下,选择 Add setting(添加设置) > Markdown for Agents(面向代理的 Markdown),并将其设置为 On(开启)
  6. 选择 Deploy(部署)

要使用 API 为您的 zone 启用 Markdown for Agents,请向 Cloudflare API 的 /client/v4/zones/{zone_tag}/settings/content_converter 发送 PATCH 请求,载荷为 {"value": "on"}

您需要创建一个启用了 Zone Settings 编辑权限的 API 令牌。

示例:

Enable Markdown for Agentsbash
curl -X PATCH 'https://api.cloudflare.com/client/v4/zones/{zone_tag}/settings/content_converter' \
  --header 'Content-Type: application/json' \
  --header "Authorization: Bearer {api_token}" --data-raw '{"value": "on"}'

为特定子域或路径启用

要为特定子域或路径(而非整个 zone)启用 Markdown for Agents,请创建配置规则

Enable Markdown for Agents for a subdomainbash
curl --request PUT \
  --url "https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/phases/http_config_settings/entrypoint" \
  --header "Authorization: Bearer {api_token}" \
  --header "Content-Type: application/json" \
  --data '{
    "rules": [{
      "expression": "http.host eq \"docs.example.com\"",
      "action": "set_config",
      "action_parameters": {
        "content_converter": true
      },
      "description": "Enable Markdown for Agents for docs subdomain"
    }]
  }'

您还可以使用基于路径的表达式,例如 starts_with(http.request.uri.path, "/blog/")。有关构建表达式的更多信息,请参阅规则语言

如果您正在使用 Cloudflare for SaaS,并希望为自定义主机名启用 Markdown for Agents,您有两个选项:

为所有自定义主机名启用

要为 SaaS zone 上的所有自定义主机名启用 Markdown for Agents:

  1. 登录 Cloudflare 仪表板 并选择您的账户。
  2. 选择您的 SaaS zone。
  3. 找到 Quick Actions
  4. 切换 Markdown for Agents(面向代理的 Markdown) 按钮以启用。

为特定自定义主机名启用

为特定自定义主机名启用 Markdown for Agents 需要具有自定义元数据访问权限的高级订阅

步骤 1:在自定义主机名上设置自定义元数据

通过 API 创建或更新自定义主机名时,将 content_converter 添加到 custom_metadata 对象:

curl --request PATCH \
  --url "https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_hostnames/{custom_hostname_id}" \
  --header "Authorization: Bearer {api_token}" \
  --header "Content-Type: application/json" \
  --data '{
    "custom_metadata": {
      "content_converter": "enabled"
    }
  }'

步骤 2:创建配置规则

在 SaaS zone 上创建配置规则,匹配具有该元数据的自定义主机名并启用内容转换:

curl --request PUT \
  --url "https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/phases/http_config_settings/entrypoint" \
  --header "Authorization: Bearer {api_token}" \
  --header "Content-Type: application/json" \
  --data '{
    "rules": [{
      "expression": "lookup_json_string(cf.hostname.metadata, \"content_converter\") eq \"enabled\"",
      "action": "set_config",
      "action_parameters": {
        "content_converter": true
      },
      "description": "Enable content converter for opted-in custom hostnames"
    }]
  }'

这将为设置了 content_converter 自定义元数据标签的自定义主机名启用该功能。

可用性与定价

Markdown for Agents 向 Pro、Business 和 Enterprise 计划以及 SSL for SaaS 客户提供,免费使用。

在 Cloudflare 上试用

我们已在开发者文档博客中启用此功能,邀请所有 AI 爬虫和 Agent 使用 markdown 而非 HTML 消费我们的内容。

curl https://blog.cloudflare.com/markdown-for-agents/ \
  -H "Accept: text/markdown"

限制

  • 我们仅从 HTML 转换,其他类型的文档可能在未来包含。
  • 源站响应不能超过 2 MB(2,097,152 字节)。

其他 Markdown 转换 API

如果您正在构建需要在 Cloudflare 外部进行任意文档转换的 AI 系统,或内容源不提供 Markdown for Agents,我们提供其他方式为您的应用将文档转换为 Markdown:

  • Workers AI AI.toMarkdown() 支持多种文档类型和摘要。
  • Browser Run /markdown 端点支持 markdown 转换,如果您需要在转换前在真实浏览器中渲染动态页面或应用。

这篇文档对您有帮助吗?