HiAPI
Блог

Руководство

Как использовать gpt-6-astra через API hiapi: примеры запросов на curl и Python, готовые к запуску

Sep 7, 2026
Как использовать gpt-6-astra через API hiapi: примеры запросов на curl и Python, готовые к запуску

gpt-6-astra — это текстовая модель с возможностями рассуждения, уже доступная на hiapi и вызываемая через эндпоинт, совместимый с OpenAI: /v1/responses. В этом руководстве приведены готовые к запуску примеры запросов на curl и Python, одно неочевидное требование, на котором легко споткнуться (обязательно использовать потоковую передачу), а также практические шаблоны для продакшена перед запуском.

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

Скрипт, который отправляет подсказку в gpt-6-astra и читает ответ модели через потоковый ответ. Здесь нет ни опроса, ни идентификаторов задач — это синхронный чат-вызов, только доставляемый в виде Server-Sent Events, а не в виде блокирующего JSON-ответа.

Предварительные условия: ключ API hiapi. Получите его в консоли — каждый запрос ниже должен передавать его в заголовке Authorization.

Минимальный работающий пример

gpt-6-astra поддерживает только один эндпоинт — POST /v1/responses — и принимает только "stream": true. Независимо от того, что ещё есть в теле запроса, отправка "stream": false вернёт ошибку 400 invalid_request; у этой модели на hiapi нет непоточного режима. Проектируйте свой клиент вокруг чтения потока событий, а не вокруг одного JSON-ответа.

curl

curl -N -X POST "https://api.hiapi.ai/v1/responses" \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-astra",
    "input": [
      {
        "type": "message",
        "role": "user",
        "content": [
          { "type": "input_text", "text": "Explain one practical way to check an AI-generated answer against its source." }
        ]
      }
    ],
    "stream": true,
    "store": false,
    "reasoning": { "effort": "medium" }
  }'

-N отключает буферизацию вывода curl, поэтому вы увидите события сразу по мере их поступления, а не получите всё разом в конце. Тип ответа — text/event-stream, каждая строка data: представляет собой JSON-объект, а строка event: указывает его тип. Упрощённый результат запуска выглядит так:

event: response.created
data: {"type":"response.created","response":{"id":"resp_...","status":"in_progress", ...}}

event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":"OK", ...}

event: response.completed
data: {"type":"response.completed","response":{"status":"completed","usage":{"input_tokens":12,"output_tokens":5,"total_tokens":17}, ...}}

Нужный вам текст поступает потоком через повторяющиеся события response.output_text.delta — объедините поля delta по порядку, чтобы получить полный ответ. response.completed несёт финальный блок usage для отслеживания затрат.

Python

import json
import requests

payload = {
    "model": "gpt-6-astra",
    "input": [
        {
            "type": "message",
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "Explain one practical way to check an AI-generated answer against its source.",
                },
            ],
        },
    ],
    "stream": True,
    "store": False,
    "reasoning": {"effort": "medium"},
}

with requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": "Bearer sk-your-api-key",
        "Content-Type": "application/json",
    },
    json=payload,
    stream=True,
    timeout=60,
) as resp:
    resp.raise_for_status()
    answer = []
    for line in resp.iter_lines():
        if not line or not line.startswith(b"data: "):
            continue
        event = json.loads(line[len(b"data: "):])
        if event.get("type") == "response.output_text.delta":
            answer.append(event["delta"])
        elif event.get("type") == "response.completed":
            usage = event["response"]["usage"]
            print(f"\n\ntokens: {usage['input_tokens']} in / {usage['output_tokens']} out")

    print("".join(answer))

resp.raise_for_status() перехватывает сбои на уровне HTTP (аутентификация, ограничения скорости) ещё до того, как вы начнёте разбирать строки SSE — некорректный поток и отклонённый запрос — это два разных режима сбоя, и в обработке ошибок их нужно различать.

В теле запроса два поля заслуживают особого упоминания:

  • input — это массив объектов сообщений, а не плоская строка — каждый элемент требует type: "message", role и массив содержимого из типизированных частей (для простого текста — input_text).
  • reasoning.effort (low / medium / high) необязателен, но управляет тем, сколько внутренних рассуждений модель выполняет перед ответом. Если не задать его, hiapi применит значение по умолчанию; если вы балансируете между задержкой и качеством ответа, задайте его явно.

Замечания для продакшена

  • Потоковая передача не является опциональной. Не создавайте ветку кода, которая при повторной попытке откатывается к stream: false — для этой модели она будет отказывать каждый раз. Если ваш фреймворк или SDK предполагает единственный JSON-ответ, оберните приведённый выше цикл SSE и буферизуйте объединённый текст перед передачей дальше.
  • Сбои аутентификации однозначны. Недействительный или отозванный ключ возвращает HTTP 401 с "code": "permission_denied" в теле ошибки — проверяйте этот код, а не сопоставляйте строку сообщения по шаблону, поскольку строка может меняться.
  • store: false делает запрос не сохраняющим состояние. hiapi не сохраняет ответ на стороне сервера, поэтому в последующих вызовах нет previous_response_id для связывания. Если вам нужен многораундовый контекст, повторно отправляйте предыдущие раунды как дополнительные сообщения input, а не полагайтесь на состояние диалога на стороне сервера.
  • Устанавливайте клиентский таймаут независимо от потоковой передачи. Соединение SSE может зависнуть при разрыве связи, когда ни одна из сторон не отправила чистый сигнал закрытия; установка timeout на исходном requests.post (как в примере выше) предотвращает застревание на первом байте, но вам также следует отслеживать максимальную длительность потока в своём коде для эшелонированной защиты.
  • Повторно используйте prompt_cache_key для повторяющегося системного контекста. Тело ответа содержит prompt_cache_key; если вы отправляете одни и те же инструкции при каждом вызове, удержание запросов на одном и том же ключе позволяет hiapi применять кэширование подсказок вместо их повторной обработки каждый раз.

Связанные материалы

Часто задаваемые вопросы

Поддерживает ли gpt-6-astra /v1/chat/completions? Нет. Вызов через /v1/chat/completions вернёт ошибку 400 unsupported_endpoint с предложением использовать /v1/responses. На hiapi она зарегистрирована только для Responses API.

Могу ли я получить один JSON-ответ вместо потока? Для этой модели — нет. "stream": false отклоняется напрямую (invalid_request) независимо от того, заданы ли другие параметры. Стройте интеграцию вокруг потребления потока SSE и сборки итогового текста на клиенте, как показано выше.

Поддерживает ли gpt-6-astra вызов инструментов? Модель принимает массив tools в структуре запроса Responses API (если не задан, в объекте ответа он отображается как пустой массив). Если вы подключаете вызов функций, определяйте свои инструменты так же, как для любой модели, совместимой с OpenAI Responses API, и следите за событием response.output_item.added с типом function_call в потоке.

Как выглядят ошибки ограничения скорости или квоты? Как и другие ошибки hiapi, они возвращаются в формате JSON с type: "hiapi_error" и полем code, по которому можно ветвить обработку, а также request_id — при обращении в поддержку укажите этот ID, чтобы они могли отследить конкретный запрос на стороне сервера.

Могу ли я использовать ту же структуру запроса с другими моделями рассуждения на hiapi? Структура запроса /v1/responses является общей для семейств моделей hiapi, совместимых с OpenAI Responses — достаточно заменить поле model, чтобы переключить модель. Доступность зависит от модели, поэтому перед тем как предполагать, что какая-то модель уже доступна, проверьте её собственную страницу.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API