Разработка · проверено 2 августа 2026 г. · 12 минут

Responses API на TypeScript, Python и Kotlin

Responses API объединяет текстовый ввод, structured outputs, инструменты и продолжение диалога в одном endpoint. Через Celestria Gate используется тот же основной формат, а примеры ниже обращаются к https://api.celestriagate.com/v1/responses.

TypeScript

Установите пакет openai, передайте ключ только через окружение и читайте готовый текст из output_text.

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.CELESTRIA_API_KEY,
  baseURL: "https://api.celestriagate.com/v1",
});

const response = await client.responses.create({
  model: "gpt-5.6-terra",
  input: "Составь три пункта плана запуска API",
  reasoning: { effort: "low" },
});

console.log(response.output_text);

Python

В Python укажите base_url с подчёркиванием. Не передавайте ключ в исходном коде или notebook, который может попасть в общий доступ.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["CELESTRIA_API_KEY"],
    base_url="https://api.celestriagate.com/v1",
)

response = client.responses.create(
    model="gpt-5.6-terra",
    input="Составь три пункта плана запуска API",
    reasoning={"effort": "low"},
)

print(response.output_text)

Kotlin

Для backend на Kotlin достаточно обычного HTTP-клиента. Здесь используется OkHttp и kotlinx.serialization-подобная JSON-строка без зависимости от неофициального SDK.

val body = """{
  "model": "gpt-5.6-terra",
  "input": "Составь три пункта плана запуска API",
  "reasoning": { "effort": "low" }
}""".toRequestBody("application/json".toMediaType())

val request = Request.Builder()
  .url("https://api.celestriagate.com/v1/responses")
  .header("Authorization", "Bearer ${System.getenv("CELESTRIA_API_KEY")}")
  .post(body)
  .build()

OkHttpClient().newCall(request).execute().use { response ->
  check(response.isSuccessful) { "HTTP ${response.code}" }
  println(response.body?.string())
}

Production-паттерны

  • Для streaming разбирайте SSE-события и завершайте поток по response.completed.
  • Для строгого JSON используйте text.format с JSON Schema, а не парсинг произвольного текста.
  • Для продолжения передавайте previous_response_id и не теряйте tool outputs.
  • Ставьте сетевой timeout выше ожидаемого времени reasoning, но ограничивайте его.
  • Возвращайте пользователю безопасную ошибку, а request ID сохраняйте в технический лог.

Частые вопросы

Responses API заменяет Chat Completions?

Для новых reasoning, tool-calling и многошаговых сценариев Responses API предпочтительнее. Chat Completions остаётся полезным для совместимости с существующими приложениями.

Можно ли использовать streaming?

Да. Передайте stream: true и обрабатывайте SSE-события. Не рассчитывайте, что каждое событие содержит готовую строку ответа.

Где хранить API-ключ?

Только на серверной стороне: в переменной окружения, vault или секрете платформы деплоя. Мобильный и браузерный клиент должен обращаться к вашему backend.

Источники

Канонический адрес материала · Получить API-ключ