🦜🔗Создание надежных ML бэкэндов с использованием Pydantic и Langchain

🦜🔗Создание надежных ML бэкэндов с Pydantic и Langchain

Фото Брэдли Зиффер на Unsplash

Узнайте, как предотвратить ошибки пользователей и LLMs в вашем коде

Введение

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

Я первый, кто пишет такие статьи, чтобы улучшить свои программные навыки. Сегодня я расскажу вам о Pydantic – библиотеке, которая является стандартом в программировании на Python и используется в основном для валидации данных, а также о том, как это можно использовать для создания более надежных приложений на языке программирования Langchain.

Начните работу с Pydantic

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

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

Очевидно, что при получении входных параметров от пользователя вам придется выполнить много проверок, потому что если ваша функция ожидает целое число в качестве входных данных, а пользователь вместо 1 вводит 1.0, ваш код, вероятно, сломается.

Давайте теперь рассмотрим практический пример. Здесь мы создаем очень простую модель PyTorch, для инициализации которой требуются некоторые гиперпараметры.

import torchimport torch.nn as nnclass SimpleModel(nn.Module):    def __init__(self, input_size, hidden_size, output_size, activation):        super(SimpleModel, self).__init__()        self.input_size = input_size        self.hidden_size = hidden_size        self.output_size = output_size        self.activation = activation        # Определение слоев        self.fc1 = nn.Linear(self.input_size, self.hidden_size)        self.activation_func =…