Теги — штука полезная ровно до момента, когда надо расставить их вручную. Пишешь статью, увлечён идеей, а потом сидишь и думаешь: это monitoring или observability? ai или programming? Скучно, и поэтому теги постепенно расползаются.

Я решил отдать рутину машине — но так, чтобы это не стоило как отдельный проект.

Идея

При публикации статья уходит в LLM, и она предлагает теги. Ключевое правило: авторские теги всегда главнее. Модель не переписывает мою разметку, а только дополняет её — ставит те, которых я не поставил.

Чтобы теги не разъезжались, я не даю модели свободу выдумывать: в промпт подставляется наш словарь уже существующих тегов, и ответ должен быть только из него. Так разметка остаётся согласованной, а не превращается в облако из синонимов.

Дёшево по дизайну

Задача маленькая, поэтому и решение максимально экономное:

  • модель yandexgpt-lite — самая лёгкая и дешёвая;
  • текст статьи обрезается перед отправкой (первые ~1500 символов);
  • temperature 0 и маленький maxTokens — короче ответ, меньше токенов;
  • кэш по хэшу текста — статью не оценивают дважды;
  • вызов идёт в фоне, публикация не ждёт модель.

Плюс в редакторе есть кнопка «предложить»: можно запросить подсказку вручную и, если нравится, оставить.

Отдельная подсветка

Теги, которые поставила LLM, хранятся отдельно от авторских и показываются другим контуром — тонкой линией фирменного фиолетового из Yandex AI Studio. Сразу видно, где мой выбор, а где машинный. Если тег от модели не нравится — он и не мешает: это отдельная сущность, её легко убрать.

Тег как связка

Из этой истории выросла ещё одна вещь. Раньше разделы песочницы ссылались на блог «вообще». Теперь у каждого модуля — свой уникальный тег, и карточка ведёт прямо на статью, где этот модуль обсуждается. Один тег — одна статья, никаких общих подборок.

Как подключить Yandex AI Studio

Само подключение оказалось простым — всё живёт в AI Studio.

  1. В каталоге Yandex Cloud создаётся сервисный аккаунт и ему выдаётся роль ai.languageModels.user.
  2. Для этого аккаунта выпускается API-ключ.
  3. Приложению передаются три переменные: YC_FOLDER_ID, YC_API_KEY и модель (YC_LLM_MODEL, у меня yandexgpt-lite).
  4. Запрос идёт на https://llm.api.cloud.yandex.net/foundationModels/v1/completion с modelUri: gpt://<folder_id>/yandexgpt-lite/latest и заголовком Authorization: Api-Key <ключ>.

Ключи я держу только в серверном .env — в репозиторий они не попадают. Секрет показан один раз при создании, так что первым делом он едет в менеджер паролей.

Всю связку я отметил на схеме: страница архитектуры теперь показывает Yandex AI Studio и поток «публикация → LLM → автотеги».

Что понял

LLM не нужно применять «большими мазками». Иногда она полезна в очень узкой роли: не писать текст, а классифицировать его по уже заданному словарю. Дёшево, локально по смыслу и незаметно в потоке — а рутина уходит.

Оговорки остаются: текст статьи уходит в облако Яндекса, и это платно (пусть и копейки на lite). Но за то, чтобы теги перестали быть рутиной, цена кажется честной.