Skip to content

Python + OpenAI SDK

Подробное руководство по использованию AITUNNEL с официальным OpenAI SDK для Python. Покрывает все основные сценарии: чат, стриминг, изображения, аудио, эмбеддинги.

Установка

bash
pip install openai

Настройка клиента

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

Переменные окружения

Вместо указания ключа в коде, используйте переменную окружения:

bash
export OPENAI_API_KEY="sk-aitunnel-xxx"
export OPENAI_BASE_URL="https://api.aitunnel.ru/v1/"

Тогда клиент создаётся без аргументов: client = OpenAI()

Чат (Chat Completions)

Простой запрос

python
response = client.chat.completions.create(
    model="gpt-5.2-pro",
    messages=[
        {"role": "system", "content": "Ты полезный ассистент."},
        {"role": "user", "content": "Объясни, что такое API, простым языком."}
    ],
    max_tokens=1000,
)

print(response.choices[0].message.content)

Стриминг

python
stream = client.chat.completions.create(
    model="claude-sonnet-4.5",
    messages=[{"role": "user", "content": "Напиши рецепт борща"}],
    stream=True,
)

for chunk in stream:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

Мультимодальный запрос (изображение + текст)

python
response = client.chat.completions.create(
    model="gpt-5.2-pro",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Что на этом изображении?"},
                {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
            ]
        }
    ],
)

print(response.choices[0].message.content)

Генерация изображений

python
response = client.images.generate(
    model="gpt-image-1",
    prompt="Уютная кофейня в Москве зимним вечером, акварельный стиль",
    size="1024x1024",
    quality="high",
    n=1,
)

print(response.data[0].url)

Редактирование изображений

python
response = client.images.edit(
    model="gpt-image-1",
    image=open("photo.png", "rb"),
    prompt="Добавь снег за окном",
)

print(response.data[0].url)

Озвучка текста (TTS)

python
response = client.audio.speech.create(
    model="tts-1-hd",
    voice="nova",
    input="Привет! Это пример озвучки текста.",
)

response.stream_to_file("speech.mp3")

Транскрипция аудио

python
with open("recording.mp3", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="whisper-1",
        file=audio_file,
    )

print(transcript.text)

Эмбеддинги

python
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=["Первый текст", "Второй текст"],
)

for item in response.data:
    print(f"Размерность: {len(item.embedding)}")

Модерация

python
response = client.moderations.create(
    input="Текст для проверки на модерацию",
)

print(response.results[0].flagged)

Проверка баланса

OpenAI SDK не имеет встроенного метода для проверки баланса, но можно использовать HTTP-запрос:

python
import httpx

response = httpx.get(
    "https://api.aitunnel.ru/v1/aitunnel/balance",
    headers={"Authorization": "Bearer sk-aitunnel-xxx"},
)

data = response.json()
print(f"Баланс: {data['balance']} ₽")

Обработка ошибок

python
from openai import (
    APIError,
    APIConnectionError,
    RateLimitError,
    AuthenticationError,
)

try:
    response = client.chat.completions.create(
        model="gpt-5.2-pro",
        messages=[{"role": "user", "content": "Привет!"}],
    )
except AuthenticationError:
    print("Неверный API ключ")
except RateLimitError:
    print("Превышен лимит запросов, подождите")
except APIConnectionError:
    print("Ошибка подключения к серверу")
except APIError as e:
    print(f"Ошибка API: {e.message}")

Асинхронное использование

python
from openai import AsyncOpenAI
import asyncio

async_client = AsyncOpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

async def main():
    response = await async_client.chat.completions.create(
        model="gemini-2.5-flash",
        messages=[{"role": "user", "content": "Привет!"}],
    )
    print(response.choices[0].message.content)

asyncio.run(main())

Лучшие практики

  1. Указывайте max_tokens: Это помогает точнее рассчитать стоимость запроса
  2. Используйте стриминг: Для чатов и длинных ответов — пользователь видит текст по мере генерации
  3. Обрабатывайте ошибки: Особенно RateLimitError — добавьте retry с экспоненциальной задержкой
  4. Переменные окружения: Не хардкодьте API ключ, используйте OPENAI_API_KEY
  5. Асинхронный клиент: Для веб-приложений и массовой обработки используйте AsyncOpenAI

Дополнительные ресурсы

AITUNNEL