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 调用代码
需要检查的代码位置:
- fetch、axios、request 等 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 };
}
}
步骤四:测试验证
- 找一个 Cloudflare 托管的网站
- 运行测试
- 验证能收到 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 当作一等公民来对待了。
要点提炼
- 添加 Accept Header:
Accept: text/markdown, text/html - 响应类型判断:Markdown 直接使用,HTML 走原有逻辑
- Token 记录:记录 x-markdown-tokens 用于估算
- 完全兼容:不支持的网站正常返回 HTML
- 80% 节省:Token 消耗大幅降低
- 先行者优势:提前适配 Cloudflare 新功能
相关背景
Cloudflare 正在推动一场 Web 变革:
- 过去:网站优化给人类看(SEO、UX)
- 现在:网站也要给 AI Agent 优化(AEO)
这一次的改动就是响应这个趋势,让 OpenClaw 能够更好地适应新一代 Web。
标签
OpenClaw Cloudflare Markdown AEO 网页抓取 AI Agent 性能优化