llmstxt-architect
AI-генерация llms.txt с помощью LLM
llmstxt-architect — это Python-инструмент, который использует языковые модели (Claude, GPT, Ollama) для автоматической генерации качественных описаний в llms.txt.
Репозиторий: github.com/rlancemartin/llmstxt_architect
Преимущества
Заголовок раздела «Преимущества»В отличие от простого извлечения meta-описаний, llmstxt-architect:
- Анализирует контент — читает содержимое страниц
- Генерирует описания — использует LLM для создания осмысленных описаний
- Объясняет релевантность — описывает, когда и зачем читать страницу
Установка
Заголовок раздела «Установка»# Быстрый запуск через uvxcurl -LsSf https://astral.sh/uv/install.sh | shuvx --from llmstxt-architect llmstxt-architect --help
# Или установка через pippip install llmstxt-architectБазовое использование
Заголовок раздела «Базовое использование»С Anthropic Claude
Заголовок раздела «С Anthropic Claude»export ANTHROPIC_API_KEY=sk-ant-...
llmstxt-architect \ --urls https://docs.example.com \ --max-depth 2 \ --llm-name claude-3-5-sonnet-latest \ --llm-provider anthropic \ --project-dir outputС OpenAI
Заголовок раздела «С OpenAI»export OPENAI_API_KEY=sk-...
llmstxt-architect \ --urls https://docs.example.com \ --max-depth 2 \ --llm-name gpt-4o \ --llm-provider openai \ --project-dir outputС локальной моделью (Ollama)
Заголовок раздела «С локальной моделью (Ollama)»# Запустите Ollamaollama serve
llmstxt-architect \ --urls https://docs.example.com \ --max-depth 1 \ --llm-name llama3.2:latest \ --llm-provider ollama \ --project-dir outputПараметры
Заголовок раздела «Параметры»| Параметр | Описание | По умолчанию |
|---|---|---|
--urls | URL для обработки | Обязательно |
--max-depth | Глубина краулинга (1-5) | 5 |
--llm-name | Название модели | claude-3-sonnet |
--llm-provider | Провайдер (anthropic, openai, ollama) | anthropic |
--project-dir | Директория для результатов | llms_txt |
--output-file | Имя выходного файла | llms.txt |
--blacklist-file | Файл с URL для исключения | - |
--extractor | Метод извлечения (default, bs4) | default |
Обновление существующего llms.txt
Заголовок раздела «Обновление существующего llms.txt»Обновить только описания
Заголовок раздела «Обновить только описания»llmstxt-architect \ --existing-llms-file https://example.com/llms.txt \ --update-descriptions-only \ --llm-name claude-3-5-sonnet-latest \ --llm-provider anthropic \ --project-dir updatedСохраняет структуру и секции, обновляет только описания ссылок.
Из локального файла
Заголовок раздела «Из локального файла»llmstxt-architect \ --existing-llms-file ./llms.txt \ --update-descriptions-only \ --llm-provider ollama \ --llm-name llama3.2 \ --project-dir updatedИсключение URL
Заголовок раздела «Исключение URL»Создайте файл blacklist.txt:
# Deprecated pageshttps://example.com/old-api/https://example.com/v1/
# Not relevanthttps://example.com/jobs/https://example.com/legal/Запуск:
llmstxt-architect \ --urls https://example.com \ --blacklist-file blacklist.txt \ --project-dir outputPython API
Заголовок раздела «Python API»import asynciofrom llmstxt_architect.main import generate_llms_txt
async def main(): await generate_llms_txt( urls=["https://docs.example.com"], max_depth=2, llm_name="claude-3-5-sonnet-latest", llm_provider="anthropic", project_dir="output", )
asyncio.run(main())Кастомный экстрактор
Заголовок раздела «Кастомный экстрактор»from bs4 import BeautifulSoup
def custom_extractor(html: str) -> str: soup = BeautifulSoup(html, 'html.parser')
# Удалить навигацию и футер for tag in soup.find_all(['nav', 'footer', 'aside']): tag.decompose()
# Извлечь только main content main = soup.find('main') or soup.find('article') if main: return main.get_text(separator='\n', strip=True)
return soup.get_text(separator='\n', strip=True)
await generate_llms_txt( urls=["https://docs.example.com"], extractor=custom_extractor, # ...)Структура выходных файлов
Заголовок раздела «Структура выходных файлов»project-dir/├── llms.txt # Итоговый файл├── summaries/│ ├── summarized_urls.json # Чекпоинт прогресса│ ├── docs_example_com_page1.txt│ ├── docs_example_com_page2.txt│ └── ... # Индивидуальные саммариПромпт для генерации
Заголовок раздела «Промпт для генерации»По умолчанию LLM получает такой промпт:
Create a concise summary for this documentation page.The summary should explain:1. When should an LLM read this page?2. What key topics are covered?
Keep the summary to 1-2 sentences maximum.Кастомный промпт
Заголовок раздела «Кастомный промпт»llmstxt-architect \ --urls https://example.com \ --summary-prompt "Summarize this API documentation. Focus on endpoints and use cases." \ --project-dir outputЧекпоинты и продолжение
Заголовок раздела «Чекпоинты и продолжение»Инструмент сохраняет прогресс каждые 5 документов:
# Если процесс прервался, просто запустите сноваllmstxt-architect --urls https://example.com --project-dir output
# Обработанные URL будут пропущеныИнтеграция с MCP
Заголовок раздела «Интеграция с MCP»Используйте сгенерированный llms.txt с MCP-сервером:
{ "mcpServers": { "docs": { "command": "uvx", "args": [ "--from", "mcpdoc", "mcpdoc", "--urls", "Docs:./output/llms.txt", "--transport", "stdio" ] } }}Примеры результатов
Заголовок раздела «Примеры результатов»Проекты, использующие llmstxt-architect:
Сравнение с llmstxt CLI
Заголовок раздела «Сравнение с llmstxt CLI»| Аспект | llmstxt CLI | llmstxt-architect |
|---|---|---|
| Источник описаний | Meta-теги | AI-генерация |
| Качество описаний | Зависит от сайта | Высокое |
| Скорость | Быстро | Медленнее (API вызовы) |
| Стоимость | Бесплатно | Оплата API |
| Глубина анализа | Поверхностный | Анализ контента |