HiAPI
ブログ

チュートリアル

hiapi API で deepseek-v4.1-flash を使う方法:curl、Python および利用可能なリクエスト例

Sep 9, 2026
hiapi API で deepseek-v4.1-flash を使う方法:curl、Python および利用可能なリクエスト例

deepseek-v4.1-flash は、hiapi の統合 API 経由で呼び出せる高速かつ低コストな推論モデルです。現在、モデルページではプレビュー版(Preview)と表示されています。これは基盤となるビルドがローテーションされる可能性がある一方で、公開されているモデル ID(deepseek-v4.1-flash)は安定していることを意味します。ローテーションが発生してもコードを変更する必要はありません。本ガイドでは、実際に動作するリクエストを紹介します。正しいエンドポイント、正しいフィールド、正しい認証ヘッダーです。

前提条件

  • hiapi の API キー(sk-...)。hiapi コンソールから取得し、エクスポートしてください:
export HIAPI_API_KEY="sk-your-key-here"
  • 任意の HTTP クライアントで構いません。以下の例では curl と Python の requests を使用し、公式 OpenAI SDK を使う場合の説明も添えています。

最小限の動作例

hiapi は 2 つのテキストエンドポイントを提供しています。/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 上のプレビュー版モデルにおける想定された動作であり、モデルがまもなく廃止されることを示すものではありません。引き続き素の deepseek-v4.1-flash ID をリクエストすれば、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 です。hiapi 上の他の推論モデルで使われている low/medium/high の段階とは異なるため、そのまま当てはめられると考えないでください。

{
  "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 を渡すと、単一の JSON ブロックではなく Server-Sent Events が得られます。/v1/responses がストリーミングするのはセマンティックなイベントであり、Chat-Completions 形式の [DONE] マーカーで包まれた生のテキスト差分ではありません。正常に完了する場合のイベントシーケンスは次のとおりです:

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 のような値が表示されます。それは現在 deepseek-v4.1-flash ID の下でリクエストを処理している特定の固定ビルドです。これはプレビュー版モデルにおける想定された動作であり、エラーではありません。

/v1/responses の代わりに /v1/chat/completions を使えますか? はい、hiapi はこのモデルについて両方をサポートしています。/v1/chat/completions は OpenAI Chat Completions のリクエスト/レスポンス形式(messages 配列、choices[0].message.content)を使用し、/v1/responses の input/output 形式とは異なります。既存の統合に合う方を選択してください。新規の統合では /v1/responses をデフォルトで使用すべきです。

hiapi は会話履歴を保存し、最新のメッセージだけを送ればよいようになりますか? いいえ。このモデルには previous_response_id やサーバー側の会話状態はありません。リクエストのたびに input に完全なメッセージ履歴を送信してください。

reasoning.effort: "none" は実際に何をスキップしますか? モデルの内部推論プロセスを完全にスキップし、直接回答します。多段階の推論が有効なタスク(数学、複数制約の論理)では "high" または "max" を使用してください。強度が高いほど、出力トークン使用量とレイテンシも相応に増加します。

ストリーミングリクエストと非ストリーミングリクエストで別々の API キーが必要ですか? いいえ。同じ Authorization: Bearer sk-... キーが両方に使えます。ストリーミングはリクエストボディの "stream": true フィールドだけで制御されます。

永続的なAIアーティファクトで開発を始める

APIキーを取得して、タスクベースの1つのAPIで画像・動画・音声モデルを呼び出せます。

APIドキュメントを読む