LLMs.txt解读:网络新的LLM-Ready内容标准

LLMs.txt解读:网络新的LLM-Ready内容标准

六个月前,LLMs.txt 作为一种开创性的文件格式问世,旨在使大型语言模型 (LLM) 可以访问网站文档。自发布以来,该标准在开发人员和内容创建者中的影响力稳步上升。如今,随着围绕模型上下文协议(MCP)的讨论愈演愈烈,LLMs.txt 作为一种久经考验、人工智能优先的文档解决方案,在人类可读内容和机器友好型数据之间架起了一座桥梁,成为人们关注的焦点。在本文中,我们将探索 LLMs.txt 的发展历程,研究其结构和优势,深入探讨技术集成(包括 Python 模块和 CLI),并将其与新兴的 MCP 标准进行比较。

LLMs.txt的兴起

背景和语境

六个月前发布的 LLMs.txt 是为了应对一个关键挑战而开发的:robots.txt 和 sitemap.xml 等传统网络文件是为搜索引擎爬虫设计的,而不是为需要简洁、经过编辑的内容的人工智能模型设计的。LLMs.txt 提供了网站文档的精简概览,使 LLMs 能够快速了解基本信息,而不会被无关的细节所困扰。

要点:

  • 目的:将网站内容提炼为适合人工智能推理的格式。
  • 采用: 在其短暂的生命周期内,Mintlify、Anthropic 和 Cursor 等主要平台已经集成了 LLMs.txt,凸显了其有效性。
  • 当前趋势: 随着最近围绕 MCP(模型上下文协议)的讨论激增,社区正在积极比较这两种增强 LLM 能力的方法。

Twitter上的社区热议

Twitter 上的对话反映了 LLMs.txt 的快速应用和对其潜力的兴奋之情,同时有关 MCP 的讨论也在不断增加:

  • Jeremy Howard (@jeremyphoward):对这一势头表示庆祝,他说:”最近几周,我提出的 llms.txt 标准确实获得了巨大的发展势头。他感谢社区–尤其是 @StripeDev 的支持,Stripe 现已在其文档网站上托管 LLMs.txt。
  • Stripe Developers(@StripeDev):宣布他们已将 LLMs.txt 和 Markdown 添加到他们的文档(docs.stripe.com/llms.txt)中,使开发人员能够轻松地将 Stripe 的知识集成到任何 LLM 中。

将 Stripe 的知识集成到任何 LLM 中

  • Developer Insights@TheSeaMouse、@xpression_app 和 @gpjt 等开发者的推文不仅称赞了 LLMs.txt,还引发了将其与 MCP 进行比较的讨论。一些用户指出,LLMs.txt 增强了内容摄取功能,而 MCP 则有望使 LLMs 更具可操作性。

什么是LLMs.txt文件?

LLMs.txt 是一种 Markdown 文件,采用结构化格式,专门设计用于使 LLM 可以访问网站文档。主要有两个版本:

/llms.txt

  • 目的:提供网站文档的高层次策划概述。它可以帮助法律硕士快速掌握网站的结构并找到关键资源。
  • 结构:
    • 包含项目或网站名称的 H1。这是唯一必需的部分
    • 包含项目简短摘要的段落引语,其中包含理解文件其余部分所需的关键信息
    • 零个或多个除标题外的任何类型的标记符(如段落、列表等),包含有关项目的更多详细信息以及如何解释所提供的文件
    • 零个或多个由 H2 标题分隔的标记符部分,包含可获得更多详细信息的 URL “文件列表
      • 每个 “文件列表 ”都是一个标记符列表,包含一个必需的标记符超链接[名称](url),然后可选择一个:和关于文件的注释。

/llms-full.txt

  • 目的:在一个地方包含完整的文档内容,在需要时提供详细的上下文。
  • 用法:特别适用于技术 API 参考资料、深入指南和综合文档。

结构示例代码段:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Project Name
> Brief project summary
## Core Documentation
- [Quick Start](url): A concise introduction
- [API Reference](url): Detailed API documentation
## Optional
- [Additional Resources](url): Supplementary information
# Project Name > Brief project summary ## Core Documentation - [Quick Start](url): A concise introduction - [API Reference](url): Detailed API documentation ## Optional - [Additional Resources](url): Supplementary information
# Project Name
> Brief project summary
## Core Documentation
- [Quick Start](url): A concise introduction
- [API Reference](url): Detailed API documentation
## Optional
- [Additional Resources](url): Supplementary information

LLMs.txt的主要优势

与传统网络标准相比,LLMs.txt 有几个明显的优势:

  • 针对 LLM 处理进行了优化:它去除了导航菜单、JavaScript 和 CSS 等非必要元素,只关注 LLM 所需的关键内容。
  • 高效的上下文管理:鉴于 LLM 在有限的上下文窗口中运行,LLMs.txt 的简洁格式可确保只使用最相关的信息。
  • 双重可读性:Markdown 格式使 LLMs.txt 既对人友好,又易于被自动工具解析。
  • 对现有标准的补充:与sitemap.xml或robots.txt不同,LLMs.txt提供了一种经过整理的、以人工智能为中心的文档视图。

如何在人工智能系统中使用LLMs.txt?

要充分利用 LLMs.txt 的优势,必须手动将其内容输入人工智能系统。以下是不同平台如何集成 LLMs.txt:

ChatGPT

  • 方法:用户将 /llms-full.txt 文件的 URL 或完整内容复制到 ChatGPT 中,丰富上下文以获得更准确的回复。
  • 优点:此方法可让 ChatGPT 在需要时参考详细文档。

ChatGPT集成LLMs.txt

Source – Link

Claude

  • 方法:由于 Claude 目前缺乏直接浏览功能,用户可以粘贴内容或上传文件,确保提供全面的上下文。
  • 优点:这种方法使 Claude 的响应建立在可靠的最新文档基础之上。

Claude集成LLMs.txt

Source – Link

Cursor

  • 方法:Cursor 的 @Docs 功能允许用户添加 LLMs.txt 链接,无缝集成外部内容。
  • 优点:增强 Cursor 的上下文意识,使其成为开发人员的强大工具。

Cursor集成LLMS.txt

Source – Link

生成LLMs.txt文件的工具

有几种工具可以简化 LLMs.txt 文件的创建,减少人工操作:

  • Mintlify:为托管文档自动生成 /llms.txt 和 /llms-full.txt 文件,确保一致性。

也可参考:https://mintlify.com/docs/quickstart

  • dotenv 的 llmstxt:将网站的 sitemap.xml 转换为符合要求的 LLMs.txt 文件,与现有工作流程无缝整合。
  • Firecrawl 的 llmstxt:利用网络抓取技术将网站内容编译成 LLMs.txt 文件,最大限度地减少人工干预。

实际应用和多功能性

LLMs.txt 文件的多功能性从 FastHTML 等现实世界的项目中可见一斑,这些项目遵循了这两项关于人工智能友好型文档的建议:

  • FastHTML文档:FastHTML项目不仅使用LLMs.txt文件提供其文档的精选概览,还提供了一个普通的HTML文档页面,其URL与.md扩展名相同。这种双重方法确保人类读者和 LLM 都能以最合适的格式访问内容。
  • 自动扩展:FastHTML 项目选择使用基于 XML 的结构将其 LLMs.txt 文件自动扩展为两个标记符文件。这两个文件是
    • llms-ctx.txt: 包含上下文,但不包含可选的 URL。
    • llms-ctx-full.txt: 包含可选 URL,以提供更全面的上下文。
  • 这些文件通过 llms_txt2ctx 命令行应用程序生成,FastHTML 文档提供了详细的使用指南。
  • 在各种应用中的通用性:除了技术文档,LLMs.txt 文件在各种情况下都很有用–从帮助开发人员浏览软件文档,到帮助企业概述其结构、为利益相关者分解复杂的立法,甚至提供个人网站内容(如简历)。同样,使用 nbdev 的 Answer.AI 和 fast.ai 项目也使用此功能重新生成文档–fastcore 的文档模块的 markdown 版本就是例证。

LLMs.txt的Python模块和 CLI

对于希望将 LLMs.txt 集成到其工作流程中的开发人员,我们提供了专门的 Python 模块和 CLI,用于解析 LLMs.txt 文件并创建适合 Claude 等系统的 XML 上下文文档。该工具不仅可以轻松地将文档转换为 XML,还提供了命令行界面和 Python API。

安装

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install llms-txt
pip install llms-txt
pip install llms-txt

如何使用?

CLI

安装后, llms_txt2ctx 可在终端中使用。

要获取 CLI 的帮助,请:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
llms_txt2ctx -h
llms_txt2ctx -h
llms_txt2ctx -h

将 llms.txt 文件转换为 XML 上下文并保存为 llms.md:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
llms_txt2ctx llms.txt > llms.md
llms_txt2ctx llms.txt > llms.md
llms_txt2ctx llms.txt > llms.md

通过 -optional True 添加输入文件的“可选”部分。

Python模块

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from llms_txt import *
samp = Path('llms-sample.txt').read_text()
from llms_txt import * samp = Path('llms-sample.txt').read_text()
from llms_txt import *
samp = Path('llms-sample.txt').read_text()

使用 parse_llms_file 创建一个包含 llms.txt 文件各部分的数据结构(如果需要,也可以添加 optional=True):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
parsed = parse_llms_file(samp)
list(parsed)
['title', 'summary', 'info', 'sections']
parsed.title,parsed.summary
parsed = parse_llms_file(samp) list(parsed) ['title', 'summary', 'info', 'sections'] parsed.title,parsed.summary
parsed = parse_llms_file(samp)
list(parsed)
['title', 'summary', 'info', 'sections']
parsed.title,parsed.summary

实现与测试

为了说明解析 llms.txt 文件有多简单,下面是一个完整的解析器,只用了不到 20 行代码,没有任何依赖关系:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from pathlib import Path
import re,itertools
def chunked(it, chunk_sz):
it = iter(it)
return iter(lambda: list(itertools.islice(it, chunk_sz)), [])
def parse_llms_txt(txt):
"Parse llms.txt file contents in `txt` to a `dict`"
def _p(links):
link_pat = '-\s*\[(?P<title>[^\]]+)\]\((?P<url>[^\)]+)\)(?::\s*(?P<desc>.*))?'
return [re.search(link_pat, l).groupdict()
for l in re.split(r'\n+', links.strip()) if l.strip()]
start,*rest = re.split(fr'^##\s*(.*?$)', txt, flags=re.MULTILINE)
sects = {k: _p(v) for k,v in dict(chunked(rest, 2)).items()}
pat = '^#\s*(?P<title>.+?$)\n+(?:^>\s*(?P<summary>.+?$)$)?\n+(?P<info>.*)'
d = re.search(pat, start.strip(), (re.MULTILINE|re.DOTALL)).groupdict()
d['sections'] = sects
return d
from pathlib import Path import re,itertools def chunked(it, chunk_sz): it = iter(it) return iter(lambda: list(itertools.islice(it, chunk_sz)), []) def parse_llms_txt(txt): "Parse llms.txt file contents in `txt` to a `dict`" def _p(links): link_pat = '-\s*\[(?P<title>[^\]]+)\]\((?P<url>[^\)]+)\)(?::\s*(?P<desc>.*))?' return [re.search(link_pat, l).groupdict() for l in re.split(r'\n+', links.strip()) if l.strip()] start,*rest = re.split(fr'^##\s*(.*?$)', txt, flags=re.MULTILINE) sects = {k: _p(v) for k,v in dict(chunked(rest, 2)).items()} pat = '^#\s*(?P<title>.+?$)\n+(?:^>\s*(?P<summary>.+?$)$)?\n+(?P<info>.*)' d = re.search(pat, start.strip(), (re.MULTILINE|re.DOTALL)).groupdict() d['sections'] = sects return d
from pathlib import Path
import re,itertools
def chunked(it, chunk_sz):
    it = iter(it)
    return iter(lambda: list(itertools.islice(it, chunk_sz)), [])
def parse_llms_txt(txt):
    "Parse llms.txt file contents in `txt` to a `dict`"
    def _p(links):
        link_pat = '-\s*\[(?P<title>[^\]]+)\]\((?P<url>[^\)]+)\)(?::\s*(?P<desc>.*))?'
        return [re.search(link_pat, l).groupdict()
                for l in re.split(r'\n+', links.strip()) if l.strip()]
    start,*rest = re.split(fr'^##\s*(.*?$)', txt, flags=re.MULTILINE)
    sects = {k: _p(v) for k,v in dict(chunked(rest, 2)).items()}
    pat = '^#\s*(?P<title>.+?$)\n+(?:^>\s*(?P<summary>.+?$)$)?\n+(?P<info>.*)'
    d = re.search(pat, start.strip(), (re.MULTILINE|re.DOTALL)).groupdict()
    d['sections'] = sects
    return d

我们在 tests/test-parse.py 中提供了一个测试套件,并确认该实现通过了所有测试。

Python 源代码概述

llms_txt Python 模块提供了创建和使用 llms.txt 文件所需的源代码和助手。下面是其功能的简要概述:

  • 文件规范:该模块遵循 llms.txt 规范:一个 H1 标题、一个小标题摘要、可选内容部分和包含文件列表的 H2 分隔部分。
  • 解析助手:例如,parse_link(txt) 可从标记符链接中提取标题、URL 和可选描述。
  • XML 转换:create_ctx 和 mk_ctx 等函数可将解析后的数据转换为 XML 上下文文件,这对 Claude 等系统尤其有用。
  • 命令行界面:CLI 命令 llms_txt2ctx 使用这些助手处理 llms.txt 文件并输出 XML 上下文文件。该工具简化了将 llms.txt 整合到各种工作流程中的过程。
  • 简洁的实现:该模块甚至包括一个不到 20 行代码的解析器,利用 regex 和 chunked 等辅助函数进行高效处理。

更多详情,请参阅此链接 – https://llmstxt.org/core.html

比较LLMs.txt和MCP(模型上下文协议)

虽然 LLMs.txt 和新兴的 Model Context Protocol (MCP) 都旨在增强 LLM 功能,但它们应对的是人工智能生态系统中的不同挑战。下面是深入探讨两种方法的增强比较:

LLMs.txt

  • 目标:通过将网站文档提炼为结构化的 Markdown 格式,专注于为 LLM 提供简洁、精心策划的内容。
  • 实现:由网站所有者维护的静态文件,是技术文档、API 参考资料和综合指南的理想选择。
  • 优点:
    • 简化内容摄取。
    • 易于实施和更新。
    • 通过过滤掉不必要的元素来提高提示质量。

MCP(模型上下文协议)

什么是MCP?

MCP 是一种开放标准,可在数据和人工智能工具之间建立安全的双向连接。可以把它想象成人工智能应用的 USB-C 端口–一个让不同工具和数据源相互“对话”的通用连接器。

MCP为何重要?

随着人工智能助手成为我们日常工作流程中不可或缺的一部分(如 Replit、GitHub Copilot 或 Cursor IDE),确保它们能够访问所需的所有上下文至关重要。如今,集成新的数据源往往需要定制代码,既杂乱又耗时。MCP 通过以下方式简化了这一过程:

  • 提供预建集成:不断增加的即用连接器库。
  • 提供灵活性:实现不同人工智能提供商之间的无缝切换。
  • 增强安全性:确保您的数据在基础设施内的安全。

MCP(模型上下文协议)

Source – Link

MCP如何工作?

MCP 采用客户服务器架构:

  • MCP 主机:希望访问数据的程序(如 Claude Desktop 或流行的集成开发环境)。
  • MCP 客户端:与 MCP 服务器保持 1:1 连接的组件。
  • MCP 服务器:公开特定数据源或工具的轻量级适配器。
  • 连接生命周期:
    1. 初始化:交换协议版本和功能。
    2. 信息交换:支持请求-响应模式和通知。
    3. 终止:彻底关闭、断开连接或处理错误。

现实世界的影响和早期采用

想象一下,如果您的人工智能工具可以无缝访问本地文件、数据库或远程服务,而无需为每个连接编写自定义代码。MCP 承诺正是如此–简化人工智能工具与各种数据源的集成方式。早期采用者已经在各种环境中尝试使用 MCP,从而简化了工作流程,减少了开发开销。

共同动机和关键差异

共同目标:LLMs.txt 和 MCP 的目标都是增强 LLMs 的能力,但它们是以互补的方式实现这一目标的。LLMs.txt 通过提供经过整理的精简网站文档视图来改进内容摄取,而 MCP 则通过使 LLM 能够执行现实世界中的任务来扩展他们的功能。从本质上讲,LLMs.txt 帮助法律硕士更好地 “阅读”,而 MCP 则帮助他们有效地 “行动”。

解决方案的性质

  • LLMs.txt:
    • 静态、经过编辑的内容标准: LLMs.txt 设计为静态文件,严格遵守基于 Markdown 的结构。它包括一个 H1 标题、一个块状引文摘要和以 H2 分隔的部分,其中包含经过编辑的链接列表。
    • 技术优势:
      • 令牌效率:通过过滤掉非必要的细节(如导航菜单、JavaScript 和 CSS),LLMs.txt 将复杂的网页内容压缩成简洁的格式,适合 LLMs 的有限上下文窗口。
      • 简单:它的格式易于使用标准文本处理工具(如 regex 和 Markdown 解析器)生成和解析,因此可供广大开发人员使用。
    • 增强能力:
      • 提高提供给 LLM 的上下文的质量,从而实现更准确的推理和更好的响应生成。
      • 由于其结构是可预测和机器可读的,因此便于测试和迭代改进。
  • MCP(模型上下文协议):
    • 动态、行动启用协议:MCP 是一个强大的开放标准,可在 LLM 与外部数据源或服务之间创建安全的双向通信。
    • 技术优势:
      • 标准化 API 接口:MCP 就像一个通用连接器(类似于 USB-C 端口),允许 LLM 与各种数据源(本地文件、数据库、远程 API 等)无缝对接,无需为每次集成定制代码。
      • 实时交互:通过客户端-服务器架构,MCP 支持动态请求-响应周期和通知,使 LLM 能够获取实时数据并执行任务(如发送电子邮件、更新电子表格或触发工作流)。
      • 复杂性处理:MCP 必须应对身份验证、错误处理和异步通信等挑战,因此工程密集度更高,但在扩展 LLM 功能方面也更加灵活。
    • 增强能力:
      • 将 LLM 从被动的文本生成器转变为主动的任务执行助手。
      • 便于将 LLM 无缝集成到业务流程和开发工作流程中,通过自动化提高生产力。

易于实施

  • LLMs.txt:
    • 实施起来相对简单。它的创建和解析依赖于轻量级文本处理技术,只需最小的工程开销。
    • 可手动或通过简单的自动化工具进行维护。
  • MCP:
    • 需要强大的工程设计。实施 MCP 需要设计安全的应用程序接口、管理客户-服务器架构,并不断维护与不断发展的外部服务标准的兼容性。
    • 涉及开发预置连接器和处理复杂的实时数据交换。

共同作用:这些创新是增强 LLM 能力的互补战略。LLMs.txt 可确保 LLM 拥有高质量、浓缩的基本内容快照,从而大大提高理解能力和响应质量。与此同时,MCP 允许 LLM 在静态内容和动态操作之间架起桥梁,从而提升 LLM 的能力,最终将 LLM 从单纯的内容分析仪转变为可执行任务的交互式系统。

结论

六个月前发布的 LLMs.txt 已经在人工智能文档领域占据了重要的一席之地。LLMs.txt 为 LLMs 提供了一种经过精心策划的精简方法来摄取和理解复杂的网站文档,从而大大提高了人工智能响应的准确性和可靠性。它的简单性和令牌效率使其成为开发人员和内容创建者的宝贵工具。

与此同时,模型上下文协议(MCP)的出现标志着 LLM 功能的进一步发展。MCP 的动态标准化方法使 LLM 能够无缝访问外部数据源和服务并与之交互,将它们从被动的阅读器转变为主动的任务执行助手。LLMs.txt 和 MCP 共同体现了强大的协同效应:LLMs.txt 确保人工智能模型获得最佳上下文,而 MCP 则为它们提供了根据上下文采取行动的手段。

展望未来,人工智能驱动的文档和自动化的前景似乎越来越光明。随着最佳实践和工具的不断发展,开发人员可以期待集成度更高、更安全、更高效的系统,这些系统不仅能增强 LLM 的能力,还能重新定义我们与数字内容的交互方式。无论您是致力于创新的开发人员,还是旨在优化工作流程的企业主,抑或是渴望探索技术前沿的人工智能爱好者,现在都是深入研究这些标准并释放人工智能文档全部潜力的时候了。

评论留言