Обновление библиотеки 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/