Cloudflare为AI代理引入Markdown支持,但文章指出当前网页设计对人机都不友好。应关注“意图工程”,设计更透明的网站,而非限制代理或依赖微数据。
译自:Cloudflare’s new Markdown support shows how the web is evolving for AI agents
作者:David Eastman
我一直喜欢 Markdown 的清晰和简洁,现在会有更多的LLM代理也欣赏它。为了应对越来越多的LLM代理进行搜索,Cloudflare 的网络现在支持实时 Markdown 转换 在源头。
让我们看一个比他们自己文档中建议的页面更不繁忙的页面,并用 curl 请求 Markdown。如果我们也要求详细模式,我们可以看到更多信息:

我们可以看到额外的头部信息,包括 x-markdown-tokens:

因此,假设所有LLM都以相同的方式定义令牌(我不认为它们是),那么我们知道吞噬以下数据将占用 297 个上下文窗口空间。
如果我们查看响应主体:

这是同一页面的 HTML 表示:

你可以清楚地看到两种表示形式中的四个链接。但你也可以看到右侧列的一些内容(例如,“这有帮助吗?”)已经进入了 Markdown。这并没有什么特别奇怪的——尽管我们认为“内容”只是中间列,但实际返回的内容是由页面配置决定的。但我们知道网页上的空间信息无法在 Markdown 中合理传输。而代理不需要这些空间信息。
Cloudflare 在这里做的事情是完全合理的,呼吁“网络必须对代理和人类都有效!”也是如此。但我们确实需要更清楚地了解网络目前是否 真的 对人类运行良好。
网络本身可能是问题所在
网络需要大量工作才能将其转变为具有金融功能的商店(它不是为此而建造的)或检查用户身份(同样,它不是为此而真正建造的)。随着实际网络使用严重偏离最初的愿景,平均网页变得越来越复杂。
关键是,现代网页被设计成一种视觉体验,其中存在许多相互竞争的张力;它不仅仅是带有固定、无关紧要视觉框架的文本内容,可以被跳过。如果“提取内容”是微不足道的,那么广告模式将比现在更容易被颠覆。
所以,虽然对于一个进行有限获取任务的AI代理来说,网站的大部分内容可能看起来像噪音,但读者,我不知道该怎么告诉你,那个网页对其他人来说也主要是噪音。
虽然保护LLM有限的上下文窗口是明智的,但这显然不是一个永久性问题。更大的问题在于将代理视为无法整体理解网站。
意图工程
最初,使用LLM是关于提示;然后是关于上下文;现在是关于意图。因此,假设代理对网络只有提取需求是不正确的。随着LLM变得“更智能”,限制它们的操作方式不是一个好主意。正如我用 Claude 和 GSD 演示的,引导LLM的方法是设定一组好的目标,让它自己找出细节。
例如,LLM很有可能判断实际回答“此页面有帮助吗?”的查询将有助于其改进数据源的总体目标。为什么这只能是人类才能做的事情呢?
超市需要你导航到你需要的东西,而老式单柜台商店对用户来说容易得多。现在我们使用送货服务,我们又回到了让一个薪水过低的初级员工去取我们所有的购物商品。但超市模式最接近网站对所有用户的工作方式,并且在购买前浏览类似商品的能力也是代理可以受益的。与其给代理一个要购买的配料清单,不如直接告诉它你想烤一个披萨。换句话说——专注于意图。
你的网站也可以对代理和人类更友好
渐进增强的世界(大约十年前流行)认识到 JavaScript 很好,只要在 JavaScript 不运行的情况下,一切都以相同的方式工作。人类喜欢一个响应悬停的按钮——但这些修饰不应该干扰导航。
虽然一些糟糕的网站会产生奇怪的字母数字谜语作为它们的 URL,但大多数网站确实使用简单且逻辑的结构,如 /products/items,这有助于人类和机器人导航。
如果你的网站说“致电获取报价”,我们已经知道 OpenClaw 会这样做。你不能再举手说:“从现在起,只欢迎人类。”所以也许现在是设计得更透明一些的时候了。
如果你发现你需要为机器人提供特定的端点以避免“UI 混乱”,那么最好先解决糟糕的 UI,然后再担心机器人。讽刺的是,大多数 LLM 可以很好地分析、解释和协助创建网站。
使用微数据获得有限的胜利
我真的没有注意到 Schema.org 标记的使用情况,并且为机器阅读器提供内容线索有点过时,因为 LLM 的内部结构本身就是一个庞大的语义关系网络。尽管如此,使用微数据并不昂贵。让我们看一个他们给出的早期电影目录示例:
从没有装饰的开始:
<div>
<h1>Avatar</h1>
<span>Director: James Cameron (born August 16, 1954)</span>
<span>Science fiction</span>
<a href="../movies/avatar-theatrical-trailer.html">Trailer</a>
</div>
这可以通过固定范围更好地定义:
<div itemscope itemtype="https://schema.org/Movie">
<h1>Avatar</h1>
<span>Director: James Cameron (born August 16, 1954)</span>
<span>Science fiction</span>
<a href="../movies/avatar-theatrical-trailer.html">Trailer</a>
</div>
我没有使用过需要这种帮助的 LLM,但它很可能提高搜索效率。
Nate Jones 说得非常对:“提示工程告诉AI做什么。上下文工程告诉AI知道什么。意图工程告诉AI想要什么。”
不要将AI代理的网页浏览视为对网页的三角洲部队突袭,其任务是尽快走私信息。退一步,给代理有意义的目标。
另一方面,如果你的网站旨在迷惑用户,并且你担心代理会绕过它,请检查你的先验条件。