/llms.txt 文件
关于标准化使用 /llms.txt 文件以提供信息,帮助大语言模型(LLM)在推理阶段使用网站内容的提案。
Jeremy Howard 2024-09-03
背景
大型语言模型(LLM)越来越依赖网站信息,但面临一个关键限制:上下文窗口(Context Windows)太小,无法处理大多数完整的网站内容。将包含导航、广告和 JavaScript 的复杂 HTML 页面转换为 LLM 友好的纯文本内容既困难又不精确。
虽然网站同时服务于人类读者和 LLM,但 LLM 受益于在单一可访问位置收集的更简洁、专业级别的信息。这在开发环境等用例中尤为重要,LLM 需要快速访问编程文档和 API。
提案
我们建议在网站上添加一个 /llms.txt Markdown 文件,以提供 LLM 友好的内容。该文件提供简要的背景信息、指导和指向详细 Markdown 文件的链接。
llms.txt Markdown 既可以被人类阅读,也可以被 LLM 读取,同时具有精确的格式,允许使用固定的处理方法(即经典的编程技术,如解析器和正则表达式)。
我们进一步建议,网站上可能对 LLM 有价值的信息页面应提供该页面的干净 Markdown 版本,URL 与原始页面相同,但附加 .md 扩展名。(没有文件名的 URL 应附加 index.html.md 代替。)
FastHTML 项目 的文档遵循了这两个建议。例如,这里是 FastHTML 文档的 llms.txt。这里还有一个 常规 HTML 文档页面 的示例,以及完全相同的 URL 但带有 .md 扩展名的版本。
本提案不包括如何处理 llms.txt 文件的具体建议,因为这将取决于应用程序。例如,FastHTML 项目选择使用适合 Claude 等 LLM 使用的基于 XML 的结构,自动将 llms.txt 扩展为两个包含链接 URL 内容的 Markdown 文件。这两个文件是: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 超链接
[name](url),然后可选地是一个:和关于该文件的注释。
- 每个”文件列表”是一个 Markdown 列表,包含一个必填的 Markdown 超链接
以下是一个模拟示例:
# 标题
> 可选描述内容
可选详细信息内容
## 部分名称
- [链接标题](https://link_url): 可选链接详细信息
## Optional(可选)
- [链接标题](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 主要用于 推理,即在用户寻求帮助时,而不是用于 训练。但是,如果 llms.txt 的使用变得广泛,未来的训练运行可能也会利用 llms.txt 文件中的信息。
sitemap.xml 是网站上所有可索引的人类可读信息的列表。它不能替代 llms.txt,因为:
- 通常不会列出页面的 LLM 可读版本
- 不包含外部网站的 URL,即使它们可能有助于理解信息
- 通常会包含总体上太大而无法放入 LLM 上下文窗口的文档,并会包含许多理解网站不需要的信息。
示例
以下是 llms.txt 的示例,这是 FastHTML 项目使用的文件的简化版本(另请参见 完整版本):
# FastHTML
> FastHTML 是一个 Python 库,它将 Starlette、Uvicorn、HTMX 和 fastcore 的 `FT` "FastTags" 结合在一起,用于创建服务器渲染的超媒体应用程序。
重要说明:
- 尽管其 API 的某些部分受到 FastAPI 的启发,但它*不*与 FastAPI 语法兼容,也不针对创建 API 服务
- FastHTML 与原生 JavaScript 网页组件和任何 vanilla JS 库兼容,但与 React、Vue 或 Svelte 不兼容。
## 文档
- [FastHTML 快速入门](https://fastht.ml/docs/tutorials/quickstart_for_web_devs.html.md): FastHTML 许多功能的简要概述
- [HTMX 参考](https://github.com/bigskysoftware/htmx/blob/master/www/content/reference.md): 所有 HTMX 属性、CSS 类、标题、事件、扩展、JS 库方法和配置选项的简要描述
## 示例
- [待办事项列表应用程序](https://github.com/AnswerDotAI/fasthtml/blob/main/examples/adv_app.py): FastHTML 中完整 CRUD 应用程序的详细演练,展示了 FastHTML 和 HTMX 模式的惯用用法。
## Optional(可选)
- [Starlette 完整文档](https://gist.githubusercontent.com/jph00/809e4a4808d4510be0e3dc9565e9cbd3/raw/9b717589ca44cedc8aaf00b2b8cacef922964c0f/starlette-sml.md): Starlette 文档中对 FastHTML 开发有用的子集。
要创建有效的 llms.txt 文件,请考虑以下准则:
- 使用简洁明了的语言。
- 链接资源时,包含简要且信息丰富的描述。
- 避免使用模糊术语或未解释的行话。
- 运行一个工具,将您的
llms.txt文件扩展为 LLM 上下文文件,并测试多个语言模型,以查看它们是否能回答有关您内容的问题。
目录
以下是一些列出 Web 上可用 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 模块,为任何 Drupal 10.3+ 站点提供对 llms.txt 提案的完整支持
llms-txt-php- 用于编写和读取 llms.txt Markdown 文件的 PHP 库VS Code PagePilot 扩展- PagePilot 是一个 VS Code Chat 参与者,可自动加载外部上下文(文档、API、README 文件)以提供增强的响应。
下一步
llms.txt 规范对社区输入开放。GitHub 仓库 托管了 这个非正式概述,允许进行版本控制和公开讨论。社区 Discord 频道 可供分享实现经验和讨论最佳实践。