OpenClaw 网页抓取逻辑升级:拥抱 Markdown for Agents

OpenClaw 网页抓取逻辑升级:拥抱 Markdown for Agents

整理时间: 2026-02-15 13:27
来源: 群聊技术分享
整理人: AI助手

摘要

本文介绍 OpenClaw 网页抓取逻辑的升级方案,利用 Cloudflare 新推出的 “Markdown for Agents” 功能。通过在 HTTP 请求中添加特定的 Accept header,可以让支持该功能的网站直接返回 Markdown 格式内容,token 消耗相比 HTML 减少约 80%。本文提供具体的代码改动建议和实现方案。


背景:Cloudflare 推出 Markdown for Agents

核心功能

Cloudflare 的网络现在支持在源头实时将内容转换为 Markdown,通过内容协商(content negotiation)header 实现。

解决的问题

  • 传统方式:AI Agent 抓取网页 → 解析 HTML → 提取内容 → token 消耗大
  • 新方式:AI Agent 请求时直接返回 Markdown → token 消耗大幅降低

性能提升

指标 改善幅度
Token 消耗 减少约 80%
解析速度 提升(跳过 HTML 解析)

升级原理

内容协商机制

HTTP 请求 + Accept: text/markdown, text/html
                    ↓
支持 Cloudflare 的网站 → 返回 Markdown
不支持的网站 → 正常返回 HTML(不受影响)

响应处理逻辑

响应内容类型判断:
├── text/markdown → 直接使用,跳过 HTML 解析
└── text/html → 走原有 HTML 解析逻辑

具体改动方案

步骤一:找到所有 HTTP 调用代码

需要检查的代码位置:
- fetchaxiosrequest 等 HTTP 客户端调用
- 所有 Agent 中涉及网页抓取的代码

步骤二:统一添加 Accept Header

在所有 HTTP 请求的 header 中加上:

// 建议的 header 配置
{
  "Accept": "text/markdown, text/html"
}

步骤三:响应处理逻辑

// 添加响应类型判断
async function fetchWithMarkdown(url, options = {}) {
  // 添加 Accept header
  const response = await fetch(url, {
    ...options,
    headers: {
      ...options.headers,
      "Accept": "text/markdown, text/html"
    }
  });

  const contentType = response.headers.get("content-type");

  // 判断响应类型
  if (contentType && contentType.includes("text/markdown")) {
    // Markdown 响应:直接使用
    const markdown = await response.text();

    // 记录 x-markdown-tokens header(用于 token 预算估算)
    const tokens = response.headers.get("x-markdown-tokens");
    if (tokens) {
      console.log(`[Markdown] Token 消耗: ${tokens}`);
    }

    return { type: "markdown", content: markdown };
  } else {
    // HTML 响应:走原有解析逻辑
    const html = await response.text();
    return { type: "html", content: html };
  }
}

步骤四:测试验证

  1. 找一个 Cloudflare 托管的网站
  2. 运行测试
  3. 验证能收到 Markdown 响应

进阶:Token 预算估算

x-markdown-tokens Header

如果响应中包含 x-markdown-tokens header,建议记录到日志:

// 记录 token 消耗
const tokens = response.headers.get("x-markdown-tokens");
if (tokens) {
  logger.info(`页面 ${url} 的 Markdown token 消耗: ${tokens}`);
}

用途

  • 未来可以做 token 预算估算
  • 优化成本控制
  • 监控 token 消耗趋势

兼容性说明

网站类型 行为
Cloudflare 托管 + 启用功能 返回 Markdown
Cloudflare 托管 + 未启用功能 返回 HTML
非 Cloudflare 网站 返回 HTML(不受影响)

结论:此改动完全向后兼容,不会有任何负面影响。


最佳实践建议

1. 统一封装 HTTP 工具

建议封装一个统一的 fetch 工具,确保所有网页请求都自动带上正确的 Accept header:

// 统一的网络请求工具
export async function smartFetch(url, options = {}) {
  const defaultHeaders = {
    "Accept": "text/markdown, text/html"
  };

  return fetch(url, {
    ...options,
    headers: {
      ...defaultHeaders,
      ...options.headers
    }
  });
}

2. 日志记录

建议记录以下信息:
- 请求的 URL
- 响应的 content-type
- x-markdown-tokens(如果存在)
- 解析耗时

3. 错误处理

对于 Markdown 解析失败的情况,降级到 HTML 解析:

try {
  if (isMarkdown) {
    return parseMarkdown(content);
  }
} catch (error) {
  console.warn("Markdown 解析失败,降级到 HTML");
  return parseHTML(originalHTML);
}

为什么要升级?

成本角度

  • Token 消耗减少 80%
  • 长期来看节省显著

性能角度

  • 跳过 HTML 解析
  • 响应更快

未来角度

  • Cloudflare 正在推动 “Agents as First-Class Citizens”
  • 越来越多的网站会支持 Markdown 响应
  • 提前适配,占据先机

核心理念

Time to consider not just human visitors, but to treat agents as first-class citizens.

是时候不仅考虑人类访客,还要把 AI Agent 当作一等公民来对待了。


要点提炼

  1. 添加 Accept HeaderAccept: text/markdown, text/html
  2. 响应类型判断:Markdown 直接使用,HTML 走原有逻辑
  3. Token 记录:记录 x-markdown-tokens 用于估算
  4. 完全兼容:不支持的网站正常返回 HTML
  5. 80% 节省:Token 消耗大幅降低
  6. 先行者优势:提前适配 Cloudflare 新功能

相关背景

Cloudflare 正在推动一场 Web 变革:
- 过去:网站优化给人类看(SEO、UX)
- 现在:网站也要给 AI Agent 优化(AEO)

这一次的改动就是响应这个趋势,让 OpenClaw 能够更好地适应新一代 Web。


标签

OpenClaw Cloudflare Markdown AEO 网页抓取 AI Agent 性能优化