AI 时代的网站新标配:/llms.txt,正在成为下一个 robots.txt

5 阅读7分钟

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

0 前言

一项提案:希望大家在网站上统一使用 /llms.txt 文件,在推理(inference)阶段为 LLM 提供帮助其理解和使用网站的信息。

大型语言模型越来越依赖网站信息,但它们面临一个关键限制:上下文窗口太小,无法把大多数网站“整站塞进去”。把包含导航、广告和 JavaScript 的复杂 HTML 页面转换成适合 LLM 的纯文本既困难又不精确。

网站既服务人类读者,也服务 LLM;但 LLM 更需要把简明、专家级的信息集中放在一个容易访问的位置。这在开发环境等场景尤为重要:LLM 需要快速查到编程文档和 API。

1 提案

建议网站新增 /llms.txt 的 Markdown 文件,提供对 LLM 友好的内容。包含简要背景、使用指引,以及指向更详细 Markdown 文件的链接。

既便于人和 LLM 阅读,也够“规整”,可用固定方法处理(如解析器、正则表达式等传统编程手段)。

建议:网站上那些可能对 LLM 有助的页面,除原 HTML 版本,再在同一 URL 后追加 .md 提供一个干净的 Markdown 版本。(如果 URL 没有文件名,则追加 index.html.md。)

FastHTML 项目 的文档遵循了这两条建议。如:FastHTML 文档的 llms.txt。再如一个普通 HTML 文档页:by_example.html,以及同 URL 的 Markdown 版本:by_example.html.md

该提案不规定如何处理 llms.txt 文件,因为这取决于具体应用。如 FastHTML 项目选择把 llms.txt 自动“展开”为两个 Markdown 文件,它会把链接 URL 的内容拉取进来,并用一种适合 Claude 等 LLM 使用的 XML 结构组织起来:

它们由命令行工具 llms_txt2ctx 生成,FastHTML 文档也向用户说明了如何使用这些文件。

2 llms.txt的用途

既可帮助开发者快速导航软件文档,也可让企业概述组织结构,甚至把复杂法律条文拆解给相关方。也同样适用于个人网站(例如回答简历相关问题)、电商网站(说明产品与政策)、学校和大学(快速呈现课程信息与资源)等。

所有 nbdev 项目现在默认会为所有页面生成 .md 版本。所有使用 nbdev 的 Answer.AI 和 fast.ai 软件项目都已经用这个特性重新生成文档。例子可见 fastcore 的 docments 模块的 Markdown 版本(对应原页面为 docments.html)。

3 格式

目前对语言模型最广泛且最易理解的格式是 Markdown。只要清楚标出关键 Markdown 文件的位置,就已是很好第一步。再加点基础结构,就能帮助模型定位“需要的信息可能在哪”。

llms.txt 的一个特点是:它用 Markdown 来组织信息,而非XML。因为我们预期它会被语言模型和智能体直接阅读。当然,llms.txt 的信息仍遵循一个固定格式,也可用标准程序工具读取和解析。

llms.txt 的规范适用于放在网站根路径 /llms.txt(也可选放在子路径)的文件。符合规范的文件应按以下顺序包含这些 Markdown 章节:

  • 一个 H1:项目或站点名称(这是唯一必需的部分)
  • 一个 blockquote:项目的简短摘要,包含理解后续内容所需的关键信息
  • 0或多个非标题的 Markdown 段落/列表等:进一步说明项目以及如何理解后续文件
  • 0或多个以 H2 标题分隔的章节:每个章节包含一个“文件列表”,列出更多细节的 URL
    • 每个“文件列表”是一个 Markdown 列表项:必须包含一个 Markdown 超链接 [name](url),之后可选加 : 和说明备注

示例:

# Title

> Optional description goes here

Optional details go here

## Section name

- [Link title](https://link_url): Optional link details

## Optional

- [Link title](https://link_url)

其中,“Optional” 章节有特殊含义:如果包含该章节,则其中 URL 在需要更短上下文时可以跳过。它适用于“经常可以不读也不影响理解”的次要信息。

4 现有标准

llms.txt 的设计目标

与现有 Web 标准共存:

  • 站点地图(sitemap)为搜索引擎列出全部页面
  • llms.txt 为 LLM 提供经过筛选的概览

还能与 robots.txt 互补:

  • robots.txt 告诉爬虫“哪些内容允许访问”
  • llms.txt 则给出“允许访问内容的上下文与指引”

llms.txt 也可以引用站点上的结构化数据标记,帮助 LLM 理解这些信息在站点中的语境。

将文件路径标准化为固定的 /llms.txt,思路与 /robots.txt/sitemap.xml 类似。但 robots.txt 和 llms.txt 目的不同:

  • robots.txt 主要用于告知自动化程序(例如搜索索引机器人)哪些访问是可接受的
  • llms.txt 更多用于“按需使用”的场景,如用户在编码时需要引入某个库的文档,或在带搜索能力的聊天机器人中询问某个主题信息。

预期

llms.txt 主要用于推理阶段(inference),也就是用户寻求帮助的当下,而非用于训练(training)。不过,如果 llms.txt 足够普及,未来训练流程也可能利用这些信息。

sitemap.xml 是站点上全部可索引、面向人类的信息清单,但不能替代 llms.txt,因为:

  • 往往不会列出面向 LLM 的页面 .md 版本
  • 不会包含外部链接(但外部链接可能对理解很有帮助)
  • 内容总量通常远超 LLM 上下文窗口,而且包含大量“理解站点并不必要”的信息

5 示例

下面是一个 llms.txt 示例(FastHTML 项目实际文件的精简版,完整版本见 full version):

# FastHTML

> FastHTML is a python library which brings together Starlette, Uvicorn, HTMX, and fastcore's `FT` "FastTags" into a library for creating server-rendered hypermedia applications.

Important notes:

- Although parts of its API are inspired by FastAPI, it is *not* compatible with FastAPI syntax and is not targeted at creating API services
- FastHTML is compatible with JS-native web components and any vanilla JS library, but not with React, Vue, or Svelte.

## Docs

- [FastHTML quick start](https://fastht.ml/docs/tutorials/quickstart_for_web_devs.html.md): A brief overview of many FastHTML features
- [HTMX reference](https://github.com/bigskysoftware/htmx/blob/master/www/content/reference.md): Brief description of all HTMX attributes, CSS classes, headers, events, extensions, js lib methods, and config options

## Examples

- [Todo list application](https://github.com/AnswerDotAI/fasthtml/blob/main/examples/adv_app.py): Detailed walk-thru of a complete CRUD app in FastHTML showing idiomatic use of FastHTML and HTMX patterns.

## Optional

- [Starlette full documentation](https://gist.githubusercontent.com/jph00/809e4a4808d4510be0e3dc9565e9cbd3/raw/9b717589ca44cedc8aaf00b2b8cacef922964c0f/starlette-sml.md): A subset of the Starlette documentation useful for FastHTML development.

6 高质量编写建议

  • 用词简洁、清晰
  • 链接资源时附上简短但信息量足的说明
  • 避免含糊或不解释的术语
  • 用工具把 llms.txt 展开成“LLM 上下文文件”,并用多个模型测试它们能否正确回答相关问题

7 目录站

互联网上可用的 llms.txt 文件:

8 集成

工具/插件可将 llms.txt 规范接入你的工作流:

9 下一步

llms.txt 规范仍在开放征求社区意见。相关 GitHub 仓库 托管了这份非正式概览,便于版本管理与公开讨论;同时也有一个 Discord 社区 供大家分享落地经验和讨论最佳实践。