/llms.txt 文件
/llms.txt
file to provide information to help LLMs use a website at inference time.
背景
大型语言模型越来越依赖网站信息,但面临一个关键限制:上下文窗口太小,无法处理大多数网站的全部内容。将复杂的HTML页面(包含导航、广告和JavaScript)转换为LLM友好的纯文本既困难又不精确。
虽然网站同时服务于人类读者和大型语言模型(LLMs),但后者受益于在一个单一、可访问的位置收集的更简洁、专家级的信息。这对于开发环境这样的用例尤其重要,在这些场景中,LLMs 需要快速获取编程文档和 API。
提案
我们建议在网站上添加一个 /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)
,然后可选地跟一个:
和关于文件的备注。
- 每个“文件列表”是一个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)
请注意,“可选”部分具有特殊含义——如果包含了它,那么在需要更短的上下文时,可以跳过那里提供的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 频道 可用于分享实现经验和讨论最佳实践。