/llms.txt 文件
/llms.txt
文件以在推理时帮助 LLM 使用网站的提案。背景
大型语言模型越来越依赖于网站信息,但面临一个关键限制:上下文窗口太小,无法处理大多数网站的全部内容。将包含导航、广告和 JavaScript 的复杂 HTML 页面转换为 LLM 友好的纯文本既困难又不精确。
虽然网站同时服务于人类读者和大型语言模型(LLM),但后者更受益于集中在一个易于访问位置的、更简洁、更专业的信息。这对于像开发环境这样的用例尤其重要,因为在这些场景中,LLM 需要快速访问编程文档和 API。
提案
我们建议在网站中添加一个 /llms.txt
markdown 文件,以提供对 LLM 友好的内容。该文件提供简要的背景信息、指引以及指向详细 markdown 文件的链接。
llms.txt markdown 对人类和 LLM 都是可读的,但它也采用了一种精确的格式,允许使用固定的处理方法(即,诸如解析器和正则表达式之类的传统编程技术)。
我们进一步建议,网站上那些可能对 LLM 有用的页面,应在其原始 URL 后附加 .md
来提供该页面的纯净 markdown 版本。(不含文件名的 URL 应改为附加 index.html.md
。)
FastHTML 项目在其文档中遵循了这两项提议。例如,这是 FastHTML 文档的 llms.txt。这里还有一个常规 HTML 文档页面的例子,以及在相同 URL 后附加.md 扩展名的版本。
本提案不包含任何关于如何处理 llms.txt 文件的具体建议,因为这将取决于具体的应用。例如,FastHTML 项目选择使用一种基于 XML 的结构,自动将 llms.txt 扩展为两个包含链接 URL 内容的 markdown 文件,这种结构适合在像 Claude 这样的 LLM 中使用。这两个文件是:llms-ctx.txt,不包含可选的 URL;以及 llms-ctx-full.txt,包含可选的 URL。它们是使用 llms_txt2ctx
命令行应用程序创建的,FastHTML 文档中包含了供用户参考如何使用它们的信息。
llms.txt 文件的多功能性意味着它们可以服务于多种目的——从帮助开发者在软件文档中找到方向,到为企业提供一种概述其结构的方式,甚至为利益相关者分解复杂的法规。它们对于个人网站同样有用,可以帮助回答关于某人简历的问题;对于电子商务网站,可以解释产品和政策;对于学校和大学,可以提供对其课程信息和资源的快速访问。
请注意,所有 nbdev 项目现在默认都会为所有页面创建 .md 版本。所有使用 nbdev 的 Answer.AI 和 fast.ai 软件项目的文档都已通过此功能重新生成。例如,请参阅 fastcore 的 docments 模块的 markdown 版本。
格式
目前,对于语言模型来说,最广泛且最容易理解的格式是 Markdown。简单地指明关键 Markdown 文件的位置是一个很好的第一步。提供一些基本结构有助于语言模型找到所需信息的来源。
llms.txt
文件之所以不寻常,是因为它使用 Markdown 来组织信息,而不是像 XML 这样的传统结构化格式。原因在于我们预计许多这类文件将被语言模型和智能体读取。尽管如此,llms.txt 中的信息遵循特定格式,可以使用标准的基于编程的工具进行读取。
llms.txt 文件规范适用于位于网站根路径 /llms.txt
(或可选地,在子路径中)的文件。符合该规范的文件包含以下 Markdown 部分,并按特定顺序排列:
- 一个 H1 标题,包含项目或网站的名称。这是唯一必须的部分。
- 一个引用块,包含项目的简短摘要,其中包含理解文件其余部分所必需的关键信息。
- 零个或多个除标题外的任何类型的 markdown 部分(例如,段落、列表等),包含有关项目以及如何解读所提供文件的更详细信息。
- 零个或多个由 H2 标题分隔的 markdown 部分,包含提供进一步详细信息的 URL 的“文件列表”。
- 每个“文件列表”都是一个 markdown 列表,包含一个必需的 markdown 超链接
[名称](url)
,然后可以选择性地跟一个:
和关于文件的注释。
- 每个“文件列表”都是一个 markdown 列表,包含一个必需的 markdown 超链接
这是一个模拟示例
# 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。请用它来存放通常可以省略的次要信息。
现有标准
llms.txt 旨在与当前的 Web 标准共存。虽然 sitemap(站点地图)为搜索引擎列出所有页面,但 llms.txt
为 LLM 提供了一个精心策划的概览。它可以通过为允许的内容提供上下文来补充 robots.txt。该文件还可以引用网站上使用的结构化数据标记,帮助 LLM 理解如何在上下文中解释这些信息。
在文件路径上进行标准化的方法,效仿了 /robots.txt
和 /sitemap.xml
的做法。robots.txt 和 llms.txt
的用途不同——robots.txt 通常用于告知自动化工具对网站的何种访问被视为可接受的,例如对于搜索索引机器人。而另一方面,llms.txt
的信息通常在用户明确请求某个主题的信息时按需使用,例如在项目中包含某个编程库的文档时,或者向具有搜索功能的聊天机器人询问信息时。我们预计 llms.txt
主要对*推理*(inference)有用,即在用户寻求帮助的时候,而不是用于*训练*(training)。然而,如果 llms.txt
的使用变得普遍,未来的训练过程或许也能利用 llms.txt
文件中的信息。
sitemap.xml 是一个网站上所有可索引的人类可读信息的列表。它不能替代 llms.txt
,因为它:
- 通常不会列出页面的 LLM 可读版本
- 不包含外部网站的 URL,即使这些 URL 可能有助于理解信息
- 通常会包含总量太大而无法放入 LLM 上下文窗口的文档,并且会包含许多理解网站所非必需的信息。
示例
这是一个 llms.txt
的示例,这里是用于 FastHTML 项目的文件的精简版(另请参阅完整版)
# 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.
要创建有效的 llms.txt
文件,请考虑以下准则:
- 使用简洁、清晰的语言。
- 链接到资源时,请包含简短、信息丰富的描述。
- 避免使用模棱两可的术语或未经解释的行话。
- 运行一个工具,将你的
llms.txt
文件扩展为 LLM 上下文文件,并测试多个语言模型,看它们是否能回答关于你内容的问题。
目录
以下是一些列出网络上可用的 llms.txt
文件的目录:
集成
有多种工具和插件可帮助你将 llms.txt 规范集成到你的工作流程中:
llms_txt2ctx
- 用于解析 llms.txt 文件并生成 LLM 上下文的命令行界面(CLI)和 Python 模块- JavaScript 实现 - JavaScript 实现示例
vitepress-plugin-llms
- VitePress 插件,可按照 llms.txt 规范自动为网站生成对 LLM 友好的文档docusaurus-plugin-llms
- Docusaurus 插件,用于按照 llmtxt.org 标准生成对 LLM 友好的文档- Drupal LLM 支持 - 一个 Drupal Recipe,为任何 Drupal 10.3+ 网站提供对 llms.txt 提案的全面支持
llms-txt-php
- 一个用于读写 llms.txt Markdown 文件的库
后续步骤
llms.txt
规范对社区意见开放。一个 GitHub 仓库托管了这份非正式概述,以便进行版本控制和公开讨论。还有一个 社区 Discord 频道可供分享实施经验和讨论最佳实践。