Гайд · TNWS AI
Почему cached examples в Gradio показывают старый ответ нейросети
Отделяем кэш демонстрационных примеров от живых запросов и проверяем влияние обновления модели и файлов.
Задача и применимость
Русскоязычный вопрос: «почему 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.
Порядок действий
- Зафиксируйте место развёртывания, версию Gradio и текущее значение cache_examples.
- Отключите кэш для теста меняющейся модели или базы знаний.
- Сравните результат прямой отправки запроса с нажатием примера.
- При необходимости стабильного демонстрационного ответа включайте кэш сознательно и назначьте правила пересборки.
- После смены версии модели повторите контрольную проверку на свежем и кэшированном примере.
Готовый шаблон
Сохраните пример в отдельном файле 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 нельзя сравнивать показания между рестартами процесса; для времени публикации используйте явно форматированную дату и часовой пояс.
Критерии приёмки
- Контрольное время меняется для живого примера.
- Ответ на новый ввод берётся из новой функции, а не из сохранённого образца.
- После обновления модели отдельно проверен кэш.
Типичные ошибки и чего не делать
- Не считать быстрое открытие примера скоростью модели.
- Не оставлять старый результат после изменения RAG-корпуса.
- Не ожидать Progress для кэшированных примеров.
FAQ
Как выключить кэш?
Установите cache_examples=False.
Что делает eager?
Создаёт кэш примеров при запуске.
Могут ли примеры устареть?
Да, после изменения модели или источника данных.
Официальные источники
Частые вопросы
Как выключить кэш?
Установите cache_examples=False.
Что делает eager?
Создаёт кэш примеров при запуске.
Могут ли примеры устареть?
Да, после изменения модели или источника данных.
Читайте также
Как добавить ползунок temperature к AI-чату через additional_inputs в Gradio
Связываем Slider и функцию чат-бота без ошибки порядка аргументов; проверяем значение до вызова нейросети.
Как добавить примеры вопросов в Gradio, не вызывая нейросеть по клику
Настраиваем examples и run_examples_on_click=False, чтобы пользователь отредактировал вопрос перед дорогим вызовом модели.
Как группировать запросы к ML-модели через batch=True в Gradio Interface
Сверяем сигнатуру пакетной функции, tuple of lists и max_batch_size на детерминированном тесте.
Комментарии
Пока тихо. Скажите первое слово