Эффективное масштабирование пользовательской функции

Note

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.

Пользовательские навыки — это веб-API, реализующие конкретный интерфейс. Пользовательский навык можно реализовать на любом публично доступном ресурсе. Ниже приведены наиболее распространенные реализации пользовательских навыков:

  • Функции Azure для пользовательских навыков логики
  • Azure веб-приложения для простых контейнерных навыков ИИ
  • Служба Azure Kubernetes для более сложных или более крупных навыков.

Конфигурация набора навыков

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

  1. Настройте batchSize в навыке, чтобы задать количество записей, отправляемых в одном вызове навыка.

  2. degreeOfParallelism Задайте количество одновременных запросов индексатора для их калибровки в вашем навыке.

  3. Задайте timeout значение, достаточное для того чтобы навык возвращал допустимый ответ.

  4. В определении indexer задайте параметр batchSize для количества документов, которые должны считываться из источника данных и обогащаться параллельно.

Рекомендации

Нет универсальной рекомендации. Планирование тестирования различных конфигураций для достижения оптимального результата. Стратегии масштабирования основаны либо на меньшем количестве больших запросов, либо на нескольких небольших запросах.

  • Кратность вызова навыка: убедитесь, что пользовательский навык выполняется один раз для каждого документа (/document/content) или несколько раз за документ (/document/reviews_text/pages/*). Если это происходит несколько раз в документе, оставайтесь на нижней стороне batchSize и degreeOfParallelism, чтобы уменьшить текучесть данных, и попробуйте установить размер пакета индексатора на постепенно более высокие значения для увеличения масштаба.

  • Координируйте настраиваемые навыки batchSize и индексатор batchSize; убедитесь, что не создаются узкие места. Например, если размер пакета индексатора равен 5, а размер пакета навыка равен 50, для заполнения пользовательского запроса навыка потребуется 10 пакетов индексатора. В идеале размер пакета навыка должен быть меньше или равен размеру пакета индексатора.

  • Для degreeOfParallelism используйте среднее количество запросов, которые может сгенерировать партия индексатора, чтобы определить это значение. Если инфраструктура, на которой размещен навык (например, функция Azure), не может поддерживать высокий уровень параллелизма, рассмотрите возможность понижения степени параллелизма. Вы можете протестировать конфигурацию с помощью нескольких документов, чтобы проверить среднее количество запросов.

  • Хотя ваша цель состоит в масштабировании и поддержке больших объемов, тестирование с меньшим образцом документов помогает квалифицировать различные этапы выполнения. Например, можно оценить время выполнения навыка относительно общего времени, необходимого для обработки подмножества документов. Это поможет вам ответить на вопрос: тратит ли индексатор больше времени на создание пакета или ждёт ответа от вашей функции?

  • Рассмотрим последствия параллелизма для восходящего потока. Если входные данные для пользовательского навыка являются выходными предыдущего навыка, то все ли навыки в наборе навыков эффективно масштабируются, чтобы уменьшить задержку?

Обработка ошибок в пользовательском навыке

Настраиваемые навыки должны возвращать код состояния HTTP 200 при успешном завершении выполнения навыка. Если одна или несколько записей в пакете приводят к ошибкам, попробуйте вернуть код многостатусности (207). Список ошибок или предупреждений для записи должен содержать соответствующее сообщение.

Любой элемент в пакете, который вызывает ошибку, приводит к сбою соответствующего документа. Если необходимо, чтобы документ был успешным, следует вернуть предупреждение.

Любой код состояния более 299 оценивается как ошибка, и все обогащения завершаются ошибкой, что ведет к неудаче документа.

Распространенные сообщения об ошибках

  • Could not execute skill because it did not execute within the time limit '00:00:30'. This is likely transient. Please try again later. For custom skills, consider increasing the 'timeout' parameter on your skill in the skillset. — задайте параметр времени ожидания для навыка, чтобы обеспечить более длительное выполнение.

  • Could not execute skill because Web Api skill response is invalid. указывает на то, что навык не возвращает сообщение в формате пользовательского ответа. Это может быть результатом неперехваченного исключения в навыке.

  • Could not execute skill because the Web Api request failed. — вероятнее всего, это вызвано ошибками авторизации или исключениями.

  • Could not execute skill. Обычно это результат того, что отклик навыка сопоставляется с существующим свойством в иерархии документа.

Тестирование пользовательских навыков

Начните с проверки пользовательского навыка с помощью клиента REST API, чтобы убедиться в следующем:

  • навык реализует интерфейс пользовательских навыков для запросов и ответов;

  • навык возвращает допустимый формат JSON с типом MIME application/json;

  • Навык возвращает допустимый код состояния HTTP

Создайте сеанс отладки, чтобы добавить навык в набор навыков и убедитесь, что он создает допустимое обогащение данных. Хотя сеанс отладки не позволяет настроить производительность навыка, он позволяет убедиться, что навык настроен с допустимыми значениями и возвращает ожидаемые обогащенные объекты.

Лучшие практики

  • Хотя навыки могут принимать и возвращать полезные данные большого размера, рекомендуется ограничить размер ответа до 150 МБ или меньше при возврате JSON.

  • Установите размер пакета для индексатора и навыка, чтобы гарантировать, что каждый пакет источника данных создает полную полезную нагрузку для навыка.

  • Для длительных задач задайте достаточное время ожидания, чтобы индексатор не ошибся при одновременной обработке документов.

  • Оптимизируйте размер пакета индексатора, размер пакета навыков и степень параллелизма, чтобы создать шаблон нагрузки, который нужен для навыка (меньше больших запросов или больше маленьких).

  • Мониторьте настраиваемые навыки с помощью подробных журналов сбоев, так как изменчивость данных может привести к сбою конкретных запросов.