title | date | author | description | image |
---|---|---|---|---|
Arquivo /llms.txt |
2024-09-03 |
Jeremy Howard (tradução: Rodrigo Ribeiro Gomes) |
Uma proposta para padronizar o uso do arquivo `/llms.txt` que fornece informações para ajudar LLMs a usar um website na hora da inferência |
/sample.png |
Websites não apenas fornecem informações para pessoas, mas também são usados para prover informações para modelos de linguagem. Por exemplo, eles são usados muitas vezes para melhorar o ambiente de desenvolvimento dos programadores, com muitos sistemas incluindo uma opção para injetar informações sobre as bibliotecas e APIs a partir da documentação no site.
Fornecer informações para modelos de linguagem é um pouco diferente do que para humanos, embora existam algumas semelhanças. Modelos de linguagem geralmente gostam de ter a informação mais concisa. Isso seria mais próximo do que um humano expert gostaria de ler. Os modelos de linguagem podem consumir uma grande quantidade de informações rapidamente, assim, seria útil ter um lugar único onde todas as informações mais importantes pudessem ser organizadas—não para treinamento (que geralmente envolve fazer o scrapping de todas as páginas em um formato apropriado), mas para ajudar usuários que estão acessando o site via ferramentas auxiliares de IA.
Os context windows são muito pequenos para lidar com todo o conteúdo de um site, e converter páginas HTML com navegação complexa, ads, Javascript, etc. em um formato de texto amigável para LLM é difícil e impreciso. Portanto, seria muito útil se existisse um jeito de identificar as informações mais importantes e fornecê-las para essas ferramentas de IA, em um formato mais apropriado.
{.lightbox width=150px .floatr}
Nós propomos que esses interessados em prover conteúdo amigável para LLMs adicionem o arquivo /llms.txt
no seu site. Ele é um arquivo markdown que contém um breve resumo do contexto e orientações, junto com links para arquivos markdown (que podem ser em sites externos) com as informações mais detalhadas. Isso pode ser usado, por exemplo, para fornecer as informações necessárias para os programadores usarem uma biblioteca, ou como parte de uma pesquisa para aprender sobre uma pessoa ou organização, e por aí vai. Se quiser, fique à vontade para usar o logo do llms.txt
no seu site, indicando que você apoia essa proposta.
O markdown de llms.txt é para humanos e LLM, mas é também um formato preciso permitindo métodos de processamento (ex.: técnicas clássicas de programação como parsers e regex). Por exemplo, existe um projeto chamado llms-txt que contém uma linha de comando e um módulo Python para interpretar os arquivos llms.txt
e gerar contexto para o LLM a partir deles. Existe também uma implementação de exemplo em Javascript.
Além disso, nós propomos que páginas de sites que tenham informação que possam ser úteis para LLMs lerem, forneçam uma versão clara da mesma URL da página original, mas com um .md
no final. (as URLs sem nomes de arquivo teriam um 'index.html.md').
O projeto FastHTML segue essas duas propostas para a sua documentação. Por exemplo, aqui está a doc FastHTML llm.txt. E aqui está um exemplo de uma página de doc regular, junto com exatamente a mesma URL, mas com a extensão .md no final. Note que todos os projetos nbdev agora criam versões .md de todas as páginas por padrão, e todos os projetos Answer.AI e fast.ai que usam nbdev têm suas docs geradas com essa funcionalidade—por exemplo, veja essa versão em markdown do módulo docments do fastcore.
Essa proposta não inclui nenhuma recomendação particular de como processar o arquivo, uma vez que isso depende da aplicação. Por exemplo, o FastHTML automaticamente gera uma nova versão de dois arquivos markdown que incluem o conteúdo das URLs associadas, usando uma estrutura XML apropriada para o uso em LLMs como o Claude. Os dois arquivos são: llms-ctx.txt, que não inclui as URLs opcionais, e llms-ctx-full.txt, que contém tudo. Eles são criados usando a app de linha e comando llms_txt2ctx
, e a documentação do FastHTML inclui as informações de como os usuários podem usá-la.
Os arquivos llms.txt podem ser usados em vários cenários. Para bibliotecas de software, eles podem fornecer uma visão geral estruturada da documentação, ficando fácil para os LLMs localizarem funcionalidades específicas ou exemplos de uso. Em sites corporativos, eles mapeiam a estrutura organizacional e as principais fontes de informação. Informações sobre nova legislação e contexto histórico podem ser colocadas em um arquivo llms.txt
para ajudar todos os interessados a entenderem melhor.
Arquivos llms.txt podem ser adaptados para vários domínios. Sites de portfólio pessoal ou currículo poderiam usá-los para ajudar a responder perguntas sobre a pessoa. Em um e-commerce, eles poderiam mapear categorias de produtos e políticas. Instituições educacionais poderiam usar para um resumo sobre as ofertas de cursos e os recursos.
No momento, o formato mais amplo e fácil de entender é o Markdown. Apenas mostrar onde os principais arquivos markdown podem ser encontrados é um excelente começo. Fornecer uma estrutura básica já ajuda o modelo de linguagem a encontrar onde a informação que ele precisa pode estar.
O arquivo llms.txt
é incomum no sentido em que ele usa Markdown para estruturar a informação ao invés do clássico formato estruturado como um XML. A razão disso é que nós esperamos que muitos desses arquivos sejam lidos por modelos de linguagem e agentes. Dito isso, a informação em llms.txt
segue um formato específico e pode ser interpretada por ferramentas que são baseadas em programação.
A especificação de llms.txt
é para arquivos localizados no caminho raiz llms.txt
de um website (ou, opcionalmente, em um subcaminho). Um arquivo que segue a especificação contém as seguintes seções em markdown, nesta ordem especificada:
- Um H1 com o nome do projeto ou site. Esta é a única seção obrigatória.
- Um bloco de citação com um pequeno resumo do projeto, contendo as principais informações para o entendimento do resto do arquivo.
- Zero ou mais seções markdown (ex.: parágrafos, listas, etc.) de qualquer tipo, exceto cabeçalhos, contendo informações mais detalhadas do projeto e como interpretar os arquivos informados.
- Zero ou mais seções markdown delimitadas por cabeçalhos H2, contendo uma "lista de arquivos" de URLs onde mais detalhes estão disponíveis.
- Cada "lista de arquivo" é uma lista markdown, contendo um hyperlink obrigatório
[name](url)
, e opcionalmente um:
e notas sobre esse arquivo.
- Cada "lista de arquivo" é uma lista markdown, contendo um hyperlink obrigatório
Aqui está um exemplo:
# Título
> descrição opcional aqui
Detalhes opcionais vão aqui
## Nome da seção
- [Título do link](https://link_url): Detalhes opcionais
## Opcional
- [Título do link](https://link_url)
Note que a seção "Opcional" tem um significado especial—se ela é incluída, as URLs fornecidas podem ser ignoradas se contexto menor é necessário. Use-a para informações secundárias, que podem ser puladas.
llms.txt é projetado para coexistir com os padrões web atuais. Enquanto sitemaps listam todas as páginas para motores de busca, llms.txt
oferece uma visão geral exclusiva para LLMs. Eles podem complementar os robots.txt fornecendo contexto para o conteúdo permitido. O arquivo também pode referenciar dados rotulados do site, ajudando o LLM a entender como interpretar essas informações.
A abordagem de padronização de um caminho para o arquivo segue a mesma abordagem de /robots.txt
e /sitemap.xml
. robots.txt e llms.txt
têm propósitos diferentes—robots.txt é geralmente usado para indicar às ferramentas automatizadas quais acessos a um site são considerados aceitáveis, como bots de indexação de busca. Em outras palavras, a informação de llms.txt
será muitas vezes usada sob demanda, quando um usuário explicitamente solicitar informação sobre um tópico, como quando incluir a documentação de uma biblioteca em um projeto, ou quando perguntando a um chatbot com funcionalidade de pesquisa por informação. Nossa expectativa é que llms.txt
seja útil primordialmente para inferência, isto é, no momento em que o usuário está buscando assistência, ao invés de treinamento. Contudo, se o uso de llms.txt
se espalhar, treinamentos futuros podem se aproveitar dessa informação também.
sitemap.xml é uma lista de todas as informações para humanos disponíveis em um site. Isso é um substituto para llms.txt
uma vez que:
- Normalmente não terão uma versão das páginas listadas para LLM lerem.
- Não incluem URLs de parte de sites externos, mesmo que eles possam ser úteis para entender a informação.
- Geralmente irão abranger documentos que, na soma, são muito grandes para caber no contexto de um LLM, e irão incluir um monte de informação que não é necessária para entender o site.
Aqui está um exemplo de llms.txt
, neste caso, um trecho do arquivo usado para o projeto FastHTML (veja também a versão completa):
# 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.
Para criar um llms.txt
efetivo, considere essas orientações: Use linguagem clara e concisa. Quando linkar recursos, inclua descrições breves e informativas. Evite termos ambíguos ou jargões não explicados. Execute uma ferramenta que transforme seu llms.txt
em um arquivo para um contexto de LLM e teste vários modelos de linguagem para ver se eles podem responder perguntas sobre seu conteúdo.
A especificação llms.txt
é aberta para a comunidade. Um repositório GitHub hospeda essa visão geral, permitindo o controle de versão e discussão pública. Um canal do Discord está disponível para compartilhar experiências de implementação e discutir melhores práticas.