- Установка пакета OpenAI для Python
- Класс клиента OpenAI
- Chat Completions: базовый запрос
- Потоковая передача ответов
- Вызов функций
- Асинхронное использование с AsyncOpenAI
- OpenAI JavaScript SDK
- Интеграция Azure OpenAI с Python
- Используйте Novita AI с тем же SDK
- Когда использовать Novita Agent Sandbox
- Открытые модели через Novita AI
- FAQ
- Рекомендуемые статьи
OpenAI Python SDK (openai на PyPI) — это официальный Python-клиент для API OpenAI. Он обрабатывает аутентификацию, форматирование запросов, разбор ответов, потоковую передачу и повторные попытки. Это руководство охватывает установку, основной класс OpenAI, Chat Completions, потоковую передачу, вызов функций, асинхронное использование, аналог JavaScript SDK, интеграцию с Azure OpenAI и совместимость с Novita AI.
Установка пакета OpenAI для Python
Требуется Python 3.10 или выше:
pip install openai
Если вы переходите с устаревшего API 0.x, замените openai.ChatCompletion.create() на client.chat.completions.create().
Установите свой API-ключ как переменную окружения. Не помещайте его в исходный код:
export OPENAI_API_KEY="sk-..."
Класс клиента OpenAI
Класс OpenAI — это основная точка входа. По умолчанию он читает API-ключ из переменной окружения OPENAI_API_KEY, но вы также можете передать его явно:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
)
Клиент управляет пулом соединений, повторными попытками и тайм-аутами. Создайте один экземпляр и переиспользуйте его во всём приложении, а не создавайте его для каждого запроса.
Настраиваемые параметры при инициализации:
| Параметр | По умолчанию | Описание |
|---|---|---|
api_key |
переменная окружения OPENAI_API_KEY |
Аутентификационные данные |
base_url |
https://api.openai.com/v1 |
Переопределение для прокси или совместимого API |
timeout |
600s | Тайм-аут на запрос |
max_retries |
2 | Автоматические повторные попытки при ошибках ограничения скорости |
http_client |
None | Пользовательский httpx-клиент для настройки прокси или сертификатов |
Chat Completions: базовый запрос
Chat Completions — самый частый вариант использования. Список messages использует тот же формат, что и API: список словарей role/content, представляющих беседу:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful coding assistant."},
{"role": "user", "content": "What is the difference between a list and a tuple in Python?"},
],
temperature=0.3,
max_tokens=512,
)
print(response.choices[0].message.content)
Ответ — это объект ChatCompletion. Ключевые поля:
response.choices[0].message.content— текстовый ответresponse.usage.prompt_tokens— токены, потреблённые входным запросомresponse.usage.completion_tokens— токены, потреблённые выходным ответомresponse.model— версия модели, обработавшая запрос
Для продакшена передавайте max_tokens, чтобы избежать неконтролируемых затрат на генерацию, и temperature=0 или низкие значения, когда нужны детерминированные результаты.
Потоковая передача ответов
Для интерактивных интерфейсов, где пользователи видят токены по мере поступления, используйте stream=True:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
with client.chat.completions.stream(
model="gpt-4o",
messages=[
{"role": "user", "content": "Explain Python generators in plain language."},
],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Использование контекстного менеджера (оператор with) гарантирует корректное закрытие соединения после итерации. Атрибут .text_stream возвращает обычные строки; .stream возвращает сырые объекты событий, если вам нужны метаданные, например статистика использования для каждого фрагмента.
Если вам нужна потоковая передача без контекстного менеджера:
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "List 5 Python best practices."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
Вызов функций
Вызов функций позволяет модели решать, когда вызвать функцию, и возвращать JSON-объект с аргументами. Ваше приложение выполняет функцию, а затем отправляет результат обратно, чтобы модель включила его в свой ответ:
import os
import json
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Returns current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name, e.g. 'San Francisco'",
}
},
"required": ["city"],
},
},
}
]
messages = [{"role": "user", "content": "What's the weather in Tokyo?"}]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto",
)
choice = response.choices[0]
if choice.finish_reason == "tool_calls":
tool_call = choice.message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
# Execute your actual function here
result = {"city": args["city"], "temperature": "18°C", "condition": "cloudy"}
messages.append(choice.message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result),
})
final = client.chat.completions.create(
model="gpt-4o",
messages=messages,
)
print(final.choices[0].message.content)
Модель возвращает finish_reason="tool_calls", когда хочет вызвать функцию. Вы выполняете функцию, добавляете результат в список messages и отправляете второй запрос. Этот двухэтапный цикл — стандартный паттерн.
Асинхронное использование с AsyncOpenAI
Для FastAPI, сервисов на asyncio или любого кода, которому полезен неблокирующий ввод-вывод, используйте AsyncOpenAI:
import os
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])
async def get_response(prompt: str) -> str:
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
max_tokens=256,
)
return response.choices[0].message.content
async def main():
result = await get_response("What is asyncio in Python?")
print(result)
asyncio.run(main())
AsyncOpenAI — это асинхронный аналог, который можно использовать без изменений; все методы — awaitable. Это предпочтительнее, чем использовать asyncio.to_thread для обёртки синхронного клиента.
OpenAI JavaScript SDK
OpenAI JavaScript SDK (openai на npm) во многом повторяет интерфейс Python. Установите его:
npm install openai
Базовый запрос Chat Completions в Node.js:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Explain promises vs async/await in JavaScript." },
],
max_tokens: 512,
});
console.log(response.choices[0].message.content);
Потоковая передача на JavaScript:
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const stream = await client.chat.completions.stream({
model: "gpt-4o",
messages: [{ role: "user", content: "Summarize the fetch API in 3 sentences." }],
});
for await (const chunk of stream) {
const text = chunk.choices[0]?.delta?.content ?? "";
process.stdout.write(text);
}
JavaScript SDK поддерживает Node.js 18+, Deno и браузерные окружения, но раскрывать ваш API-ключ в браузере небезопасно. Вместо этого используйте серверный прокси. Опция base_url для совместимых API работает так же, как в Python.
Интеграция Azure OpenAI с Python
Если вы используете сервис Azure OpenAI, а не прямой API OpenAI, используйте клиент AzureOpenAI из того же пакета:
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01",
)
response = client.chat.completions.create(
model="gpt-4o", # Your deployment name in Azure
messages=[
{"role": "user", "content": "How do I use Azure OpenAI with Python?"},
],
)
print(response.choices[0].message.content)
Необходимые переменные окружения для Azure:
AZURE_OPENAI_API_KEY: ваш API-ключ ресурса AzureAZURE_OPENAI_ENDPOINT: URL вашей конечной точки, напримерhttps://your-resource.openai.azure.com/
Параметр model в Azure OpenAI относится к вашему имени развёртывания, а не к имени базовой модели. Установите api_version в соответствии с версией Azure API, которую использует ваше развёртывание (см. документацию Azure OpenAI для списка поддерживаемых версий).
Для аутентификации через Microsoft Entra ID (ранее Azure AD) вместо API-ключа:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
client = AzureOpenAI(
azure_ad_token_provider=token_provider,
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01",
)
Используйте Novita AI с тем же SDK
Novita AI предоставляет OpenAI-совместимую конечную точку по адресу https://api.novita.ai/openai. Вы можете использовать тот же openai Python или JavaScript SDK и изменить только base_url и api_key:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["NOVITA_API_KEY"],
base_url="https://api.novita.ai/openai",
)
response = client.chat.completions.create(
model="deepseek/deepseek-v3.1",
messages=[
{"role": "system", "content": "You are a helpful coding assistant."},
{"role": "user", "content": "Explain how Python's GIL affects multithreading."},
],
temperature=0.3,
max_tokens=512,
)
print(response.choices[0].message.content)
Получите API-ключ Novita AI на странице novita.ai/settings/key-management. Тот же ключ работает во всех API Novita AI, включая OpenAI-совместимую конечную точку.
JavaScript с Novita AI:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.NOVITA_API_KEY,
baseURL: "https://api.novita.ai/openai",
});
const response = await client.chat.completions.create({
model: "qwen/qwen3-coder-480b-a35b-instruct",
messages: [{ role: "user", content: "Write a Python type annotation cheatsheet." }],
max_tokens: 600,
});
console.log(response.choices[0].message.content);
Всё остальное — потоковая передача, вызов функций, асинхронное использование, response_format, temperature и max_tokens — работает так же.
Когда использовать Novita Agent Sandbox
Используйте SDK OpenAI для вызовов моделей, а затем применяйте Novita Agent Sandbox, когда вашему процессу нужны изолированное выполнение кода, действия в браузере или файловые операции. Это позволяет уровню SDK оставаться сфокусированным на инференсе, в то время как Sandbox обрабатывает опасные части агентского цикла.
Открытые модели через Novita AI
Замена base_url даёт вам доступ к моделям с открытыми весами на Novita AI без изменения клиентского кода. Это полезно, когда вам нужна модель для кодинга, использования инструментов или работы с длинным контекстом, но при этом вы хотите сохранить тот же рабочий процесс SDK.
Формат идентификатора модели на Novita AI: provider/model-name, и вы передаёте его напрямую в параметр model.
Простой паттерн маршрутизации для команд, которые хотят сочетать открытые и закрытые модели:
def get_client(use_novita: bool = False) -> OpenAI:
if use_novita:
return OpenAI(
api_key=os.environ["NOVITA_API_KEY"],
base_url="https://api.novita.ai/openai",
)
return OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# Use open-weight for cost-sensitive, high-volume coding tasks
coding_client = get_client(use_novita=True)
# Use OpenAI for tasks where the closed model is genuinely better
openai_client = get_client(use_novita=False)
Это позволяет проводить A/B-тестирование качества ответов, направлять работу в Novita AI, когда это подходит, и сохранять единый путь SDK для всех провайдеров.
FAQ
Как называется пакет OpenAI для Python?
Пакет на PyPI называется openai. Установите его с помощью pip install openai.
Как называется класс клиента OpenAI в Python?
Основной класс — OpenAI для синхронного использования и AsyncOpenAI для асинхронного. Оба находятся в модуле openai: from openai import OpenAI, AsyncOpenAI.
Поддерживает ли OpenAI Python SDK потоковую передачу?
Да. Используйте client.chat.completions.stream() как контекстный менеджер или передайте stream=True в client.chat.completions.create() и итерируйтесь по фрагментам.
Как называется пакет OpenAI JavaScript SDK?
Пакет на npm называется openai. Установите его с помощью npm install openai. Сигнатуры классов и методов почти идентичны Python SDK.
Как использовать Azure OpenAI с Python?
Используйте класс AzureOpenAI из пакета openai. Передайте azure_endpoint, api_key и api_version. Параметр model относится к имени вашего развёртывания Azure, а не к базовой модели.
Можно ли использовать OpenAI Python SDK с другими провайдерами?
Да. Любой провайдер, реализующий формат OpenAI Chat Completions API, может использоваться путём установки base_url на клиенте. Конечная точка Novita AI по адресу https://api.novita.ai/openai — один из примеров; полный набор функций SDK — потоковая передача, вызов функций, асинхронность — работает без изменений.
Как защитить мой OpenAI API-ключ?
Храните ключ в переменной окружения (OPENAI_API_KEY) и читайте его с помощью os.environ["OPENAI_API_KEY"]. Никогда не помещайте его в исходный код, публичные репозитории, журналы сборки или клиентский JavaScript.
Рекомендуемые статьи
- Novita AI теперь поддерживает OpenAI Agents SDK! — Подключайте модели Novita AI к OpenAI Agents SDK для оркестрации нескольких агентов, защитных механизмов и трассировки.
- Qwen3 Coder 30B A3B Instruct: краткое руководство по началу работы — Идентификатор модели, цены, контекстное окно и примеры API для этой экономичной кодинг-модели на Novita AI.
- Vercel AI SDK: полное руководство для разработчиков по созданию AI-приложений — Используйте Vercel AI SDK с OpenAI-совместимой конечной точкой Novita AI для потоковой передачи, вызова инструментов и агентских циклов на TypeScript.
