Текстовая генерация Chat Completions

Один OpenAI-совместимый эндпоинт даёт доступ к 301 моделям — GPT, Claude, Gemini, DeepSeek, Qwen, Kimi и другим. Диалоги, генерация и анализ текста, ролевые сценарии, код, извлечение данных — всё через единый ключ и формат запроса.

Без кода — в Студии. Любую текстовую модель можно протестировать прямо в браузере во вкладке Чат ИИ-Студии: вставьте имя модели, задайте вопрос, при желании прикрепите изображение (vision). Диалоги сохраняются на сервере.

Эндпоинт

МетодPOST https://megaapi.ru/v1/chat/completions
АвторизацияAuthorization: Bearer sk-... (ваш ключ из кабинета)
ФорматOpenAI Chat Completions — совместим с openai-python, openai-node, LangChain и др.

Быстрый старт

# pip install openai
from openai import OpenAI

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

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "Расскажи об истории искусственного интеллекта"}
    ],
)

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

cURL

curl https://megaapi.ru/v1/chat/completions \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

Многоходовой диалог и роли

Контекст передаётся массивом messages. Каждое сообщение имеет роль и содержимое:

РольНазначение
systemСистемный промпт: задаёт поведение, роль и стиль ассистента.
userСообщение пользователя.
assistantПредыдущий ответ модели — для сохранения истории диалога.
messages = [
    {"role": "system", "content": "Ты — профессиональный ассистент по Python."},
    {"role": "user", "content": "Как прочитать CSV-файл?"},
    {"role": "assistant", "content": "Используйте pandas.read_csv()..."},
    {"role": "user", "content": "А как отфильтровать колонки?"}
]

Память диалога: как это работает

Модель не имеет памяти — она не помнит предыдущие реплики. «Многоходовой диалог» означает, что вы сами передаёте полную историю в каждом запросе. На каждом шаге добавляйте в конец массива messages и вопрос пользователя, и предыдущий ответ ассистента, после чего отправляете весь массив целиком:

Шаг 1: отправили [вопрос1]                              → получили [ответ1]
Шаг 2: отправили [вопрос1, ответ1, вопрос2]             → получили [ответ2]
Шаг 3: отправили [вопрос1, ответ1, вопрос2, ответ2, …]  → получили [ответ3]
Ведите историю на своей стороне Не полагайтесь на серверное состояние сессии (например, previous_response_id из Responses API). При проксировании через шлюз такие механизмы не гарантируются — всегда храните историю в своём приложении и присылайте её заново каждым запросом.
Не возвращайте reasoning_content в историю У рассуждающих моделей в ответе есть поле reasoning_content (ход размышления). В историю кладите только content финального ответа — возврат «мыслей» зря тратит токены и у части моделей приводит к ошибке 400:
messages.append({"role": "assistant",
                 "content": resp.choices[0].message.content})
# reasoning_content в историю НЕ добавляем
Одна реализация — все модели Логика ведения истории одинакова для всех моделей. Поменяйте параметр model (gpt-4odeepseek-chatclaude-sonnet-4-6gemini-3-pro-preview) — код многоходового диалога не меняется.

Основные параметры

ПараметрТипОписание
modelstringОбязательный. Имя модели — см. Каталог.
messagesarrayОбязательный. Массив сообщений диалога.
temperature0.0–2.0Случайность вывода. 0–0.3 — факты/код, 0.7–1.0 — диалог, 1.0–2.0 — креатив. По умолчанию 1.0.
top_p0.0–1.0Nucleus-сэмплинг. Регулируйте либо temperature, либо top_p — не оба сразу.
max_tokensintegerЛимит длины ответа — контроль стоимости и объёма.
streambooleanПотоковая выдача токен за токеном — см. Стриминг.
response_formatobject{"type": "json_object"} — заставляет модель вернуть валидный JSON.
reasoning_effortstringГлубина рассуждения для reasoning-моделей (gpt-5/o-series, Claude и т.п.): minimal / low / medium / high. В Студии — выпадающий список рядом с моделью.

Рассуждающие модели и веб-поиск

JSON-режим (структурированный вывод)

Многие модели умеют возвращать строго JSON — удобно для извлечения данных:

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "Ты — экстрактор данных. Всегда отвечай в формате JSON."},
        {"role": "user", "content": "Извлеки: Иван, мужчина, 30 лет, инженер"}
    ],
    response_format={"type": "json_object"},
)

Потоковая выдача

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Напиши статью об ИИ"}],
    stream=True,
)
for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Какую модель выбрать

ЗадачаРекомендуемые модели
Повседневный диалогgpt-4o-mini, deepseek-chat, qwen3.6-flash — дёшево и быстро
Сложные рассужденияgpt-4o, claude-opus-4-8, gemini-3-pro-preview
Генерация кодаclaude-sonnet-4-6, qwen3.6-max-preview, kimi-k2.5
Креатив и текстыclaude-opus-4-8, gpt-4o
Переводgemini-3-pro-preview, gpt-4o

Почему ответ обрывается

Проверяйте поле finish_reason в ответе:

stopНормальное завершение.
lengthДостигнут max_tokens — увеличьте лимит.
content_filterСработала модерация контента.

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

Открыть в Студии → Полный справочник API Все модели