Kladu odpory

Kladu odpory

Share this post

Kladu odpory
Kladu odpory
Jak udělat web čitelný pro AI agenty
AI a média

Jak udělat web čitelný pro AI agenty

LLMS.txt, ReadMe.LLM a další věci, které se možná stanou brzy standardem...

Martin Maly's avatar
Martin Maly
Jun 18, 2025
∙ Paid

Share this post

Kladu odpory
Kladu odpory
Jak udělat web čitelný pro AI agenty
Share

Minule jsem psal o MCP, protokolu, který umožňuje AI agentům pracovat s vaším webem. Dnes popíšu další návrhy, které zatím ještě nejsou tak široce přijaté jako MCP, ale jsou takříkajíc “v naději”.

llms.txt

AI agenti, kteří hledají odpovědi (ano, třeba Perplexity) při prohledávání webu (“deep research”) čelí poměrně zásadní výzvě: najít smysluplný obsah v moderní HTML stránce přes všechny ty styly a nesémantické divy a skripty. HTML je děláno pro prohlížeč a člověka, ale strojové zpracování je utrpení. Sice jsou knihovny, jako Mozilla Readability, které se snaží v té záplavě divů a odstavců najít to, co je obsah stránky a odfiltrovat všechna menu a skryté položky a patičky a postranní sloupce a lišty, ale s všelijakým výsledkem.

Pro LLM to znamená, že když hledá informace pro uživatele v textu, co má 8000 znaků, tak musí lovit ve změti značek. Proto přišel návrh jménem llms.txt.

Jak bude LLM číst vaše noviny?!

Kdybych ho měl k něčemu přirovnat, tak k sitemaps. Zatímco sitemap používá XML strukturu k tomu, aby vyhledávacímu robotu řekl, kde jsou jednotlivé podsekce a podstránky, tak llms.txt slouží k tomu, aby jazykovému modelu (LLM) řekl, co kde najde a co tam je.

Technicky jde o textový soubor, kde je ve formátu Markdown popsáno, co na vašem webu najde. Je umístěný buď v kořenovém adresáři (https://example.com/llms.txt) nebo ve /.well-known/llms.txt.

Struktura souboru obsahuje definované sekce v definovaném pořadí:

  1. H1 s názvem projektu nebo stránky (jediná povinná sekce)

  2. Blockquote s krátkým shrnutím projektu, obsahující klíčové informace nezbytné pro pochopení zbytku souboru

  3. Žádná, jedna, nebo více markdown sekcí (např. odstavce, seznamy atd.) jakéhokoli typu kromě nadpisů, obsahující podrobnější informace o projektu a instrukce, jak interpretovat poskytnuté soubory

  4. Žádná, jedna nebo více markdown sekcí ohraničených nadpisy H2, obsahující "seznamy souborů" (URL, kde jsou k dispozici další podrobnosti)

  5. Žádná nebo jedna sekce “Optional” se speciálním významem - pokud je uvedena, může ji LLM přeskočit, když potřebuje rychlý přehled.

  6. Každý "seznam souborů" je markdown seznam obsahující povinný markdown hyperlink [název](url), pak volitelně : a poznámky o souboru

Obecně tedy nějak takto:

# Název

> Volitelný popis zde

Volitelné detaily zde

## Název sekce

- [Název odkazu](https://odkaz_url): Volitelné detaily odkazu

## Optional

- [Název odkazu](https://odkaz_url)

Příklad pro fiktivní restauraci:

# Restaurace U Modré Kočky

> Rodinný podnik zaměřený na moderní českou kuchyni s důrazem na lokální suroviny.

- Otevřeno denně 11 :00 – 23 :00
- Kapacita 60 míst
- Wi-Fi zdarma
- Zahrádka v klidném dvoře

## Menu

- [Stálý jídelní lístek](https://example.com/menu.pdf): Aktuální nabídka sezónních specialit
- [Polední menu](https://example.com/obed.pdf): Všední dny 11 :00 – 15 :00, dvě polévky a tři hlavní chody
- [Nápojový lístek](https://example.com/napoje.pdf): Řemeslná piva z minipivovarů, moravská vína

## Rezervace

- [Online rezervace](https://example.com/rezervace): Okamžité potvrzení e-mailem
- [Telefon](tel:+420123456789): Denně 10 :00 – 22 :00

## Sociální sítě

- [Instagram](https://instagram.com/umodrekocky): Fotky jídel a zákulisí kuchyně
- [Facebook](https://facebook.com/umodrekocky): Novinky a události
- [TikTok](https://tiktok.com/@umodrekocky): Krátká videa z přípravy pokrmů

## Optional

- [Recenze Google](https://g.page/r/CZ-Umodrekocky/review)
- [Dárkové poukazy](https://example.com/poukazy)

Příklady reálných llms.txt souborů najdete na llmstxt.site, seznam produktů a společností, které se k llms.txt hlásí, najdete v llms.txt directory nebo v llmstxt hubu. Můžete se pro inspiraci podívat třeba na llms.txt od Anthropic

Součástí návrhu je i návrh dělat k HTML souborům (např. “/jak-na-llm.html”) jejich MD variantu, optimalizovanou pro LLM, a používat pro ně stejný název s příponou .md (“jak-na-llm.html.md”) - např. u dokumentace FastHTML máte soubor “pro lidi” (https://www.fastht.ml/docs/tutorials/by_example.html) a “pro LLM” (https://www.fastht.ml/docs/tutorials/by_example.html.md)

Návrh počítá i se souborem llms-full.txt, kde crawler najde kompletní dokumentaci (jako například zde pro Anthropic API) - čímž se dostáváme už k dalšímu návrhu.

ReadMe.LLM

Když píšete kód a používáte Copilot nebo Cursor nebo další LLM pro psaní kódu, možná si říkáte: Jak se dozví správné používání té které knihovny?

https://x.com/karpathy/status/1899876370492383450

A speciálně pro tento účel je navržený ReadMe.LLM.

Tento návrh byl vyvinutý na UC Berkeley a představuje dokumentaci, určenou pro LLM: strukturovaný formát využívající prvky ze softwarové knihovny k usnadnění generování kódu.

Jako soubor ReadMe.md poskytuje základní informace lidským vývojářům, tak ReadMe.LLM poskytuje tyto informace LLM. Poskytnutí dokumentace v tomto formátu by mělo pomoci LLM nástrojům pro psaní kódu pochopit, jak se s vaší knihovnou pracuje.

Základní myšlenkou je, že dokumentace by měl být jeden LLM soubor, který se vejde do kontextu LLM. Současná dokumentace je často členěná na jednotlivé soubory, s obrázky a kde čím, a je orientovaná na lidského čtenáře. Jenže doba…

(zde si dáme pauzu na nářky nad tím, jak je doba hrozná a poctivou ruční kodéřinu vytlačují matlači kódu s LLM… - už to máte? - tak ještě chvilku… jojo, hrůza…)

… je už taková, že dokumentaci bude pravděpodobně číst spíš LLM než živý člověk.

Ostatně, ten paper z Berkeley to popisuje názorně:

Jak pracuje ReadMe.LLM Zdroj: https://ar5iv.labs.arxiv.org/html/2504.09798v3

Autoři neříkají striktně jaký má být formát nebo co má obsahovat. Omezují se na doporučení rozdělit toto readme do sekcí rules, library_description a context a formátují ho jako XML. Zamýšlený způsob použití je ten, že vezmete readme.llm z GitHubu knihovny, kterou chcete použít, zkopírujete ho do LLM a požádáte, ať vypracuje kód. LLM je víceméně jedno, jestli bude zpracovávat XML nebo MD, ale u XML snáz identifikuje sekce. A jak říkám: jde o návrh, nikoli o standard.

<readme-llm version="0.1">
  <rules>
    1. Nevolej funkce, které zde nejsou uvedené.  
    2. Vracej vždy validní JSON.
  </rules>

  <library_description>
    PhotonJS je knihovna pro fotonické výpočty na čipech kompatibilních s WebGPU.
  </library_description>

  <context>
    <signature>
      Device.open() -> Promise&lt;Device&gt;
    </signature>
    <example>
<![CDATA[
import { Device } from 'photonjs';
const dev = await Device.open();
]]>
    </example>
  </context>
</readme-llm>

Autoři udělali spoustu testů, jak takový strojově zpracovatelný ReadMe.LLM zvýší kvalitu vygenerovaného kódu (tl;dr - hodně moc!) Vám jako vývojářům to ze začátku možná práci přidělá, ale už jsou k dispozici nástroje pro generování tohoto readme formátu. Ano, musíte ho udržovat aktualizovaný pro každou verzi (ale to děláte i s readme, že? Že?!)

Google-Extended

Tahle pasáž potěší ty, co se bojí, že se AI bude na jejich unikátním obsahu trénovat. Google v dubnu aktualizoval popis svého Extended crawleru a v ní zveřejnil následující implementaci pro robots.txt:

User-agent: Google-Extended
Disallow: /

User-agent: Googlebot
Disallow:

Výše uvedená pravidla říkají, že Googlebot na váš web může, ale Gemini se na něm trénovat nesmí. Je důležité poznamenat, že Google-Extended neblokuje použití obsahu v AI Overviews, které jsou považovány za součást hlavního vyhledávacího prostředí Google. Pro blokování AI Overviews je nutné použít meta tag "nosnippet", který však také blokuje obsah z běžného vyhledávání. (Viz Should you block Google Extended?)

Existuje i návrh, který má za cíl přidat informace o licenci či povolení / zákaz automatického zpracování obsahu do robots.txt i do HTTP hlaviček (X-License-Info, X-Legal-Notice apod.)

Asi je důležité, abych explicitně poznamenal, že vše, co jsem zde popsal, jsou návrhy. Zejména ty poslední dva. Jestli se tím budou LLM scrapery řídit nebo ne je ve hvězdách a vynutitelné to není.

Praxe

V praktické doušce popíšu to, co je mi nejbližší, tj. média, a přístup, jakým v nich hodlám implementovat právě llms.txt.

Keep reading with a 7-day free trial

Subscribe to Kladu odpory to keep reading this post and get 7 days of free access to the full post archives.

Already a paid subscriber? Sign in
© 2025 Martin Maly
Privacy ∙ Terms ∙ Collection notice
Start writingGet the app
Substack is the home for great culture

Share