График прогресса перевода с помощью ИИ

Вчера я включил автоматический перевод с помощью ИИ на своём самохостинговом сервере Discourse. Вроде бы всё идёт хорошо… или не совсем.

График прогресса перевода либо не обновляется, либо показывает неточные данные. Вот что я вижу:

Это создаёт впечатление, что все сообщения с 23 февраля 2026 года переведены на 99%.

Но это не соответствует действительности. За этот период у меня примерно 3 000 сообщений. Судя по логам перевода, сейчас система обрабатывает сообщения, опубликованные около 6 дней назад.

Поэтому подскажите, пожалуйста:

  • Как часто обновляется этот график?
  • Какой запрос использовать в Data Explorer для поиска сообщений, ожидающих перевода?
  • Какой запрос использовать для сообщений, которые уже переведены?
  • Какой запрос использовать для сообщений, перевод которых был предпринят, но завершился ошибкой по какой-либо причине?

Заранее спасибо.

Нам пришлось закэшировать эту страницу, так как на крупных сайтах она выходила за пределы времени ожидания.

Процесс перевода состоит из двух основных шагов:

  1. Определение исходного языка сообщения
  2. Перевод на все остальные языки

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

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

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

Я бы предложил рассмотреть более простой подход к отчетности.

Согласно моему пониманию, процесс перевода состоит из двух этапов:

  1. Перевод данных тем, подходящих под критерии.
  2. Перевод данных сообщений, подходящих под критерии.

С точки зрения администрирования и отчетности меня меньше интересует то, что находится в процессе выполнения, и больше — общий прогресс по объему работ, подлежащих переводу. Мне хотелось бы видеть отчетность, основанную на настроенных правилах отбора контента для перевода.

Например:

Статус

Настройки заполнения (backfill) настроены на перевод всего контента, созданного после 23 февраля 2026 года.

Область Всего Подлежит переводу Переведено Завершено
Темы 25,000 540 450 83%
Сообщения 400,000 3,700 800 22%

Неудачные переводы

ID сообщения Причина
34543 Некорректные символы в строке xxxx

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

Лично меня не очень интересуют проценты завершения по языкам. Тема или сообщение либо переведены, либо нет. Ключевой вопрос для меня заключается в том, какая часть настроенного объема накопленной работы была успешно обработана.

Кроме того, этот подход кажется более дружелюбным к базе данных, поскольку он фокусируется на агрегированных подсчетах, а не на отслеживании прогресса по каждой возможной комбинации языков.

Если отчетность по конкретным языкам все же ценна, возможно, ее можно реализовать через фильтр. Администратор мог бы выбрать язык и просмотреть ту же таблицу прогресса, но только для этого языка.

Просто некоторые мысли.

p.s.

Какое текущее время хранения кэша?

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

Отчет о статусе перевода

Область Доступно Переведено Требуется перевод
Темы 540 450 90
Сообщения 3,700 800 2900

Темы:

-- Настройка:
-- Обновите настройки перевода в SQL
-- Дни для заполнения - Interval 'xxx'
-- Категория для игнорирования - Category_id NOT IN ()
-- Тип темы - regular или private_message
--
-- Статус перевода:
--  Всего тем для перевода: закомментируйте оба условия 'and topics.locale'
--  Темы без перевода: раскомментируйте только - topics.locale is null
--  Переведенные темы: раскомментируйте только - topics.locale = 'en'

SELECT count(distinct topics.id)
     FROM topics
     JOIN posts  ON topics.id  = posts.topic_id
    WHERE posts.created_at >= NOW() - INTERVAL '100 days' 
     AND  posts.user_id > 0
     AND  topics.category_id NOT IN (22,3)
     AND  topics.archetype = 'regular'
--   AND  topics.locale = 'en'
--   AND  topics.locale is null

Сообщения:

-- Настройка:
-- Обновите настройки перевода в SQL
-- Дни для заполнения - Interval 'xxx'
-- Категория для игнорирования - Category_id NOT IN ()
-- Тип темы - regular или private_message
--
-- Статус перевода:
--  Всего сообщений для перевода: закомментируйте оба условия 'and posts.locale'
--  Сообщения без перевода: раскомментируйте только - posts.locale is null
--  Переведенные сообщения: раскомментируйте только - posts.locale = 'en'

SELECT count(*)
     FROM posts
     JOIN topics  ON topics.id  = posts.topic_id
    WHERE posts.created_at >= NOW() - INTERVAL '100 days' 
     AND  posts.user_id > 0
     AND  topics.category_id NOT IN (22,3)
     AND  topics.archetype = 'regular'
--     AND  posts.locale = 'en'
--     AND  posts.locale is null

Огромное спасибо за обратную связь, @LotusJeff

Я записываю некоторые твои замечания и скоро внесу улучшения™ (вероятно, в июле).

По поводу запросов на немецком, я вернусь к тебе завтра с более точным ответом.