Markdown-версії сторінок і виявлення файлу
Про llms.txt говорять постійно, а про другу половину тієї самої пропозиції — майже ніколи.
Тим часом саме вона відповідає на питання «а як агент узагалі знайде цей файл» і «звідки він візьме чистий
текст сторінки». Без неї llms.txt лишається списком посилань на ті самі важкі HTML-сторінки.
Markdown-версії сторінок
Специфікація формулює другу пропозицію так:
«We furthermore propose that pages with information that agents might need provide a clean markdown version of those pages at the same URL as the original page, either with
.mdappended (page.html.md) or with the extension replaced by.md(page.md).»«Ми також пропонуємо, щоб сторінки з інформацією, яка може знадобитися агентам, надавали чисту Markdown-версію за тією ж адресою, що й оригінальна сторінка: або з доданим
.md(page.html.md), або із заміною розширення на.md(page.md).» llmstxt.org
Для адрес без імені файлу передбачено index.html.md або index.md.
| Оригінальна адреса | Варіант із доданим .md | Варіант із заміною |
|---|---|---|
/docs/api.html | /docs/api.html.md | /docs/api.md |
/docs/api/ | /docs/api/index.html.md | /docs/api/index.md |
/blog/post | /blog/post.md | /blog/post.md |
Виявлення: link relations
Головна претензія практиків до v1 звучала так: припустімо, агент відкрив сторінку. Як йому дізнатися, що поруч є Markdown-версія, і що десь вище лежить llms.txt, який її описує — не вгадуючи адреси? Відповідь v2 — стандартні відношення посилань.
| Відношення | На що вказує |
|---|---|
rel="alternate" type="text/markdown" |
Markdown-версія цієї самої сторінки |
rel="describedby" |
Файл llms.txt, який покриває цю сторінку |
Це можна оголосити двома способами. Перший — елементи <link> у HTML:
<link rel="alternate" type="text/markdown" href="/docs/page.html.md">
<link rel="describedby" href="/docs/llms.txt">
Другий — HTTP-заголовок Link:. Специфікація наводить його дослівно і пояснює перевагу:
заголовок працює й для не-HTML ресурсів (зокрема для самих Markdown-файлів) і додається в конфігурації
вебсервера чи CDN без правки сторінок.
Link: </docs/page.html.md>; rel="alternate"; type="text/markdown", </docs/llms.txt>; rel="describedby"Як віддати такий заголовок на звичайному PHP-хостингу
Через .htaccess, якщо доступний mod_headers:
<IfModule mod_headers.c>
<FilesMatch "\.html$">
Header set Link "</llms.txt>; rel=\"describedby\""
</FilesMatch>
</IfModule>Або безпосередньо з PHP, якщо сторінки генеруються скриптом:
<?php
$md = '/docs/page.md';
$llms = '/docs/llms.txt';
header('Link: <' . $md . '>; rel="alternate"; type="text/markdown", '
. '<' . $llms . '>; rel="describedby"');Content-Type і кодування
Специфікація не встановлює обовʼязкового MIME-типу для самого llms.txt, але практика однозначна:
файл має віддаватися як text/plain або text/markdown. Найпоширеніша реальна помилка —
сервер віддає text/html, і це майже завжди означає, що файлу насправді немає, а ви бачите шаблон
сторінки помилки з кодом 200.
Для Apache MIME-тип для .md додається одним рядком:
AddType text/markdown .md
AddDefaultCharset UTF-8Як агент має цим користуватися
Версія v2 прямо описує очікуваний сценарій, чого не було у v1:
«Agents are expected to view or search
llms.txtto find the information they need, then follow the relevant links. […] The file itself stays small enough to fit in context. The detail lives behind the links, and is fetched only when needed.»«Очікується, що агенти переглядають або шукають у
llms.txtпотрібну інформацію, а потім переходять за релевантними посиланнями. […] Сам файл лишається достатньо малим, щоб вміститися в контекст. Деталі живуть за посиланнями й завантажуються лише за потреби.» llmstxt.org
Звідси випливає головна вимога до змісту: посилання мають вести на матеріали, зручні для моделі. Список із двадцяти посилань на важкі HTML-сторінки формально валідний, але суперечить призначенню файлу.