ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

OpenAI SDK для Python: установка и проверка без внешнего API

Автор: · Обновлено

Установить OpenAI SDK и выполнить платный запрос — разные действия. В этом практикуме вы проверите пакет, создание клиента, сериализацию запроса и чтение ответа полностью локально. Такой тест помогает найти ошибки приложения ещё до настройки настоящего доступа к API.

Установка официального SDK

В отдельном активированном окружении выполните:

python -m pip install openai httpx
python -m pip show openai
python -m pip check

Имя Python-дистрибутива — openai, клиент импортируется как from openai import OpenAI. Официальная команда установки приведена в документации SDK. Дополнительный прямой httpx нужен нашему учебному транспортному стенду. Локальная проверка выполнена с OpenAI SDK 3.14.1 и HTTPX 0.28.1; для повторения точного окружения можно закрепить эти версии в requirements-файле.

Полный пример без сети

Сохраните openai_offline.py:

import json

import httpx
from openai import OpenAI


def fake_server(request):
    assert request.method == "POST"
    assert request.url.path == "/v1/responses"
    body = json.loads(request.content)
    assert body["input"] == "Проверка установки"
    return httpx.Response(200, json={
        "id": "resp_local",
        "object": "response",
        "created_at": 0,
        "status": "completed",
        "model": "offline-example",
        "output": [{
            "id": "msg_local",
            "type": "message",
            "role": "assistant",
            "status": "completed",
            "content": [{
                "type": "output_text",
                "text": "SDK и локальный транспорт работают",
                "annotations": [],
            }],
        }],
    })


transport = httpx.MockTransport(fake_server)
with OpenAI(
    api_key="not-a-real-key",
    base_url="https://offline.invalid/v1/",
    http_client=httpx.Client(transport=transport),
    max_retries=0,
) as client:
    result = client.responses.create(
        model="offline-example",
        input="Проверка установки",
    )
    print(result.output_text)

Выполните python openai_offline.py. Ожидается одна строка:

SDK и локальный транспорт работают

not-a-real-key — буквальная тестовая строка, не действующий ключ. offline-example — имя в искусственном ответе, не предлагаемая модель OpenAI. HTTPX MockTransport передаёт запрос нашей функции в памяти; адрес с доменом .invalid не используется для сетевого соединения. Механизм транспорта описан в HTTPX, параметры клиента — в официальном Python reference.

Какую часть программы мы проверили

Функция fake_server подтверждает HTTP-метод, путь и переданный текст. Затем она возвращает собственный JSON, который клиент преобразует в результат; output_text извлекает текст из поля output. Здесь нет вычисления модели: фраза заранее записана в нашем ответе.

Разделение полезно для автоматических тестов. Если после изменения кода сломан путь, пропало поле input или неправильно читается ответ, сбой обнаруживается без внешней сети. Такой тест не проверяет права реального аккаунта, доступность модели, качество ответа или ограничения сервиса.

Настоящий доступ на следующем этапе

Для реальной работы клиент использует отдельную конфигурацию и настоящий API-ключ; в стандартной схеме он читается из OPENAI_API_KEY. Настройка описана в официальном Quickstart. Ключ не требуется для нашего локального стенда и не должен попадать в исходники, примеры вывода или браузерный код.

При переходе к сети сначала определяют задачу и доступный API, затем задают конфигурацию. Случайная замена учебного имени модели на название из чужого примера не является проверкой доступа. В этом уроке выбор модели и выполнение внешнего запроса не проводятся.

Диагностика установки и клиента

При ModuleNotFoundError проверьте Python из .venv и python -m pip show openai. Если импорт идёт из вашего openai.py, переименуйте файл. Ошибка создания клиента из-за отсутствующего ключа относится к конфигурации; она не означает, что pip установил пакет неправильно.

Если старый пример обращается к отсутствующему интерфейсу, сопоставьте его с установленной версией SDK и официальным reference. В локальном тесте не убирайте MockTransport ради «проверки на настоящем сервере»: сначала восстановите контракт заглушки и воспроизведите ожидаемый результат.

Практика: проверяем плохой ответ

Измените статус ответа заглушки на 400 и верните JSON с объектом error. Обработайте openai.BadRequestError и выведите только статус и собственное пояснение; тестовый ключ печатать не нужно. Затем верните успешный ответ, но измените его текст и проверьте, что изменился output_text.

Результат практики — успешный локальный сценарий и отдельный тест отказа. Ни один из них не требует токена аккаунта, оплаты, запроса к модели или отправки пользовательских данных во внешний сервис.

Источники