Текстовая генерация Chat Completions
Один OpenAI-совместимый эндпоинт даёт доступ к 301 моделям — GPT, Claude, Gemini, DeepSeek, Qwen, Kimi и другим. Диалоги, генерация и анализ текста, ролевые сценарии, код, извлечение данных — всё через единый ключ и формат запроса.
Эндпоинт
| Метод | 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-4o → deepseek-chat → claude-sonnet-4-6 → gemini-3-pro-preview)
— код многоходового диалога не меняется.
Основные параметры
| Параметр | Тип | Описание |
|---|---|---|
model | string | Обязательный. Имя модели — см. Каталог. |
messages | array | Обязательный. Массив сообщений диалога. |
temperature | 0.0–2.0 | Случайность вывода. 0–0.3 — факты/код, 0.7–1.0 — диалог, 1.0–2.0 — креатив. По умолчанию 1.0. |
top_p | 0.0–1.0 | Nucleus-сэмплинг. Регулируйте либо temperature, либо top_p — не оба сразу. |
max_tokens | integer | Лимит длины ответа — контроль стоимости и объёма. |
stream | boolean | Потоковая выдача токен за токеном — см. Стриминг. |
response_format | object | {"type": "json_object"} — заставляет модель вернуть валидный JSON. |
reasoning_effort | string | Глубина рассуждения для reasoning-моделей (gpt-5/o-series, Claude и т.п.): minimal / low / medium / high. В Студии — выпадающий список рядом с моделью. |
Рассуждающие модели и веб-поиск
- Глубина рассуждения. У reasoning-моделей управляйте «бюджетом размышления» параметром
reasoning_effort(minimal/low/medium/high). Для обычных моделей он не нужен — оставьте «авто». - Kimi K2.5. Режим Thinking включается отдельно:
"enable_thinking": trueв теле запроса (по умолчанию — быстрый Instant). Подробнее — на странице Kimi K2.5. - Веб-поиск. В OpenAI-совместимом режиме
/v1/chat/completionsонлайн-поиск не выполняется — модель отвечает по обучающим данным. Для актуальных данных подайте контекст сами (через RAG) или используйте специализированные каналы.
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 | Сработала модерация контента. |
Лучшие практики
- Чёткий промпт. Укажите задачу, формат, длину и тон. Дайте 1–2 примера «вход → выход».
- Контроль стоимости. Ставьте
max_tokens, выбирайте экономную модель, обрезайте старую историю диалога. - Память диалога. Храните историю на стороне приложения и передавайте в
messages. - Обработка ошибок. Делайте retry с экспоненциальной задержкой на
5xxи таймауты.