HiAPI
Блог

Руководство

Как использовать deepseek-v4.1-flash через hiapi API: curl, Python и рабочие примеры запросов

Sep 9, 2026
Как использовать deepseek-v4.1-flash через hiapi API: curl, Python и рабочие примеры запросов

deepseek-v4.1-flash — это быстрая и недорогая модель рассуждений, доступная через единый API hiapi. Сейчас на странице модели она помечена как Preview (предварительная версия), что означает, что базовая сборка может меняться, а публичный ID модели (deepseek-v4.1-flash) остаётся стабильным — при смене сборки вам не нужно менять код. В этом руководстве показан реально работающий запрос: правильный эндпоинт, правильные поля, правильные заголовки аутентификации.

Предварительные требования

  • Ключ API hiapi (sk-...). Получите его в консоли hiapi и экспортируйте:
export HIAPI_API_KEY="sk-your-key-here"
  • Подойдёт любой HTTP-клиент. В примерах ниже используются curl и Python requests, а также приведены указания по использованию официального OpenAI SDK.

Минимальный рабочий пример

hiapi предоставляет два текстовых эндпоинта. /v1/responses — канонический рекомендуемый эндпоинт (форма OpenAI Responses API, семантические SSE-события). /v1/chat/completions — совместимый с прежними версиями эндпоинт (форма OpenAI Chat Completions) — используйте его только при переносе существующей интеграции Chat Completions. В этом руководстве используется /v1/responses.

curl

curl https://api.hiapi.ai/v1/responses \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "input": [
      {"role": "user", "content": "Explain what a hash map is in two sentences."}
    ]
  }'

Успешный ответ возвращает массив output, содержащий ответ модели, и блок usage:

{
  "id": "resp_...",
  "model": "deepseek-v4.1-flash-expires-on-0910",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {"type": "output_text", "text": "A hash map stores key-value pairs..."}
      ]
    }
  ],
  "usage": {
    "input_tokens": 14,
    "output_tokens": 42,
    "total_tokens": 56,
    "output_tokens_details": {"reasoning_tokens": 0}
  }
}

Обратите внимание, что поле model в ответе помечено как deepseek-v4.1-flash-expires-on-0910 — это текущая фиксированная внутренняя сборка, обслуживающая эту предварительную модель. Это ожидаемое поведение для предварительных моделей на hiapi, а не сигнал о скором выводе модели из эксплуатации; продолжайте запрашивать голый ID deepseek-v4.1-flash, и hiapi автоматически направит вас к текущей сборке.

Python

import os
import requests

resp = requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "input": [
            {"role": "user", "content": "Explain what a hash map is in two sentences."}
        ],
    },
    timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["output"][0]["content"][0]["text"])
print(data["usage"])

Использование OpenAI SDK

Эндпоинты hiapi /v1/responses и /v1/chat/completions совместимы с официальным OpenAI SDK — просто укажите base URL на hiapi и оставьте ID модели в виде голого имени:

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["HIAPI_API_KEY"],
    base_url="https://api.hiapi.ai/v1",
)
resp = client.responses.create(
    model="deepseek-v4.1-flash",
    input=[{"role": "user", "content": "Explain what a hash map is in two sentences."}],
)
print(resp.output[0].content[0].text)

Практика для производственной среды

Запросы не сохраняют состояние — необходимо повторно передавать полный диалог

hiapi не сохраняет состояние диалога на стороне сервера для этой модели. Каждый запрос должен содержать полную историю сообщений в input. Не отправляйте store, previous_response_id, conversation, background или context_management — они не поддерживаются и будут проигнорированы или отклонены. Для многоходовых диалогов самостоятельно добавляйте каждое новое сообщение user/assistant в массив input и отправляйте весь массив при каждом запросе.

history = [{"role": "user", "content": "What's a hash map?"}]
# ... call, get a reply, then append it and the next question ...
history.append({"role": "assistant", "content": "<model's previous reply>"})
history.append({"role": "user", "content": "How is that different from a hash set?"})

Интенсивность рассуждений

deepseek-v4.1-flash принимает объект reasoning, управляющий тем, сколько внутренних рассуждений модель выполняет перед ответом. Перечисление effort для этой модели — none | high | max — обратите внимание, что это не уровни low/medium/high, используемые некоторыми другими моделями рассуждений на hiapi, поэтому не предполагайте, что их можно применить напрямую.

{
  "model": "deepseek-v4.1-flash",
  "input": [{"role": "user", "content": "Prove that the square root of 2 is irrational."}],
  "reasoning": {"effort": "high"}
}

Токены рассуждений тарифицируются как выходные токены и отдельно указываются в usage.output_tokens_details.reasoning_tokens, поэтому запросы с интенсивностью high/max могут быть заметно дороже, чем с none, даже при одинаковой длине видимого ответа. Прежде чем устанавливать интенсивность по умолчанию для производственного трафика, проверьте текущие ставки за токен на странице цен.

Потоковая передача

Передайте "stream": true, чтобы получать Server-Sent Events вместо одного JSON-блока. /v1/responses передаёт в потоке семантические события, а не сырые текстовые дельты, обёрнутые в маркер [DONE] в стиле Chat-Completions. Последовательность событий при нормальном завершении:

response.created
response.in_progress
response.output_item.added
response.content_part.added
response.output_text.delta   (repeated, one per chunk of text)
response.output_text.done
response.content_part.done
response.output_item.done
response.completed

Считайте response.completed событием успешного завершения. Также обрабатывайте response.incomplete (например, при достижении ограничения токенов/длины) и response.failed (ошибка сервера) как терминальные состояния — не предполагайте, что каждый поток заканчивается response.completed.

import json
import requests

with requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "input": [{"role": "user", "content": "Count to 5."}],
        "stream": True,
    },
    stream=True,
    timeout=60,
) as r:
    for line in r.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":
            print(event["delta"], end="", flush=True)
        elif event.get("type") in ("response.completed", "response.incomplete", "response.failed"):
            break

Обработка ошибок

Недействительный или отсутствующий ключ API возвращает HTTP 401 со структурированным телом ошибки:

{"error": {"code": "permission_denied", "message": "..."}}

Проверяйте resp.status_code и обрабатывайте ветвление по error.code, а не разбирайте строку сообщения, поскольку формулировка сообщений может меняться без уведомления.

Связанная документация

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

Можно ли использовать deepseek-v4.1-flash в производственной среде или только для тестирования? Она помечена как предварительная версия, что на hiapi означает, что модель запущена и работает нормально, но базовая сборка может меняться по усмотрению hiapi. Публичный ID модели при смене не меняется — ваш код продолжит работать без изменений. Если вам нужны официальные обязательства, не связанные с предварительной версией, посмотрите непредварительные варианты DeepSeek v4 в списке моделей.

Почему в ответе указано имя модели, отличное от того, что я запрашивал? В поле model ответа вы увидите значение вроде deepseek-v4.1-flash-expires-on-0910. Это конкретная фиксированная сборка, которая сейчас обслуживает ваши запросы под ID deepseek-v4.1-flash — это ожидаемое поведение для предварительных моделей, а не ошибка.

Могу ли я использовать /v1/chat/completions вместо /v1/responses? Да, hiapi поддерживает оба эндпоинта для этой модели. /v1/chat/completions использует форму запроса/ответа OpenAI Chat Completions (массив messages, choices[0].message.content), а не форму input/output у /v1/responses. Выбирайте тот, который соответствует вашей текущей интеграции; новые интеграции должны по умолчанию использовать /v1/responses.

Сохраняет ли hiapi историю моего диалога, чтобы я мог отправлять только последнее сообщение? Нет. У этой модели нет previous_response_id или состояния диалога на стороне сервера — при каждом запросе отправляйте полную историю сообщений в input.

Что именно пропускает reasoning.effort: "none"? Он полностью пропускает внутренний процесс рассуждений модели и отвечает сразу. Для задач, выигрывающих от многошаговых рассуждений (математика, логика с множеством ограничений), используйте "high" или "max"; более высокая интенсивность соответственно увеличивает расход выходных токенов и задержку.

Нужны ли отдельные ключи API для потоковых и непотоковых запросов? Нет — один и тот же ключ Authorization: Bearer sk-... подходит для обоих. Потоковая передача полностью управляется полем "stream": true в теле запроса.

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

Все статьи →

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

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

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