Для работы нужен доступ к OpenAI API. Мне не хотелось искать способы временной регистрации зарубежных телефонов для получения SMS от OpenAI и оплаты сервиса по карте российских банков.
Я довольно давно пользовался сервисом https://chatgpt-accounts.ru/ для получения аккаунтов для доступа к API. Сервис проверенный, работает нормально, но только как-то зашел на него, а там только доступ к web интерфейсу OpenAI, а вот API нет.
Нашел сервис проксирования запросов к OpenAI API: https://proxyapi.ru/ Но в документации к сервису описан вызов через указание ключа и url прокси в аргументах конструктора.
from openai import OpenAI client = OpenAI( api_key="{PROXY_API_KEY}", base_url="https://api.proxyapi.ru/openai/v1", ) chat_completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}] )
Проверить запрос через прокси можно из командной строки через CURL (строка под Windows):
curl https://api.proxyapi.ru/openai/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $PROXY_API_KEY" -d "{\"model\": \"gpt-4-turbo\", \"messages\": [{\"role\": \"user\", \"content\": \"Say this is a test!\"}]}"
Мне нужен был способ передачи параметров через переменную окружения, поскольку нужна была векторная база FAISS и запускал я код в Colab. Название переменной окружения:
from google.colab import userdata os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY_PROXY') os.environ["OPENAI_API_BASE"] = "https://api.proxyapi.ru/openai/v1"
При использовании прокси сервера для доступа к API Proxy используется переменная окружения «OPENAI_PROXY»:
os.environ["OPENAI_PROXY"] = "http://your-corporate-proxy:8080"
При вызове конструктора OpenAI при разработке веб-приложений недостаточно передавать ключ через переменную окружения. Вылезет ошибка, что из этой страны запуск запрещен:
openai.PermissionDeniedError: Error code: 403 - {'error': {'code': 'unsupported_country_region_territory', 'message': 'Country, region, or territory not supported', 'param': None, 'type': 'request_forbidden'}}
Поэтому при вызове конструктора OpenAI нужно в аргументах передать параметры прокси и API:
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY") os.environ["OPENAI_API_BASE"] = os.getenv("OPENAI_API_BASE") client = OpenAI( api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_API_BASE") ) embeddings = OpenAIEmbeddings( api_key=os.environ.get("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_API_BASE") )
Ключ и URL у меня был сохранен в файле .env:
OPENAI_API_KEY = "sk-...." OPENAI_API_BASE = "https://api.proxyapi.ru/openai/v1"
В документации указаны следующие параметры
openai = ChatOpenAI( model_name="your-model-name", openai_api_key="your-api-key", openai_api_base="http://your-custom-endpoint", openai_proxy="http://your-proxy-url" )