前几天晚上我又在干蠢事。半年没更新的博客,后台一堆死链,样式也对不齐。我扫了一眼,决定“至少把 agent 入口做了吧”——llms.txt,半小时的事。典型的拿小工程逃避大工程。
然后卡住了。格式没什么,H1、blockquote 摘要、几个 H2,对着 llmstxt.org 的样例十分钟就能搭出来。卡住的是:我该往里面放什么?
llms.txt 到底在解决什么?大家都说是“帮 AI 省 token”——导航、页脚、cookie 横幅、推荐位,这些跟内容无关的东西不吃上下文。听着对,但只对最外层。
如果你只是列一堆 URL,像这样:
# 我的博客
> 一些关于软件里 trade-off 的碎碎念。
## 主要
- [2026-08-16: llms.txt 是一个构建管道问题](./posts/llms-txt-build-pipeline.html)
- [2026-07-02: 为什么我不再手动写 commit message](./posts/why-not-manual-commit.html)
agent 看完还是得挨个去抓取每个页面。每个页面的 chrome——导航、侧栏、推荐位、cookie 横幅——一个没少。省下的只有站首页那一层。纯 URL 版的 llms.txt,省 token 的作用趋近于零。
真正的节省来自 llms-full.txt。把每个页面的正文抽出来拼一个纯文本,agent 一次抓取就拿到全部。但这下你有两份内容了——人类看的 HTML,agent 看的纯文本。两份内容会漂移。
漂移这层是 llms.txt 最没被认真对待的。评论里有人说得挺直接(我不认识他,但他说到了点上):llms-full.txt 只有从规范内容构建时自动生成才值得信任。手工维护的,从你发布第二篇文章那天起就开始说谎了。
你可能会说:写个构建脚本,把 HTML 转成 .md 镜像不就完了?我一开始也这么想。后来才反应过来,这一步做完,llms.txt 就不再是“一个标准”了,它只是个构建产物。一个构建产物为什么需要标准?因为 agent 需要一个可预测的位置去找它。问题是——现在大多数 agent 根本不找。
Vinicius 在评论里说的就是这个:现在这些爬虫和代理,几乎没有会主动翻 llms.txt 的,多数直接抓渲染后的 HTML 或者调 API。听着丧气,但可能最接近真相。
还有件更怪的事。Google 今年五月把 llms.txt 列进了 Lighthouse 的新信号,归在 Agentic Browsing 类目下。那篇文章的作者自己也是通过和 Gemini 对话才发现的:Gemini 能用到 AIEWF 的 llms.md,不是因为它主动去翻了 llms.txt,而是因为那个 .md 页面被 Google 索引了,顺着搜索结果冒出来的。
llms.txt 现在的实际传播路径,不是“agent 去找这个文件”,而是“文件内容被索引了,agent 通过搜索撞见它”。跟标准设计者脑子里想的那条路不是同一条。
我跑偏了。本来想问的是“该往 llms.txt 里放什么”,结果一路追到“agent 根本不看这个文件”。但这俩其实是同一件事:如果 agent 不主动看,你往里面放什么就不重要了;重要的是,你在写这个文件的时候,被迫回答了一个问题——这个站的核心信息到底是什么。
llms.txt 的价值不在文件本身,在那个被迫的回答。要写出一个像样的 llms.txt,你得做一道题:“如果只给 agent 十分钟读这个站,我希望它先读哪三样东西?”人类站长平时不做这道题,因为 HTML 里什么都在,agent 自己会挑。可一旦你要写 llms.txt,你就得替他挑。这个挑选的动作,才是 llms.txt 真正逼你做的工作。
批评者说 llms.txt 是“在找问题的解决方案”,没想清楚。问题存在——上下文被 chrome 吃掉是真实的。他们真正想说的可能是“规模还不够大,不值得单独搞个标准”。这是两件事。
代价呢?维护成本很小,构建脚本顺手就生成了。真正的代价是你得花一个下午想清楚“核心信息”是什么,而且答案是会过期的——网站变一次,你就得重想一次。另一个风险更实际:如果你做了 llms.txt 但没做构建时的自动生成,半年后它就是一堆死链接和过时的摘要。错误的 llms.txt 比没有更糟,因为它给 agent 一个错误的先验。
好处是,几个月后某个 agent 真开始翻 llms.txt 的时候,你已经想清楚了,不用临时补作业。你赌的不是标准会不会被采纳,是“想清楚自己想被怎么消费”这件事本身有长期价值。
所以说回来,那天晚上我干的蠢事,根子不在 llms.txt 多难加。在我没想清楚这个站该被怎样消耗之前,就先动手给它做 agent 入口。倒着来的。llms.txt 逼我的那道题——“你想被 agent 看到的第一层是什么”——才是我真正需要做的工作。
再往下就是“怎么判断一个站的 .md 镜像值不值得信”了。这个我还没想明白。有人说只有构建时生成的才可信,但怎么验证?总不能每个站都去看它的 CI 配置。先放着,下次接着剥。
