Skip to content

Введение ​

С OpenAI API можно взаимодействовать через HTTP-запросы помощью любого языка программирования, используя наши официальные библиотеки для Python и Node.js, а также сторонние библиотеки.

Чтобы установить официальную библиотеку Python, выполните следующую команду:

bash
pip install openai

Чтобы установить официальную библиотеку для Node.js, выполните следующую команду в вашем проекте Node.js:

bash
npm install openai

Аутентификация ​

API ключи ​

OpenAI API использует ключи API для аутентификации. В России доступ к API OpenAI ограничен. Чтобы получить API-ключ, можно воспользоваться сервисом AITunnel, который предоставляет доступ к OpenAI API в России. API-ключи AiTunnel обладают полной совместимостью с OpenAI, что позволяет вам исключить необходимость в переписывании ваших скриптов. Поддерживает стандартные библиотеки для Python, JavaScript, GO, php, curl, что делает интеграцию в ваши проекты простой и быстрой.

Каждый ключ API может быть ограничен одним из следующих вариантов:

  • Ключи проекта — предоставляют доступ к одному проекту (предпочтительный вариант); доступ можно получить, выбрав конкретный проект, для которого вы хотите сгенерировать ключи.
  • Ключи пользователя — наши устаревшие ключи. Предоставляют доступ ко всем организациям и всем проектам, к которым добавлен пользователь; предлагается переход на ключи проектов для обеспечения лучшей безопасности, однако доступ через этот метод пока поддерживается.

Помните, что ваш API ключ — это секрет! Не делитесь им с другими и не публикуйте его в коде на клиентской стороне (браузеры, приложения). Запросы необходимо направлять через ваш собственный сервер, где ключ API можно безопасно загрузить из переменной окружения или сервиса управления ключами.

Все API-запросы должны включать ваш ключ API в HTTP-заголовок Authorization следующим образом:

bash
Authorization: Bearer OPENAI_API_KEY

Организации и проекты (опционально) ​

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

Чтобы получить доступ к проекту по умолчанию в организации, оставьте заголовок OpenAI-Project пустым.

Пример команды curl:

bash
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "OpenAI-Organization: YOUR_ORG_ID" \
  -H "OpenAI-Project: $PROJECT_ID"

Пример с пакетом openai для Python:

python
from openai import OpenAI

client = OpenAI(
  organization='YOUR_ORG_ID',
  project='$PROJECT_ID',
)

Пример с пакетом openai для Node.js:

js
import OpenAI from "openai";

const openai = new OpenAI({
    organization: "YOUR_ORG_ID",
    project: "$PROJECT_ID",
});

Идентификаторы организаций можно найти на странице настроек вашей организации. Идентификаторы проектов можно найти на странице общих настроек, выбрав конкретный проект.

Выполнение запросов ​

Вы можете вставить следующую команду в терминал, чтобы выполнить ваш первый API-запрос. Убедитесь, что заменили $OPENAI_API_KEY вашим секретным API ключом. Если вы используете устаревший ключ пользователя и у вас несколько проектов, вам также нужно указать Идентификатор проекта. Для повышения безопасности рекомендуется переходить на ключи, основанные на проектах.

bash
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
     "model": "gpt-4o-mini",
     "messages": [{"role": "user", "content": "Say this is a test!"}],
     "temperature": 0.7
   }'

Этот запрос запрашивает модель gpt-4o-mini (которая в реальности представляет собой вариант модели gpt-4o-mini), чтобы завершить текст, начиная с подсказки "Say this is a test". В ответ вы должны получить нечто вроде следующего:

json
{
    "id": "chatcmpl-abc123",
    "object": "chat.completion",
    "created": 1677858242,
    "model": "gpt-4o-mini",
    "usage": {
        "prompt_tokens": 13,
        "completion_tokens": 7,
        "total_tokens": 20,
        "completion_tokens_details": {
            "reasoning_tokens": 0,
            "accepted_prediction_tokens": 0,
            "rejected_prediction_tokens": 0
        }
    },
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "\n\nThis is a test!"
            },
            "logprobs": null,
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

Теперь, когда вы сгенерировали ваше первое завершение чата, давайте разберем объект ответа. Мы можем увидеть, что finish_reason — это "stop", что означает, что API вернул полное завершение чата, сгенерированное моделью, не натолкнувшись на какие-либо ограничения. В списке choices мы сгенерировали только одно сообщение, но вы можете установить параметр n, чтобы сгенерировать несколько вариантов сообщений.

Потоковая передача ​

OpenAI API предоставляет возможность потоковой передачи ответов обратно клиенту для получения частичных результатов для некоторых запросов. Чтобы сделать это, мы следуем стандарту Server-sent events. Наши официальные библиотеки Node и Python включают функции, упрощающие разбор этих событий.

Стриминг поддерживается как для API завершений чата, так и для API ассистентов. В этом разделе основное внимание уделяется работе потоковой передачи для завершений чата. Узнайте больше о том, как работает потоковая передача в API ассистентов здесь.

Запрос на стриминг выглядит так:

python
from openai import OpenAI

client = OpenAI()

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Say this is a test"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")
js
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
    const stream = await openai.chat.completions.create({
        model: "gpt-4o-mini",
        messages: [{ role: "user", content: "Say this is a test" }],
        stream: true,
    });
    for await (const chunk of stream) {
        process.stdout.write(chunk.choices[0]?.delta?.content || "");
    }
}

main();

Разбор событий, отправленных сервером ​

Разбор событий, отправленных сервером, непростой и должен выполняться с осторожностью. Простые стратегии, такие как разделение по новой строке, могут привести к ошибкам разбора. Мы рекомендуем использовать существующие клиентские библиотеки, когда это возможно.

Отладка запросов ​

Помимо кодов ошибок, возвращаемых в ответах API, иногда может потребоваться проверить заголовки ответа HTTP. Особенно интересными будут заголовки, содержащие уникальный идентификатор конкретного API-запроса и информацию об ограничении скорости, применяемом к вашим запросам. Ниже приведен неполный список HTTP-заголовков, возвращаемых с ответами API:

Информация о метаданных API ​

  • openai-organization: Организация, связанная с запросом
  • openai-processing-ms: Время обработки вашего API запроса
  • openai-version: Версия REST API, использованная для этого запроса (в настоящее время 2020-10-01)
  • x-request-id: Уникальный идентификатор для этого API-запроса (используется при отладке)

Информация об ограничении скорости ​

  • x-ratelimit-limit-requests
  • x-ratelimit-limit-tokens
  • x-ratelimit-remaining-requests
  • x-ratelimit-remaining-tokens
  • x-ratelimit-reset-requests
  • x-ratelimit-reset-tokens

OpenAI рекомендует регистрировать идентификаторы запросов в производственных развертываниях, что позволит более эффективно устранять неполадки с нашей службой поддержки в случае необходимости. Наши официальные SDK предоставляют свойство на уровне объектов ответа, содержащее значение заголовка x-request-id.

Идентификатор запроса в Python ​

python
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    messages=[{
        "role": "user",
        "content": "Say this is a test",
    }],
    model="gpt-4o-mini",
)

print(response._request_id)

Идентификатор запроса в JavaScript ​

js
import OpenAI from 'openai';
const client = new OpenAI();

const response = await client.chat.completions.create({
    messages: [{ role: 'user', content: 'Say this is a test' }],
    model: 'gpt-4o-mini'
});

console.log(response._request_id);

Доступ к необработанным объектам ответов в SDK ​

Если вы используете низкоуровневый HTTP-клиент (например, fetch или HttpClient в C#), у вас уже должен быть доступ к заголовкам ответов как часть интерфейса HTTP.

Если вы используете один из официальных SDK OpenAI (которые в значительной степени абстрагируют цикл HTTP-запроса/ответа), вам нужно будет получить доступ к необработанным HTTP-ответам немного иначе.

Ниже приведен пример доступа к необработанному объекту ответа (и заголовку x-ratelimit-limit-tokens) с использованием нашего SDK для Python.

python
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.with_raw_response.create(
    messages=[{
        "role": "user",
        "content": "Say this is a test",
    }],
    model="gpt-4o-mini",
)
print(response.headers.get('x-ratelimit-limit-tokens'))

# получить объект, который `chat.completions.create()` вернет
completion = response.parse()
print(completion)

Вот как вы получите доступ к необработанному ответу (и заголовку x-ratelimit-limit-tokens) с использованием нашего SDK для JavaScript.

js
import OpenAI from 'openai';
const client = new OpenAI();

const response = await client.chat.completions.create({
    messages: [{ role: 'user', content: 'Say this is a test' }],
    model: 'gpt-4o-mini'
}).asResponse();

// доступ к объекту Response
console.log(response.headers.get('x-ratelimit-limit-tokens'));

Создано при поддержке AITUNNEL