Гайд · TNWS AI

Почему cached examples в Gradio показывают старый ответ нейросети

4 мин—

Отделяем кэш демонстрационных примеров от живых запросов и проверяем влияние обновления модели и файлов.

Задача и применимость

Русскоязычный вопрос: «почему gradio cache_examples показывает старые ответы llm». Относится к ChatInterface Gradio с примерами и cache_examples; параметры и значения по умолчанию сверены 20 сентября 2026 года. Для меняющегося API или RAG-корпуса предпочтительно сначала отключить кэш. Код показывает изменяющийся контрольный ответ, а не подключает реальные веса.

Что подтверждено производителем

Документация указывает, что cache_examples=True сохраняет результаты примеров на сервере; значение по умолчанию на Hugging Face Spaces — True, вне Spaces — False. cache_mode="eager" создаёт кэш при запуске, "lazy" — после первого применения. Для закэшированных примеров Gradio не показывает в UI некоторые сообщения очереди, например gr.Progress, gr.Info и gr.Warning.

Порядок действий

  1. Зафиксируйте место развёртывания, версию Gradio и текущее значение cache_examples.
  2. Отключите кэш для теста меняющейся модели или базы знаний.
  3. Сравните результат прямой отправки запроса с нажатием примера.
  4. При необходимости стабильного демонстрационного ответа включайте кэш сознательно и назначьте правила пересборки.
  5. После смены версии модели повторите контрольную проверку на свежем и кэшированном примере.

Готовый шаблон

Сохраните пример в отдельном файле Python. В коде нет реального секрета или скрытого вызова модели: если подключён внешний API, его адрес и параметры указаны явно. Установите gradio в отдельном окружении; дополнительные пакеты требуются только там, где они импортированы в примере.

import time
import gradio as gr

def current(message, history):
    return f"Вызов выполнен в {time.monotonic():.3f}; вопрос: {message}"

gr.ChatInterface(current, examples=["Сколько дней на возврат?"],
                 cache_examples=False, title="Живой тест")  .launch(server_name="127.0.0.1")

Вход и ожидаемый результат

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

Проверка контракта

Кэшированные примеры хороши для стабильного визуального демо: посетитель быстро видит результат без нового тяжёлого инференса. Но если вчера изменился модельный checkpoint, prompt или индекс RAG, старый ответ создаёт ложное впечатление о текущем поведении. Сначала определите, что именно хотите показывать: эталонную сохранённую демонстрацию или живую модель. Для второго режима отключите кэш и проведите тест после перезапуска и обновления исходных данных.

Работа с данными пользователя

Не судите о скорости inference по мгновенному открытию кэшированного примера. Измеряйте отдельно время live-вызова и время извлечения готового ответа. В отчёт о качестве включайте идентификатор модели, версию промпта и состояние корпуса документов. Даже если пример выглядит верно, он не проверяет, как модель ответит на новые пользовательские формулировки; необходимы запросы вне списка examples.

Что проверить перед развёртыванием

При cache_mode="eager" система может выполнить дорогие примеры во время запуска; при "lazy" расчёт придётся на первого пользователя. Если пример содержит секретный документ, хранение результата на сервере создаёт дополнительный след данных. Изучите каталог кэша и политику удаления в своей инсталляции. Сообщения Progress и Warning не обязательно показываются для закэшированного результата, поэтому отсутствие предупреждения на таком примере не доказывает, что актуальный запуск прошёл без ошибок.

Шаблон проверки фактов для настоящего FAQ-бота: «Только по документу [текст] укажи срок возврата и ссылку на абзац. Если срок отсутствует, ответь НЕИЗВЕСТНО». Проверьте отдельно образец с текстом «14 дней» и живой запрос с текстом «7 дней». Если оба показывают один старый срок, диагностируйте источник данных и кэш, прежде чем менять temperature. Не путайте кэш примеров с общим кэшированием всех пользовательских запросов.

Если отвечающий сервис зависит от внешней погоды, цен или расписания, кэшированный образец особенно опасен: посетитель может решить, что перед ним свежие данные. Добавьте в UI пометку о времени и происхождении демонстрации либо полностью отключите кэш. Проверяйте актуальность первичного источника, а не только дату сохранения примера. Для диагностического времени monotonic нельзя сравнивать показания между рестартами процесса; для времени публикации используйте явно форматированную дату и часовой пояс.

Критерии приёмки

  1. Контрольное время меняется для живого примера.
  2. Ответ на новый ввод берётся из новой функции, а не из сохранённого образца.
  3. После обновления модели отдельно проверен кэш.

Типичные ошибки и чего не делать

  • Не считать быстрое открытие примера скоростью модели.
  • Не оставлять старый результат после изменения RAG-корпуса.
  • Не ожидать Progress для кэшированных примеров.

FAQ

Как выключить кэш?

Установите cache_examples=False.

Что делает eager?

Создаёт кэш примеров при запуске.

Могут ли примеры устареть?

Да, после изменения модели или источника данных.

Официальные источники

Частые вопросы

Как выключить кэш?

Установите cache_examples=False.

Что делает eager?

Создаёт кэш примеров при запуске.

Могут ли примеры устареть?

Да, после изменения модели или источника данных.

Читайте также

Комментарии

Пока тихо. Скажите первое слово