Гайд · TNWS AI

Почему MLflow продолжает отдавать старый промпт после смены алиаса

4 мин—

Разбираем алиас 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.

Пошаговое выполнение

  1. Зарегистрируйте две версии тестового промпта под одним именем и запишите их номера.
  2. Назначьте алиас production первой версии, загрузите его и запишите version.
  3. Переключите алиас на вторую версию, не изменяя сохранённый номер первой.
  4. Сделайте новую загрузку алиаса с cache_ttl_seconds=0 и проверьте version.
  5. Сопоставьте поведение алиаса с загрузкой конкретной неизменяемой версии по 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 и алиас переназначен на нужный номер. Не делайте вывод только по визуальному сходству ответов: две редакции могут порождать одинаковую фразу.

Критерии проверки результата

  1. При обходе кеша after.version совпадает с v2.version.
  2. Фиксированный URI первой версии продолжает возвращать v1.
  3. Различаются смена алиаса, кеш клиента и кеш самого приложения.

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

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

  • Не используйте latest как синоним проверенной production-версии.
  • Не диагностируйте кеш по одному лишь тексту ответа LLM.
  • Не запускайте учебное переключение на рабочем алиасе.

Учитывайте, что трассировка и оценка могут сохранять содержимое входа и выхода. До подключения клиентов организуйте контроль доступа и обработку персональных данных. Не помещайте секреты API в промпты, параметры функций, журналы или опубликованные скриншоты. Если пример использует детерминированную функцию, его успешная проверка подтверждает корректность механики MLflow и теста, но не качество какой-либо нейросети.

FAQ

Можно ли обойти клиентский кеш?

Да, у load_prompt есть cache_ttl_seconds=0.

Меняется ли URI фиксированной версии?

Нет, его текст версии неизменяем.

Сколько действует стандартный кеш алиаса в текущем руководстве?

Указано 60 секунд, если настройка не изменена.

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

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

Можно ли обойти клиентский кеш?

Да, у load_prompt есть cache_ttl_seconds=0.

Меняется ли URI фиксированной версии?

Нет, его текст версии неизменяем.

Сколько действует стандартный кеш алиаса в текущем руководстве?

Указано 60 секунд, если настройка не изменена.

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

Комментарии

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