通义千问
通过 HopBase 的 OpenAI 兼容 Chat Completions 接口调用通义千问 3.8 与 3.7 系模型。
通义千问走 HopBase 的 OpenAI 兼容协议。使用 https://api.hop-base.com/v1,鉴权头为 Authorization: Bearer sk-your-key,模型 ID 以 GET /v1/models 返回的精确写法为准。
模型
| 模型 ID | 上下文 | 图片与视频输入 |
|---|---|---|
qwen3.8-max | 1M | 支持 |
qwen3.8-flash | 1M | 支持 |
qwen3.7-max | 1M | 仅文本 |
qwen3.7-plus | 1M | 支持 |
qwen3.7-flash | 1M | 支持 |
五个型号都是 1,048,576 Token 上下文,单次最多 991,808 输入 Token 与 131,072 输出 Token。五个同属一个套餐分组,一把密钥全都能调。
端点
POST /v1/chat/completions 是支持的入口,流式正常可用。
流式要拿 usage 得显式订阅
客户端需要从流式响应里读 Token 用量时,请传 stream_options: { "include_usage": true }。不传也不影响计费准确性,只是那个 usage 块不会下发给客户端。
千问特有的请求字段,例如 enable_thinking、thinking_budget、enable_search,会原样透传给模型——HopBase 既不要求也不校验它们。函数调用与 JSON 模式的行为与官方接口一致。
网关会改动请求的两处
在千问上做长跑 Agent 之前,这两条要先知道。
| 行为 | 对请求的影响 |
|---|---|
| 消息历史守卫 | chat/completions 上,消息超过 26 条时只保留开头最多 2 条 system / developer 消息,加上最后 24 条,中间的会被丢弃 |
previous_response_id | 存在则剔除。请求会在多个账号间负载均衡,某个账号签发的 ID 在另一个账号上无效 |
历史守卫对 1M 上下文模型同样生效
长多轮会话是按消息条数截断的,不是按 Token 数。如果你的 Agent 依赖完整历史,请自己把历史压缩进更少的消息里,并把必须保留的内容放在前两条 system 消息中。
长输入请求
部分千问模型在单次请求的输入长度跨过阈值后会升档。
- 阈值看的是整个 prompt,缓存命中的部分与未命中的部分都算在内。
- 一旦跨过,整笔请求都按该档结算,不是只有超出阈值的那部分。
- 缓存帮不了你躲开阈值。缓存只影响命中部分适用哪个单价,不会让 prompt 在判档时变短。想留在低档,只能真的把单次输入写短。
哪些型号有阶梯、阈值在哪,以登录后的模型广场为准。
读 usage
completion_tokens 已经包含推理 Token,不要再加一遍。completion_tokens_details.reasoning_tokens 是输出的子集,只用于展示。
HopBase 的用量记录与响应体对输入的口径不同,对账时要注意:
| 字段 | 含义 |
|---|---|
响应体 prompt_tokens | 整个 prompt,含缓存命中部分 |
| 用量记录输入 Token | prompt 减去缓存命中部分 |
| 用量记录缓存输入 Token | 缓存命中的那部分,单列 |
也就是说,用量记录里的输入加缓存输入,等于响应体的 prompt_tokens。
curl
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": "用五条要点总结本季度的风险。" }]
}'错误处理
上游的 4xx 会透传给你,但厂商专有的错误码前缀会被剥掉,所以 message 文本可读但不稳定。分支逻辑请基于 HTTP 状态码与 code 字段,不要匹配 message 字符串。
分组里没有的模型名返回 404 model_not_found。模型 ID 是精确匹配,请从 GET /v1/models 读取,不要猜。
分组
通义千问有独立的套餐分组。千问密钥调不到其他系列,其他系列的密钥也调不到千问。万相 3.0 与快乐马视频模型虽然同属一家厂商,但也是另一个分组、另一把密钥。