Гайд · TNWS AI
Почему MLflow продолжает отдавать старый промпт после смены алиаса
Разбираем алиас production и клиентский кеш; проверяем смену версии с cache_ttl_seconds=0 и фиксированным URI.
Задача и применимость
Поисковый запрос: «почему MLflow load_prompt production alias отдаёт прежний шаблон cache ttl». Выяснить, почему приложение не увидело утверждённую новую редакцию шаблона после переключения алиаса. Инструкция применима к Python-клиенту и Tracking Server актуальной ветки MLflow GenAI, проверенной по официальной документации 20 сентября 2026 года. Для конкретной установки сначала посмотрите mlflow.__version__: при отличии интерфейса от приведённого руководства закрепите совместимую версию и проверьте её документацию. Учебные данные вымышлены; ни один описанный пример не является запросом к реальному магазину.
Что происходит в системе
Документация MLflow различает неизменяемый URI версии вида prompts:/name/номер и переназначаемый алиас prompts:/name@production. Версионные ссылки по умолчанию кешируются без ограничения времени, а алиасы имеют конечный TTL; в текущем руководстве для алиаса указан стандартный TTL 60 секунд. Параметр cache_ttl_seconds=0 принуждает загрузку без клиентского кеша при диагностике. Он не «исправляет» неправильное имя алиаса, неверный tracking URI либо процесс, который однажды загрузил промпт и больше вообще не вызывает load_prompt.
Пошаговое выполнение
- Зарегистрируйте две версии тестового промпта под одним именем и запишите их номера.
- Назначьте алиас production первой версии, загрузите его и запишите version.
- Переключите алиас на вторую версию, не изменяя сохранённый номер первой.
- Сделайте новую загрузку алиаса с cache_ttl_seconds=0 и проверьте version.
- Сопоставьте поведение алиаса с загрузкой конкретной неизменяемой версии по URI.
Для локального опыта нужен Python 3.10+, установленный пакет mlflow и запущенный отдельно командой mlflow server локальный сервер. Адрес http://localhost:5000 из примеров справедлив при стандартном локальном запуске; в контейнере и удалённом окружении задайте настоящий доступный URI. Вызовы реальной модели выполняйте только с подходящими ключами и подтверждённой доступностью модели. Фрагмент ниже — готовый шаблон контроля конкретной операции:
import mlflow
mlflow.set_tracking_uri("http://localhost:5000")
v1 = mlflow.genai.register_prompt(name="ru-alias-demo", template="Коротко: {{question}}")
v2 = mlflow.genai.register_prompt(name="ru-alias-demo", template="Кратко и честно: {{question}}")
mlflow.genai.set_prompt_alias("ru-alias-demo", alias="production", version=v1.version)
before = mlflow.genai.load_prompt("prompts:/ru-alias-demo@production", cache_ttl_seconds=0)
mlflow.genai.set_prompt_alias("ru-alias-demo", alias="production", version=v2.version)
after = mlflow.genai.load_prompt("prompts:/ru-alias-demo@production", cache_ttl_seconds=0)
pinned = mlflow.genai.load_prompt(f"prompts:/ru-alias-demo/{v1.version}")
print(before.version, after.version, pinned.version)
print(after.format(question="Где инструкция?"))
Пример входа и ожидаемого результата
Вход: два разных демонстрационных текста и запрос «Где инструкция?». Ожидаемое отношение версий: before — первая, after — вторая, pinned — снова первая; форматированный after содержит «Кратко и честно». Численные значения зависят от существующих данных реестра, поэтому важны равенства с v1.version и v2.version.
Как интерпретировать измерение
Этот сценарий удобен и для отката: назначьте production прежней проверенной версии, затем проверьте, что новый запрос load_prompt действительно возвращает её. Но не переключайте реальные окружения учебным скриптом. Для приложения с большим трафиком постоянный TTL 0 означает более частые обращения к registry; используйте его как диагностический приём и выбирайте рабочую политику обновления отдельно. У pinned-версии постоянство полезно для точного повторения опыта; у алиаса — гибкость выпуска, но вы должны понимать задержку обновления в процессах.
Границы решения и особые случаи
Прежде чем винить кеш, напечатайте prompt.version и короткую контрольную безопасную строку шаблона. Если version уже новая, а ответ модели прежний, причина может быть в другом слое: application-level cache, вторичный шаблон, тестовый запрос без изменённого правила или модельный вывод. Если version остаётся старой даже с cache_ttl_seconds=0, проверьте, что оба клиента подключены к одному registry и алиас переназначен на нужный номер. Не делайте вывод только по визуальному сходству ответов: две редакции могут порождать одинаковую фразу.
Критерии проверки результата
- При обходе кеша after.version совпадает с v2.version.
- Фиксированный URI первой версии продолжает возвращать v1.
- Различаются смена алиаса, кеш клиента и кеш самого приложения.
Если критерий не выполняется, сохраните номер версии пакета, безопасный входной пример и фактический результат. Затем меняйте по одной переменной: адрес сервера, параметры вызова, конфигурацию эксперимента либо редакцию шаблона. Такой подход помогает установить причину отличия без предположений о том, что модель «обязана» отвечать строго одной строкой. После успешного теста на заглушке повторите проверку на малом наборе разрешённых рабочих данных; обучающий пример сам по себе не является нагрузочным, приватностным или качественным аудитом.
Типичные ошибки и что не делать
- Не используйте latest как синоним проверенной production-версии.
- Не диагностируйте кеш по одному лишь тексту ответа LLM.
- Не запускайте учебное переключение на рабочем алиасе.
Учитывайте, что трассировка и оценка могут сохранять содержимое входа и выхода. До подключения клиентов организуйте контроль доступа и обработку персональных данных. Не помещайте секреты API в промпты, параметры функций, журналы или опубликованные скриншоты. Если пример использует детерминированную функцию, его успешная проверка подтверждает корректность механики MLflow и теста, но не качество какой-либо нейросети.
FAQ
Можно ли обойти клиентский кеш?
Да, у load_prompt есть cache_ttl_seconds=0.
Меняется ли URI фиксированной версии?
Нет, его текст версии неизменяем.
Сколько действует стандартный кеш алиаса в текущем руководстве?
Указано 60 секунд, если настройка не изменена.
Официальные источники
Частые вопросы
Можно ли обойти клиентский кеш?
Да, у load_prompt есть cache_ttl_seconds=0.
Меняется ли URI фиксированной версии?
Нет, его текст версии неизменяем.
Сколько действует стандартный кеш алиаса в текущем руководстве?
Указано 60 секунд, если настройка не изменена.
Читайте также
Как найти ошибочные и медленные запросы AI-приложения в MLflow Traces
Фильтруем статус ERROR и длительность через search_traces, сверяя результат с искусственными успешным и аварийным вызовами.
Как проверить формат ответа нейросети собственным scorer в MLflow
Создаём @scorer для проверяемого префикса и проводим оценку без LLM-судьи и без внешнего API.
Как разделить поиск и сборку ответа RAG на спаны MLflow Tracing
Размечаем вручную поиск фрагмента и формирование ответа; проверяем вложенные спаны без вызова платной модели.
Комментарии
Пока тихо. Скажите первое слово