Qwen
OpenAI Chat Completions、OpenAI Responses、Anthropic Messages のいずれかで Qwen 3.8・3.7 系モデルを呼び出します。
| 項目 | 値 |
|---|---|
| Base URL | https://api.hop-base.com/v1 |
| チャット | POST /v1/chat/completions |
| Responses | POST /v1/responses |
| Anthropic Messages | POST /v1/messages |
Bearer キーで認証し、正確なモデル ID は GET /v1/models から取得します。/v1/messages では x-api-key ヘッダーも使えます。
curl https://api.hop-base.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [{
"role": "user",
"content": "Summarize this quarter'\''s risks in five bullets."
}]
}'モデル
| モデル ID | コンテキスト | 画像・動画入力 |
|---|---|---|
qwen3.8-max | 1M | 対応 |
qwen3.8-flash | 1M | 対応 |
qwen3.7-max | 1M | テキストのみ |
qwen3.7-plus | 1M | 対応 |
qwen3.7-flash | 1M | 対応 |
5 モデルすべてが 1,000,000 トークンのコンテキストウィンドウを持ち、1 リクエストあたり最大 131,072 トークンを出力できます。
5 モデルはすべて「通義千問(Qwen)3.8/3.7 シリーズ(Alibaba 公式)」プランに属し、1 つのキーですべてに到達できます。Qwen のキーはほかのファミリーに届かず、ほかのファミリーのキーも Qwen に届きません。Wan と HappyHorse の動画モデルはそれぞれ「Wan 3.0 公式」「HappyHorse 1.1 公式」プランで、キーも別に必要です。
エンドポイントとリクエストパラメータ
POST /v1/chat/completions、POST /v1/responses、POST /v1/messages は 5 モデルすべてで使え、どれもストリーミングが正常に動作します。Codex CLI など Responses しか話せないクライアントは直接接続でき、Claude Code も直接接続できます。詳しくは Claude Code と Anthropic Messages を参照してください。どちらも CC Switch のルーティングは不要です。
下表は POST /v1/chat/completions の場合です。ゲートウェイが拒否するのは空の messages だけです。Qwen 固有フィールドは検証せずそのまま渡し、ほかの制限はモデル側のものです。
| パラメータ | 必須 | 型と制限 | デフォルト | 説明 |
|---|---|---|---|---|
model | 必須 | 上表の 5 つの ID のいずれか | — | 完全一致 |
messages | 必須 | 空でない配列。画像の縦横は 10 px 超 | — | 画像・動画は上表のとおり |
max_tokens | 任意 | 整数、上限 131,072(公式上限) | サービス既定 | 出力の長さの上限 |
enable_thinking | 任意 | 真偽値 | サービス既定 | Qwen 固有、そのまま渡します |
thinking_budget | 任意 | 整数 | サービス既定 | reasoning_effort と同時指定不可 |
reasoning_effort | 任意 | low / high / max は実測で動作 | サービス既定 | thinking_budget と同時には使えません |
enable_search | 任意 | 真偽値 | サービス既定 | Qwen 固有、そのまま渡します |
tools、tool_choice | 任意 | OpenAI と同じ | auto | 思考モードでは制限あり(下記) |
response_format | 任意 | JSON モード。公式 API と同じ動作 | テキスト | {"type": "json_object"} で JSON を返します |
stream | 任意 | 真偽値 | false | true で SSE ストリーミングを返します |
stream_options.include_usage | 任意 | 真偽値 | false | ストリーミングで usage を受け取るには true |
messagesの欠落・空配列はゲートウェイが 400 を返します。thinking_budgetとreasoning_effortの同時指定は 400 です。- 思考モードでは
tool_choiceにrequiredや関数指定を使えず、400 になります。 response_formatを使う場合は、プロンプトでも JSON 出力を指示してください。stream_options.include_usageは課金に影響しません。/v1/responsesのコンテンツパートはinput_text、input_image、input_fileのみで、動画は受け付けません。動画入力は Chat Completions を使ってください。
qwen3.8-max の実測入力上限は 991,808 トークンで、超えると次のエラーになります(本番記録から引用)。
400 Range of input length should be [1, 991808]全パラメータは API リファレンス:Chat Completions で Qwen モデルファミリーを選んで確認してください。
ゲートウェイがリクエストに加える変更
Qwen 上で長時間稼働するエージェントを構築する前に知っておくべき書き換えが 2 つあります。
| 挙動 | リクエストへの影響 |
|---|---|
previous_response_id | 存在する場合は削除 |
store | false に固定 |
リクエストは複数アカウント間で分散され、あるアカウントで発行された ID は別のアカウントでは無効なため、previous_response_id は削除されます。毎ターン完全な input を送ってください。
Claude Code と Anthropic Messages
POST /v1/messages は 5 モデルすべてで標準の Anthropic Messages リクエストを受け付け、モデル自身の Anthropic 互換インターフェースにそのまま渡すため、Claude Code と Anthropic SDK から直接接続できます。SDK の Base URL は /v1 を付けずに https://api.hop-base.com とします。
CC Switch を使う場合は、コンソールでキーの ··· メニューを開き、CCS をインポート、続けて Claude Code を選びます。モデルはインポート時に設定されます。API 形式は既定の Anthropic のままにし、ローカルルーティングは不要です。手動で設定する場合:
export ANTHROPIC_BASE_URL="https://api.hop-base.com"
export ANTHROPIC_AUTH_TOKEN="sk-your-key"
export ANTHROPIC_MODEL="qwen3.8-max"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="qwen3.8-flash"
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000
claudeClaude Code はこれらの ID を知らないため、CLAUDE_CODE_MAX_CONTEXT_TOKENS で実際のコンテキストウィンドウを伝えます。指定しないと、Claude Code は 200K トークンで会話を圧縮します。その他のオプションは Claude Code にあります。
- 思考は
thinkingブロックで返り、output_tokensに含まれます。thinking: {"type": "disabled"}でオフにできます。 qwen3.7-maxはテキストのみで、画像を含むリクエストはモデルに届く前に400になります。ほかの 4 モデルは画像を読めます。- ツールの強制(
tool_choiceをanyまたはツール名指定にする)には思考をオフにする必要があります。思考オンではqwen3.8-max、qwen3.8-flash、qwen3.7-plusが400を返します。qwen3.7-maxとqwen3.7-flashは思考の有無にかかわらず強制を無視し、テキストで答えることがあります。 - 131,072 を超える
max_tokensは、3.7 系の 3 モデルでは400になり、3.8 系では拒否されません。 cache_controlのブレークポイントは送信前に取り除かれるため、明示的キャッシュは使えません。自動のプレフィックスキャッシュは通常どおり効きます。2026-10-03 の実測では、Claude Code の 2 ターン目以降はプロンプトの 89%–97% がキャッシュから読み込まれました。- Claude Code は毎回のリクエストに長いシステムプロンプトとツール一覧を付けて送り、実測では最初のメッセージより前に約 15,000 トークンありました。
qwen3.7-flashのように段階のしきい値が低いモデルでは、Claude Code のセッションが早い段階でしきい値を超えます。次のセクションを参照してください。
400 Range of max_tokens should be [1, 131072]
400 Model qwen3.7-max does not accept image input. Remove the image from the request, including earlier turns of the conversation, or use a model that supports images.
400 The tool_choice parameter does not support being set to required or object in thinking modeAnthropic Messages で突き合わせるときは、input_tokens はキャッシュ命中分を含まず、利用量レコードの「入力トークン」に対応します。cache_read_input_tokens は「キャッシュ入力トークン」に対応します。
課金と利用量
一部の Qwen モデルは、リクエストの入力が一定の長さのしきい値を超えると料金ティアが変わります。
- しきい値はプロンプト全体でカウントされ、キャッシュされた入力とされていない入力の両方を含みます。
- しきい値を超えると、超過分だけでなくリクエスト全体がそのティアになります。
- プロンプトキャッシュを使ってもしきい値は回避できません。キャッシュが変えるのはキャッシュ部分の単価だけで、ティア判定のプロンプト長は変わりません。
- しきい値以下に収める唯一の方法は、実際に短いプロンプトを送ることです。
どのモデルにティアが存在し、しきい値がどこにあるかは、ログイン後のモデルカタログに表示されます。
completion_tokens にはすでに推論トークンが含まれているため、重ねて加算しないでください。completion_tokens_details.reasoning_tokens は出力の一部であり、可視化のためだけに報告されます。
HopBase の利用量レコードとレスポンスボディでは、入力のカウント方法が異なります。突き合わせる際は注意してください。
| フィールド | 意味 |
|---|---|
レスポンスの prompt_tokens | キャッシュ命中分を含むプロンプト全体 |
| 利用量レコードの入力トークン | プロンプトから、キャッシュ命中分を差し引いたもの |
| 利用量レコードのキャッシュ入力トークン | キャッシュ命中分を別立てで表示したもの |
つまり、利用量レコードの入力トークンとキャッシュ入力トークンを足すと、レスポンスの prompt_tokens と一致します。
エラー処理
モデル自身が返す 4xx レスポンスは、ベンダー固有のエラーコードプレフィックスを取り除いた上でそのまま転送されます。message のテキストは人が読める内容ですが、文字列としては安定していません。分岐処理は HTTP ステータスと code フィールドで行い、メッセージ文字列には依存しないでください。
自分のプランに含まれないモデル名を指定すると 404 model_not_found が返ります。モデル ID は完全一致で判定されるため、推測せずに GET /v1/models から取得してください。
次のステップ
- OpenAI SDK:Chat Completions の一般的な書き方
- Codex CLI:Responses で直接接続
- Claude Code:Anthropic Messages で直接接続
- エラーコードと再試行
- 同時実行数、タイムアウト、課金