Руководство
Как использовать 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и Pythonrequests, а также приведены указания по использованию официального 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
- Справочник по
/v1/responses - Справочник по
/v1/chat/completions - Аутентификация
- Цены
Часто задаваемые вопросы
Можно ли использовать 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 в теле запроса.
Похожие статьи
Все статьи →-
Руководство
Как вызвать hailuo-2.3-fast/image-to-video через HiAPI API: практика с curl и Python
Первый рабочий запрос к быстрому и недорогому уровню генерации видео по изображению — от ID модели до загрузки MP4
-
Руководство
Как вызывать hailuo-2.3/text-to-video через API HiAPI: curl, Python и рабочие примеры запросов
-
Руководство
Использование Kandinsky 6.0 Pro для преобразования текста в видео на HiAPI: руководство по curl и Python
Практическая демонстрация с упором на запросы: построение вызова от промпта до видеоклипа, отправка запроса, опрос статуса завершения и скачивание результата