HiAPI
ブログ

チュートリアル

hiapi API で gpt-6-astra を使用する方法:curl、Python、実行可能なリクエスト例

Sep 7, 2026
hiapi API で gpt-6-astra を使用する方法:curl、Python、実行可能なリクエスト例

gpt-6-astra は推論能力を備えたテキストモデルで、現在 hiapi で利用可能になり、OpenAI 互換のエンドポイント /v1/responses を通じてアクセスできます。本ガイドでは、実行可能な curl と Python のリクエスト例、見落としやすい非自明な要件(ストリーミングが必須)、そして本番運用前に必要な実践的なパターンを紹介します。

構築するもの

gpt-6-astra にプロンプトを送信し、ストリーミング応答を通じてモデルの回答を読み取るスクリプトです。ここにはポーリングもタスク ID もありません。これは同期的なチャット形式の呼び出しですが、ブロッキングな JSON レスポンスではなく、Server-Sent Events の形式で配信されます。

前提条件:hiapi API キーが必要です。コンソール から取得してください。以下の各リクエストでは、Authorization ヘッダーにこれを含める必要があります。

最小の実行可能な例

gpt-6-astra は 1 つのエンドポイント 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() は、SSE 行の解析を開始する前に HTTP レベルの失敗(認証、レート制限)を捕捉します。不正な形式のストリームと拒否されたリクエストは異なる失敗モードであり、エラー処理でこれらを区別する必要があります。

リクエストペイロードで特に言及すべき 2 つのフィールドがあります:

  • input はメッセージオブジェクトの配列であり、フラットな文字列ではありません。各エントリには type: "message"、role、そして型付きのパーツからなる content 配列(プレーンテキストには 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 接続は、双方がクリーンなクローズ信号を送信しないまま接続が切断されるとハングする可能性があります。最初の requests.post に timeout を設定する(上記の例のように)と、ファーストバイトの停滞を防げますが、多層防御として、自身のコードで最大ストリーム持続時間を追跡する必要もあります。
  • 繰り返しのシステムコンテキストには 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 はツール呼び出しをサポートしていますか? このモデルは Responses API のリクエスト構造で tools 配列を受け付けます(未設定の場合はレスポンスオブジェクトで空の配列として表示されます)。関数呼び出しを組み込む場合は、OpenAI Responses API 互換の任意のモデルと同様にツールを定義し、ストリーム内で function_call 型の response.output_item.added イベントに注意してください。

レート制限やクォータエラーはどのような形ですか? 他の hiapi エラーと同様に、JSON 形式で返され、type: "hiapi_error" と、分岐処理に使用できる code フィールド、さらに request_id が含まれます。サポートに連絡する際はこの ID を含めてください。サーバー側で正確なリクエストを追跡できるようになります。

hiapi 上の他の推論モデルでも同じリクエスト構造を使用できますか? /v1/responses のリクエスト構造は、hiapi の OpenAI Responses 互換モデルファミリー間で共有されています。model フィールドを置き換えるだけでモデルを切り替えられます。可用性はモデルによって異なるため、あるモデルが利用可能だと想定する前に、そのモデル自身のページを確認してください。

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

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

APIドキュメントを読む