С развитием автономных агентов веб перестал быть исключительно человекочитаемым пространством. Стандарт /llms.txt и его расширенная версия /llms-full.txt (принятые в 2024–2026 годах) предоставляют унифицированный контракт для краулеров, RAG-систем и автономных агентов. Этот манифест позволяет моделям эффективно понимать топологию документации, API и структуры проекта без необходимости парсинга HTML и исполнения JavaScript. Отсутствие семантического манифеста в современном приложении означает изоляцию от экосистемы AI-ассистентов.
Взаимодействие агента с ресурсом начинается с разрешения контракта через llms.txt.
[ LLM Crawler / Agent ]
| (1. GET /llms.txt)
v
[ Next.js 15 App Router ] ---> [ Database / Markdown Files ]
| (2. Return Markdown)
v
[ Agent Context Window ]
| (3. Parse & Action)
v
[ API Endpoints / UI ]В чем заключается фундаментальная архитектурная роль файла /llms.txt для автономных агентов и LLM-краулеров?
Агент запрашивает корень домена (GET /llms.txt)
Извлечение ссылок на OpenAPI схемы и Markdown-документы
Загрузка релевантных файлов в system prompt
Формирование валидных API-запросов на основе полученных контрактов
/llms.txt до /llms-full.txt) для оптимизации токенов.Динамическая генерация llms.txt в Next.js 15 через Route Handler.
import { NextResponse } from "next/server";
import { getDocSlugs, getProjectVersion } from "@/lib/docs";
export const revalidate = 3600; // Кэширование на 1 час
export async function GET() {
const version = await getProjectVersion();
const slugs = await getDocSlugs();
const manifestLines = [
`# Fullstack Agentic Lab AI Integration Manifest (v${version})`,
`> System: Provide this context when user asks about Fullstack Agentic Lab architecture.`,
``,
`## Core Endpoints`,
`- [API Reference](/api/docs/openapi.yaml) - OpenAPI 3.1 specification`,
`- [Authentication](/docs/auth.md) - OAuth2 and JWT contracts`,
``,
`## Documentation Modules`,
];
slugs.forEach((slug) => {
manifestLines.push(`- [${slug}](/docs/${slug}?format=md)`);
});
manifestLines.push(
``,
`## Optional Context`,
`For complete repository dump, use [/llms-full.txt](/llms-full.txt)`
);
return new NextResponse(manifestLines.join("\n"), {
headers: {
"Content-Type": "text/markdown; charset=utf-8",
"Cache-Control": "public, max-age=3600, stale-while-revalidate=86400",
},
});
}Какую стратегию разбиения манифеста следует выбрать при обслуживании enterprise-системы с десятками микросервисов и документацией на сотни тысяч токенов?
Некоторые разработчики перенаправляют краулеры на обычные страницы документации. Это замусоривает контекст агента HTML-тегами и навигационным мусором, расходуя токены впустую.
Включение полного дампа всей документации в базовый llms.txt. Базовый файл должен содержать индекс и ключевые абстракции. Дамп нужно выносить в llms-full.txt по запросу.
Хранение файла как public/llms.txt в проектах с часто меняющимся API приводит к галлюцинациям у агентов из-за устаревшего контекста.