🤖 Плагин генератора llms.txt для Discourse

Генератор llms.txt для Discourse

:information_source: Краткое описание Автоматически генерирует файлы llms.txt, делая контент вашего форума доступным для больших языковых моделей, таких как ChatGPT, Claude и других ИИ-систем
:hammer_and_wrench: Ссылка на репозиторий GitHub - kaktaknet/discourse-llms-txt-generator: 🤖 Discourse llms.txt Generator Plugin. Automatically generates llms.txt and llms-full.txt files for your Discourse forum to optimize content discovery by Large Language Models (LLMs) and AI systems. · GitHub
:open_book: Руководство по установке Как установить плагины в Discourse

Возможности

Этот плагин реализует стандарт llms.txt — предлагаемую конвенцию для предоставления веб-сайтами контента, удобного для работы с большими языковыми моделями (LLM). Представьте это как «robots.txt для ИИ», который помогает контенту вашего форума появляться в ответах, сгенерированных искусственным интеллектом.

Для подробной документации по функциям см. README.md

Для технической документации и разработки см. CONTRIBUTING.md

Хотя это видео не посвящено конкретно Discourse или его плагинам, оно отлично объясняет важность файлов llms.txt для вашего форума.

Тысячи сайтов, включая многие из крупнейших и наиболее авторитетных технологических компаний мира, уже внедрили стандарт llms.txt на своих доменах. Примеры включают:

  • :white_check_mark: Amazon AWS — https://docs.aws.amazon.com/llms.txt
  • :white_check_mark: Cloudflare — https://developers.cloudflare.com/llms.txt
  • :white_check_mark: Stripe — https://stripe.com/llms.txt
  • :white_check_mark: Angular — https://angular.dev/llms.txt
  • :white_check_mark: Redis — https://redis.io/llms.txt
  • :white_check_mark: Docker — https://docs.docker.com/llms.txt
  • :white_check_mark: Model Context Protocol — https://modelcontextprotocol.io/llms-full.txt

Когда отраслевые гиганты внедряют стандарт в масштабах всей компании задолго до его официального утверждения — это явный сигнал того, что llms.txt решает реальную и срочную проблему. Такие компании никогда не запускают общесайтовые инициативы легкомысленно; у них всегда есть веская стратегическая причина. Быстрое и масштабное принятие llms.txt в технологической отрасли показывает, насколько важным стал структурированный контент для ИИ, и что сама отрасль движет этим процессом вперед — даже быстрее, чем формальные органы по стандартизации.

Ключевые возможности:

  1. Файл основной навигации (/llms.txt)

    • Структурированный обзор вашего форума с категориями, подкатегориями и последними темами
    • Помогает ИИ-системам мгновенно понять структуру вашего форума
    • Автоматически обновляется по мере роста форума
  2. Полный индекс контента (/llms-full.txt)

    • Полный индекс форума со всеми темами, сгруппированными по категориям и готовыми для обработки ИИ
    • Настраиваемая фильтрация по количеству просмотров и тем
    • Опциональные выдержки из постов для более быстрой индексации ИИ
  3. Динамические файлы для каждого ресурса

    • Генерация llms.txt для любой категории: /c/category-name/123/llms.txt
    • Генерация llms.txt для любой темы: /t/topic-slug/456/llms.txt
    • Генерация llms.txt для любого тега: /tag/tutorial/llms.txt
    • Создаются по требованию без физического хранения
  4. Индекс карты сайта (/sitemaps.txt)

    • Полный список всех URL-адресов llms.txt для эффективного обнаружения ИИ-краулерами
    • Автоматическая интеграция с robots.txt и sitemap.xml
  5. Защита SEO

    • Канонические URL-адреса в заголовках HTTP (соответствие RFC 6596)
    • Предотвращение штрафов за дублирующийся контент от поисковых систем
    • Правильное указание авторства оригинальных URL-адресов форума
  6. Умное кэширование

    • Ежечасные фоновые проверки нового контента
    • Регенерация только при необходимости
    • Высокая скорость отклика (менее 50 мс)
  7. Контроль ботов

    • Блокировка конкретных ИИ-краулеров при сохранении доступа к форуму
    • Список пользовательских агентов для блокировки через запятую
    • Автоматическая интеграция с robots.txt через view connector
  8. Конфиденциальность и безопасность

    • Частные категории автоматически исключаются
    • Проверки прав доступа Guardian для динамических файлов
    • Фильтрация безопасности на уровне SQL
    • Персональные данные не раскрываются

Преимущества для вашего форума:

  • Повышенная видимость: Ваш контент появляется в ответах ChatGPT, Claude и других ИИ
  • Прямое указание авторства: ИИ-системы цитируют и ссылаются обратно на ваш форум
  • Больше трафика: Увеличенное обнаружение через поиск на базе ИИ
  • Лучший GEO: Генеративная оптимизация для поисковых систем (Generative Engine Optimization) для ИИ-систем
  • Без обслуживания: Автоматическая генерация и обновление

Настройка

После установки плагина перейдите в Администрирование → Настройки → Плагины → discourse-llms-txt-generator

Шаг 1: Включите плагин

Установите llms_txt_enabled в true (включено по умолчанию)

Шаг 2: Настройте индексацию

Установите llms_txt_allow_indexing в true, чтобы разрешить доступ ИИ-краулерам (включено по умолчанию)

Эта настройка определяет, будут ли файлы llms.txt указаны в вашем robots.txt как разрешенные или запрещенные.

Шаг 3: Установите фильтры контента

Настройте эти параметры в зависимости от размера вашего форума:

  • llms_txt_min_views: Минимальное количество просмотров темы для включения (по умолчанию: 50)
  • llms_txt_posts_limit: Сколько тем включать
    • small: 500 тем (рекомендуется для крупных форумов)
    • medium: 2 500 тем (рекомендуется для большинства форумов)
    • large: 5 000 тем
    • all: Все темы (используйте с осторожностью на крупных форумах)

Шаг 4: Опционально — добавьте собственное описание

Заполните поле llms_txt_full_description 2–4 предложениями, описывающими цель вашего форума и его сообщество. Это поможет ИИ-системам предоставлять более точную информацию о вашем форуме.

Пример:

Этот форум посвящен обсуждению программирования на Python с акцентом на веб-разработку,
анализ данных и машинное обучение. Наше сообщество включает как начинающих, так и опытных
разработчиков, которые делятся практическими решениями и лучшими практиками.

Шаг 5: Опционально — заблокируйте конкретных ботов

Если вы хотите заблокировать определенных ИИ-краулеров, введите имена их пользовательских агентов в поле llms_txt_blocked_user_agents через запятую:

Пример: Omgilibot, ChatGPT-User, CCBot

Шаг 6: Проверьте установку

Перейдите на ваш форум по адресам:

  • /llms.txt — файл основной навигации
  • /llms-full.txt — полный индекс контента
  • /sitemaps.txt — полная карта сайта

Проверьте файл /robots.txt, чтобы убедиться в корректности интеграции.

Настройки

Название Значение по умолчанию Описание
llms_txt_enabled true Включение или отключение плагина
llms_txt_allow_indexing true Разрешить ИИ-краулерам доступ к файлам llms.txt (влияет на robots.txt)
llms_txt_blocked_user_agents "" Список пользовательских агентов ботов для блокировки от доступа к файлам llms.txt (через запятую)
llms_txt_intro_text Пользовательский текст Вступительный текст, отображаемый в основном файле llms.txt
llms_txt_full_description "" Пользовательское описание для llms-full.txt, помогающее ИИ понять контекст вашего форума
llms_txt_min_views 50 Минимальное количество просмотров темы для включения в llms-full.txt
llms_txt_posts_limit medium Лимит количества тем: small (500), medium (2 500), large (5 000) или all
llms_txt_include_excerpts false Включать выдержки из постов в llms-full.txt (значительно увеличивает размер файла)
llms_txt_post_excerpt_length 500 Максимальная длина выдержки в символах (100–5000), если выдержки включены
llms_txt_latest_topics_count 50 Количество последних тем для отображения в основном файле llms.txt
llms_txt_cache_minutes 60 Длительность кэширования в минутах для файла навигации

Важные замечания:

  • Включение llms_txt_include_excerpts при значении llms_txt_posts_limit равном all может привести к экстремально большим размерам файлов (потенциально 10–100+ МБ) и высокой нагрузке на сервер в крупных форумах
  • Частные категории автоматически исключаются из всех файлов llms.txt
  • Динамические файлы для каждого ресурса (категории, темы, теги) не кэшируются и генерируются по требованию
  • Плагин использует view connectors для интеграции с robots.txt — редактировать robots.txt вручную не нужно

Технические детали

Архитектура:

  • Генерация по требованию без предварительно созданных файлов
  • Умное кэширование с ежечасными фоновыми проверками
  • Учет прав доступа с использованием Guardian в Discourse
  • Фильтрация безопасности на уровне SQL для частного контента
  • Канонические URL-адреса в заголовках HTTP для предотвращения штрафов SEO

Производительность:

  • Файл навигации кэшируется на 60 минут (настраивается)
  • Файл полного контента генерируется по требованию
  • Умный кэш регенерирует только при наличии нового контента
  • Время отклика менее 50 мс для закэшированного контента

Совместимость:

  • Discourse 2.7.0+
  • Ruby 2.7+
  • Протестировано на Discourse 3.6.0.beta3

Соответствие стандартам:

  • Стандарт llms.txt (https://llmstxt.org/)
  • RFC 3986 (кодирование URL для международных символов)
  • RFC 6596 (заголовки Canonical Link)

Сценарии использования

Форумы сообществ:
Ваши обсуждения и решения появляются, когда пользователи задают ИИ-помощникам соответствующие вопросы, направляя квалифицированный трафик обратно на ваш форум.

Сайты документации:
ИИ-системы могут ссылаться на вашу документацию и учебные материалы, предоставляя точную информацию с правильным указанием авторства.

Форумы поддержки:
Пользователи получают прямые ответы из вашей базы знаний через ИИ-помощников со ссылками на полные обсуждения.

Технические сообщества:
Разработчики обнаруживают контент вашего форума через ИИ-ассистентов для программирования, повышая вовлеченность сообщества.

Обслуживание

Плагин требует минимального обслуживания:

  • Кэш автоматически обновляется каждый час
  • Обновления контента происходят автоматически при создании/редактировании постов
  • Ручная генерация файлов не требуется
  • Доступны опциональные задачи rake: llms_txt:refresh и llms_txt:check

Устранение неполадок

Файлы недоступны:

  • Убедитесь, что llms_txt_enabled установлен в true
  • Проверьте, что llms_txt_allow_indexing установлен в true
  • Убедитесь, что плагин установлен в Администрирование → Плагины

Пустой контент:

  • Убедитесь, что у вас есть публичные темы с достаточным количеством просмотров (проверьте настройку llms_txt_min_views)
  • Убедитесь, что категории публичные (не ограничены для чтения)
  • Проверьте настройку llms_txt_posts_limit

Интеграция с robots.txt не работает:

  • Очистите кэш robots.txt: Rails.cache.delete('robots_txt')
  • Используйте задачу rake: bundle exec rake llms_txt:refresh
  • Перезапустите Discourse: ./launcher restart app

Поддержка

Лицензия

Лицензия MIT — бесплатное программное обеспечение с открытым исходным кодом

Благодарности

8 лайков

Я установил плагин пару дней назад. Установка прошла гладко, спасибо документации автора.

Что я вижу сейчас. На моём сайте было сгенерировано множество файлов txt, например https://discuss.rabkesov.ru/llms.txt. Я понимаю, что пока рано ожидать, что какой-то AI-чатбот (например, Perplexity) будет использовать мой контент в качестве ответа в чате.

Поэтому, чтобы проверить пригодность для LLM, я загрузил это в Qwen (к сожалению, он не поддерживает ссылку выше):

Could you analyze the page llms.txt and tell me what you understood from what you have read? Make a tree in the form of a mind map (Mermaid)

P.S. Если я попрошу перевести всё на английский, дерево ломается.


Вот структура моего сайта (только публичная часть). LLM смог создать её на основе llms.txt! Думаю, это лишь малая часть возможных случаев.


Текстовый вывод без Mermaid
Could you analyze the page llms.txt and tell me what you understood from what you have read?

Да. Основываясь на содержимом llms.txt, вот что я понял:

Файл описывает «discuss | Комната ломки», что примерно переводится как «Форум обсуждений | Комната ломки» — метафорическое пространство для ломки иллюзий в IT, а не людей. Его слоган и фокус предполагают рефлексивную, критическую и ориентированную на сообщество среду, где IT-специалисты могут подвергать сомнению предположения, делиться опытом и совместно решать практические задачи.

Основные темы и цели:

  • Критическое осмысление практик IT, карьерных путей, организационной динамики и личностного роста.
  • Акцент на инструментах и методологиях, упрощающих работу: документация (Markdown/GitLab/Docsify), визуализация (Mermaid/Drawio), механизмы обратной связи и совместная разработка — особенно в рамках корпоративной платформы на базе Discourse.
  • Смесь технических, философских и личных тем, часто пересекающихся: например, «Почему мы выбираем легкие задачи», «Цена спокойствия», «Прокрастинация и избегание решений».

Структура:

Сайт организован по тематическим категориям, включая:

  • AI: Обсуждения моделей (например, Gemma, LM Studio), развёртывания (Runpod, GPU-вычисления) и инструментов.
  • Discourse: Технические темы бэкенда (конфигурация сайта, rake-задачи, методы аутентификации, скрытые параметры).
  • Основная (Main): Основные размышления о рабочей культуре, лидерстве, стандартах документации и ответственности.
  • Блог (Blog): Личные истории (например, смена карьеры, переезд в Самару, инциденты на работе).
  • Школа (School): Ресурсы для студентов, включая этику (родительское согласие для пользователей 14+) и цифровую грамотность (UTM-параметры).
  • Анонимная (Anonymous): Безопасное пространство для деликатных идей.
  • Книги (Books), Мысль дня (Thought of the Day) и т. д. — поддержка интеллектуальных и ежедневных размышлений.

Заметные технические и культурные сигналы:

  • Многоязычная и международная аудитория: например, параллельные руководства по аутентификации на русском и английском языках.
  • Забота об инклюзивной аутентификации: например, сохранение входа через Google/GitHub для нерусскоязычных пользователей, при одновременной поддержке отечественных провайдеров (VK, Mail.ru, OK).
  • Сильный интерес к автоматизации, стандартизации и DevOps: GitLab CI/CD, работа с артефактами, интеграция с Runpod, развёртывание на основе SSH.
  • Повторяющаяся тема профессионального разочарования, особенно среди старших инженеров, перешедших в роли поддержки, — и стратегии преодоления или планирования ухода.

В заключение, llms.txt описывает зрелую, продуманную платформу сообщества, сочетающую техническую глубину с психологической и организационной рефлексией, ориентированную на опытных IT-практиков, сталкивающихся со сложностью, выгоранием и поиском смысла в своей работе.

Дайте знать, если вам нужна визуальная карта, тематическая кластеризация или предложения по следующим шагам (например, улучшение обнаруживаемости, вовлечённости или онбординга).


Что касается меня, это отличный плагин для использования в SEO и т. д.

Несколько моментов для исследования:

  1. Как обрабатывать контент на других языках, кроме английского? Имеет ли значение для LLM английский язык текста в llms.txt?
  2. Найти подтверждение того, что итоговый корневой файл llms.txt никогда не содержит приватные страницы (llms.txt создаётся для каждой страницы сайта на данный момент).
  3. Проверить разрешения в /admin/site_settings/category/security?filter=crawler, чтобы необходимые AI-боты не были заблокированы :slight_smile:
  4. Размышления о случайном смешивании структуры сайта с воспоминаниями, сохранёнными ранее в LLM (это не вина плагина, а особенность чатбота, см. пример ниже)

По поводу пункта #4. В первый раз Qwen решил, что:

  • Я планировал уволиться с работы
  • У меня были проблемы в отношениях :slight_smile:
    и добавил эти пункты в описание сайта!

Qwen может смешивать воспоминания с текущим запросом на анализ карты сайта, предоставленной через llms.txt. Будьте внимательны :slight_smile:

2 лайка

Спасибо за этот плагин, он отличное дополнение к Discourse.

Просто упоминаю об этом на случай, если у кого-то ещё возникнет та же проблема с конфликтом между этим плагином и относительно новой «полу-функцией» Discourse, которая реализует llms.txt, но полностью вручную, не делая ничего из того полезного, что делает этот плагин.

Новая функция Discourse полностью переопределяет путь /llms.txt, даже если он не настроен или не включён. Честно говоря, я немного ошеломлён тем, что это считается полезной или готовой к продакшену функцией в ядре Discourse.

Для меня это означало, что хотя /llms-full.txt и /sitemaps.txt работали идеально, основной путь /llms.txt вообще не работал (404).

Мой обходной путь — создать вручную файл llms.txt, который я загружаю вручную, и который указывает на /llms-full.txt.

Было бы здорово, если бы:

  • Функция ядра Discourse была улучшена так, чтобы она делала то же, что и этот плагин, или
  • Функция ядра Discourse не переопределяла llms.txt и не конфликтовала с этим плагином, если вы не включили её, загрузив файл llms.txt.
4 лайка

Спасибо за ваше замечание и сообщение по адресу Enabling native LLMs.txt support in Discourse - #7 by pacharanero

/llms-full.txt всё ещё работает, но /llms.txt, к сожалению, сломан…

3 лайка

Я изучу, что можно сделать в ближайшей перспективе, и выпущу обновление, чтобы ядро не переопределяло поведение плагина. Надеюсь, это не будет слишком сложно. В конце концов, это часть всей философии плагинов: переопределять и тонко настраивать базовые функции и поведение, включая такие вещи.

1 лайк