Разработка · проверено 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.