Я разработал простую оболочку Python для API OpenAI, специально предназначенную для личного использования. Оболочка ориентирована на простое получение желаемого результата из моделей OpenAI, а также обеспечивает гибкость определения формата вывода. Давайте разберем, что делает каждая часть кода:
Обзор классов и методов
__init__
: Инициализирует классLLM
(возможно, модель изучения языка?) с помощью ключа API, имени модели (по умолчанию «gpt-3.5-turbo») и параметра температуры, который управляет случайностью сгенерированного текста.model_structure_repr
: генерирует строковое представление структуры PydanticBaseModel
. Это полезно для понимания того, какие ключи требуются модели.is_valid_json_for_model
: Проверяет, является ли данная строка JSON не только допустимым JSON, но и соответствует ли данному PydanticBaseModel
.generate_text
: Взаимодействует с API OpenAI для создания текста на основе заданной подсказки. При желании вы можете указать формат вывода (например, PydanticBaseModel
), количество завершений и максимальный предел токенов.
Подробная разбивка
Инициализация (__init__
)
Когда вы создаете экземпляр LLM
, вы передаете свой ключ API OpenAI, тип модели и температуру. Они сохраняются как переменные экземпляра и используются позже в вызовах API.
def __init__(self, api_key, model="gpt-3.5-turbo", temperature=0.5): self.api_key = api_key self.model = model self.temperature = temperature openai.api_key = self.api_key
Представление структуры модели (model_structure_repr
)
Этот метод принимает Pydantic BaseModel
в качестве аргумента и рекурсивно генерирует строковое представление структуры модели. Это полезно для предоставления обратной связи о том, какой тип JSON следует ожидать.
def model_structure_repr(self, model: Type[BaseModel]) -> str: fields = model.__fields__ # pdb.set_trace() field_reprs = [] for name, model_field in fields.items(): description = model_field.field_info.description or "No description" field_type = model_field.annotation # If it's a list…