Разработка функций ИИ стала обязательной составляющей любой инженерной команды. Демонстрационные модели могут быть впечатляющими, но их производительность часто оставляет желать лучшего. Основная проблема заключается в том, чтобы преодолеть разрыв между убедительной концепцией и надежной, поддерживаемой функцией ИИ. Именно здесь лежит большинство интересных инженерных проблем.
Ловушка демонстрационных моделей
Прототипы ИИ опасно легко создать. Обернув вызов API GPT-4 в несколько строк Python и подключив его к фронтенду, можно получить что-то, что выглядит готовым к производству всего за один день. Однако проблемы возникают при масштабировании: несоответствующие выводы, отсутствие обработки ошибок, отсутствие резервных вариантов, отсутствие наблюдаемости и логика запросов, разбросанная по кодовой базе без версионирования. Производственные функции ИИ требуют того же инженерного подхода, что и любой другой критически важный компонент, плюс новый класс проблем, с которыми большинство команд ранее не сталкивались.
Относитесь к запросам как к коду
Самая высокоэффективная практика для производственных ИИ - это контроль версий запросов. Ваши запросы - это логика. Они должны храниться в вашем репозитории, иметь историю коммитов, тестироваться на фиксированном наборе оценки перед развертыванием и чисто откатываться, если что-то ломается. Мы видели команды, которые потеряли недели качественной работы из-за того, что "улучшение" запроса ухудшило вывод на краевых случаях, которые не были обнаружены при ручном тестировании. Простой тестовый каркас, даже 20 представительных тестовых случаев с ожидаемыми шаблонами вывода, мог бы обнаружить это на этапе непрерывной интеграции.
Проектируйте с учетом отказа модели
Модели могут давать ложные результаты. Пиковые задержки могут возникать. API могут стать недоступными. Любая производственная функция ИИ, которая предполагает, что модель всегда будет возвращать действительный, структурированный вывод, потерпит неудачу в производстве. Проектируйте явно для режимов отказа: проверяйте и очищайте все выходные данные модели перед тем, как они коснутся вашего слоя данных; создавайте резервные варианты для каждого пути, управляемого ИИ - что происходит, когда модель возвращает мусор? Устанавливайте агрессивные таймауты и кэшируйте агрессивно, где выход определен.
Важность тестирования и версионирования
Тестирование и версионирование являются важными компонентами производственных функций ИИ. Тестирование позволяет убедиться, что функция работает правильно, а версионирование позволяет отслеживать изменения и возвращаться к предыдущим версиям, если что-то пойдет не так. Используя эти практики, команды могут обеспечить надежную и поддерживаемую работу функций ИИ в производственной среде.