/llms.txt 文件

A proposal to standardise on using an /llms.txt file to provide information to help LLMs use a website at inference time.
Author

杰里米·霍华德

Published

2024年9月3日

背景

大型语言模型越来越依赖网站信息,但面临一个关键限制:上下文窗口太小,无法处理大多数网站的全部内容。将复杂的HTML页面(包含导航、广告和JavaScript)转换为LLM友好的纯文本既困难又不精确。

虽然网站同时服务于人类读者和大型语言模型(LLMs),但后者受益于在一个单一、可访问的位置收集的更简洁、专家级的信息。这对于开发环境这样的用例尤其重要,在这些场景中,LLMs 需要快速获取编程文档和 API。

提案

llms.txt logo

llms.txt logo

我们建议在网站上添加一个 /llms.txt markdown 文件,以提供适合LLM的内容。该文件提供简要的背景信息、指导和指向详细markdown文件的链接。

llms.txt markdown 是人类和 LLM 可读的,但也是一种精确的格式,允许固定的处理方法(即经典的编程技术,如解析器和正则表达式)。

我们进一步建议,包含对LLMs阅读可能有用信息的网站页面在与原始页面相同的URL上提供一个干净的markdown版本,但需要附加.md。 (没有文件名的URL应该附加index.html.md。)

FastHTML 项目遵循这两个提案进行文档编写。例如,这里是FastHTML docs llms.txt。另外,这是一个常规 HTML 文档页面的示例,具有完全相同的 URL,但带有.md 扩展名

本提案未包括任何针对如何处理 llms.txt 文件的特定建议,因为这将取决于应用程序。例如,FastHTML 项目选择自动将 llms.txt 扩展为两个包含链接 URL 内容的 markdown 文件,使用适合 LLM(如 Claude)使用的基于 XML 的结构。这两个文件是: llms-ctx.txt,该文件不包括可选的 URL,以及 llms-ctx-full.txt,该文件包括它们。它们是使用 llms_txt2ctx 命令行应用程序创建的,FastHTML 文档中包括有关如何使用它们的信息。

llms.txt 文件的多功能性意味着它们可以用作多种目的 - 从帮助开发人员熟悉软件文档,到为企业提供概述其结构的方法,甚至为利益相关者解析复杂的立法。它们对于个人网站同样有用,可以帮助解答关于个人简历的问题,对于电子商务网站则可以解释产品和政策,或者为学校和大学提供快速访问其课程信息和资源的渠道。

请注意,所有 nbdev 项目现在默认创建所有页面的 .md 版本。所有使用 nbdev 的 Answer.AI 和 fast.ai 软件项目都已利用此功能重新生成了其文档。有关示例,请参见 fastcore 的文档模块markdown 版本

格式

目前,语言模型最广泛且易于理解的格式是Markdown。简单地展示关键Markdown文件的位置是一个很好的第一步。提供一些基本结构有助于语言模型找到所需信息的来源。

llms.txt 文件不同寻常,因为它使用 Markdown 来构建信息,而不是经典的结构化格式,如 XML。这样做的原因是我们预期许多这些文件将被语言模型和代理读取。这样说来,llms.txt 中的信息遵循特定格式,可以使用标准的基于程序的工具读取。

llms.txt 文件规范适用于位于网站根路径 /llms.txt 的文件(或者可选地,位于子路径中)。遵循该规范的文件包含以下按特定顺序的 markdown 部分:

  • 一个包含项目或网站名称的 H1。这是唯一必需的部分
  • 一个包含项目简要摘要的引用块,包含理解文件其余部分所需的关键信息
  • 零个或多个markdown部分(例如段落、列表等),任何类型,除了标题,包含关于项目的更详细信息以及如何解释提供的文件
  • 零个或多个由H2标题分隔的markdown部分,包含可获取更多详细信息的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)

请注意,“可选”部分具有特殊含义——如果包含了它,那么在需要更短的上下文时,可以跳过那里提供的URL。将其用于通常可以跳过的次要信息。

现有标准

llms.txt旨在与当前的网络标准共存。虽然网站地图列出了所有页面供搜索引擎使用,llms.txt提供了LLMs的精选概述。它可以通过提供允许内容的上下文来补充robots.txt。该文件还可以引用网站上使用的结构化数据标记,帮助LLMs理解如何在上下文中解释这些信息。

文件路径标准化的方法遵循 /robots.txt/sitemap.xml 的方式。 robots.txt 和 llms.txt 的用途不同——robots.txt 通常用于让自动化工具知道哪些访问网站的权限是可接受的,例如搜索索引机器人。另一方面,llms.txt 中的信息通常在用户明确请求有关主题的信息时使用,例如在项目中包含编码库的文档,或在询问具有搜索功能的聊天机器人时获取信息。我们的期望是 llms.txt 主要对 推理 有用,即在用户寻求帮助时,而不是用于 训练。然而,也许如果 llms.txt 的使用变得普遍,未来的训练过程也可以利用 llms.txt 文件中的信息。

sitemap.xml是网站上所有可索引的人类可读信息的列表。这并不能替代llms.txt,因为它:

  • 通常不会列出LLM可读版本的页面
  • 不包括指向外部网站的链接,即使它们可能对理解信息有所帮助
  • 一般会涵盖文档,这些文档的总大小将过大,无法放入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://docs.fastht.ml/path/quickstart.html.md): A brief overview of many FastHTML features
- [HTMX reference](https://raw.githubusercontent.com/path/reference.md): Brief description of all HTMX attributes, CSS classes, headers, events, extensions, js lib methods, and config options

## Examples

- [Todo list application](https://raw.githubusercontent.com/path/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/path/starlette-sml.md): A subset of the Starlette documentation useful for FastHTML development.

要创建有效的 llms.txt 文件,请考虑以下准则:使用简明清晰的语言。当链接到资源时,包括简短的信息描述。避免使用模糊的术语或未解释的行业术语。运行一个工具,将您的 llms.txt 文件扩展为LLM上下文文件,并测试多个语言模型,以查看它们是否能够回答有关您内容的问题。

目录

这里有几个目录列出了可在网络上找到的 llms.txt 文件:

下一步

llms.txt 规范开放给社区输入。一个 GitHub 仓库 托管了 此非正式概述,允许进行版本控制和公开讨论。一个 社区 Discord 频道 可用于分享实现经验和讨论最佳实践。