OpenAI
December 30, 2023

Обновление библиотеки OpenAI для Python

Привет, друзья!

Некоторые из моих подписчиков в последнее время стали обращаться ко мне с ошибкой, которая возникает у них при работе с библиотекой OpenAI для Python.

Вот так обычно выглядит эта ошибка:

Всё дело заключается в том, что в ноябре 2023 года компания OpenAI обновила свою Python-библиотеку для работы с API OpenAI и теперь при установке новой версии библиотеки (>= 1.0.0) при использовании старых инструкций у Вас могут возникать ошибки, как в примере выше.

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

Новая версия библиотеки OpenAI

Как я уже говорил, в ноябре 2023 года компания OpenAI выпустила новую версию Python-библиотеки и поэтому теперь некоторые подходы при работе с ней изменились.

Кстати, если у Вас установлена старая версия и Вы хотите ее обновить, используйте в терминале команду (при необходимости, предварительно активируйте виртуальное окружение):

pip install openai --upgrade

Так, если раньше для обращения к API OpenAI, к примеру, для генерации ответа на вопрос мы использовали следующую структуру запроса:

completion = await openai.ChatCompletion.acreate(
    model="gpt-3.5-turbo",
    messages=[
      {"role": "system",
       "content": "ЗДЕСЬ_КОНТЕКСТ_ДЛЯ_МОДЕЛИ"},
      {"role": "user", "content": "ЗДЕСЬ_ЗАПРОС_ПОЛЬЗОВАТЕЛЯ"}
    ]
  )

  answer = completion.choices[0].message.content

То теперь, если мы оставим всё как в этом примере и установим новую библиотеку OpenAI, то получим следующую ошибку:

You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.

Новый пример реализации

По тексту ошибки понятно, что мы пытаемся обратиться к ChatCompletion объекта openai, который в новой версии библиотеки OpenAI (>= 1.0.0) больше не поддерживается.

Переходим по ссылке из ошибки и находим там решение.

Разберем пример реализации с поддержкой асинхронности:

import os
import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(
    # This is the default and can be omitted
    api_key=os.environ.get("OPENAI_API_KEY"),
)


async def main() -> None:
    chat_completion = await client.chat.completions.create(
        messages=[
            {
                "role": "user",
                "content": "Say this is a test",
            }
        ],
        model="gpt-3.5-turbo",
    )


asyncio.run(main())

Что изменилось?

1. Вместо обычного импорта библиотеки openai теперь необходимо импортировать один из ее отдельных классов: OpenAI или AsyncOpenAI.

Было:

import openai

Стало:

from openai import AsyncOpenAI
# или
from openai import OpenAI

2. Теперь вручную создаем экземпляр класса для работы с клиентом OpenAI с передачей при его создании API-ключа, пример:

openai_client = AsyncOpenAI(
  api_key="sk-********************" # передаем свой API-ключ
)

3. Изменилась структура методов клиента для создания запросов к API OpenAI. Например, раньше было так:

completion = await openai.ChatCompletion.acreate

Теперь стало так:

completion = await client.chat.completions.create

Конкретно здесь разница лишь в том, что объект ChatCompletion теперь разбит на несколько отдельных классов и метод acreate убран и оставлен только create (раньше методы создания с приставкой "a" использовались для обозначения асинхронных функций, теперь в них нет необходимости, так как сейчас есть глобальное разделение на два объекта OpenAI и AsyncOpenAI)

В остальном для создания обычных запросов к API OpenAI все осталось без каких-либо изменений.

Надеюсь, эта статья помогла Вам!

📌 Подписывайтесь, чтобы не пропустить новые статьи:

Telegram: https://t.me/isartem

YouTube: https://www.youtube.com/@isartem/