第 1 课
开通百炼跑通 qwen3.8-max:curl、Python、Node.js、报错与计费
开通百炼、创建 API Key 并拿到业务空间 ID,用 curl、Python、Node.js 各调一次 qwen3.8-max,用假 Key 复现 401 报错,并按 usage 和官方单价算出一次调用的费用。
课程目录第 1 / 3 课
学习位置仅保存在当前浏览器,有效期 180 天。
图文教材
本课依据:阿里云百炼官方文档「首次调用千问API」https://help.aliyun.com/zh/model-studio/first-api-call-to-qwen 、「获取与配置 API Key」https://help.aliyun.com/zh/model-studio/get-api-key 、「模型调用价格」https://help.aliyun.com/zh/model-studio/model-pricing 、「错误码」https://help.aliyun.com/zh/model-studio/error-code (2026-10-24 核对)。
这一课做完你会得到什么
一个阿里云百炼 API Key 和业务空间 ID,以及分别用 curl、Python、Node.js 写成、都能调通 qwen3.8-max 的最小程序。你还会亲手触发一次 401 报错,并学会按 usage 估算一次调用的费用。
先认清本课用到的三个模型
百炼「模型调用价格」页华北 2(北京)地域的标价(每百万 Token,人民币):
| 模型 ID | 单次输入范围 | 输入 / 输出 |
|---|---|---|
qwen3.8-max | 0 < Token ≤ 1M | 12 元 / 36 元 |
qwen3.8-flash | 0 < Token ≤ 1M | 0.8 元 / 2.7 元 |
qwen3.7-plus | 0 < Token ≤ 256K | 原价 2 元 / 8 元,限时 8 折 |
三点要记住:
- 上面三个模型在北京地域各有 100 万 Token 免费额度,有效期 90 天(从开通百炼或模型发布之日起算,以较晚者为准);其他地域没有免费额度。
- 支持 Batch 调用的模型,输入和输出都按实时价格的 50% 计费;支持上下文缓存的模型,只有输入 Token 打折。两种优惠不能叠加。
qwen3.8-max与qwen3.8-flash都同时支持思考和非思考模式,思维链 Token 按输出计费。第 2 课会讲怎么控制它。
第 1 步:开通百炼并创建 API Key
- 没有阿里云账号的先注册。用阿里云主账号打开百炼控制台 https://bailian.console.aliyun.com/ ,阅读并同意协议后会自动开通。如果提示「您尚未进行实名认证」,先完成实名认证。
- 在控制台的 API Key 页面点「创建 API Key」。创建时不用选模型,调用时在请求体的
model参数里指定。如果想限制这个 Key 能调哪些模型,创建时选「自定义」权限,并打开「访问模型范围」。 - 在「业务空间管理」页面复制业务空间 ID(WorkspaceId)。使用华北 2(北京)、新加坡、日本(东京)、德国(法兰克福)、中国香港地域的模型时,Base URL 里必须带上它。
- 记住 Key 属于哪个地域。各地域的 API Key 不通用,本课全部使用华北 2(北京)。
第 2 步:把 Key 和业务空间 ID 放进环境变量
官方建议把 Key 放在环境变量 DASHSCOPE_API_KEY 里,不要写进代码。为了不在每段代码里手改 URL,本课另外用 WORKSPACE_ID 保存业务空间 ID。这个变量名是本课自己定的,不是官方变量。
macOS / Linux(临时生效,只对当前终端有效):
export DASHSCOPE_API_KEY="你的百炼API_KEY"
export WORKSPACE_ID="你的业务空间ID"
echo $DASHSCOPE_API_KEY
想让新开的终端也生效,就把这两行 export 追加到 ~/.bashrc(macOS 默认是 ~/.zshrc),再执行 source ~/.bashrc。
Windows PowerShell(当前窗口生效):
$env:DASHSCOPE_API_KEY = "你的百炼API_KEY"
$env:WORKSPACE_ID = "你的业务空间ID"
拼出来的北京地域 OpenAI 兼容 Base URL 形如:
https://你的业务空间ID.cn-beijing.maas.aliyuncs.com/compatible-mode/v1
第 3 步:用 curl 发出第一个请求
curl -X POST \
"https://${WORKSPACE_ID}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"}
]
}'
对照结果(官方文档示例响应,id 与 created 每次不同):
{
"choices": [
{
"message": {
"role": "assistant",
"content": "我是来自阿里云的大规模语言模型,我叫千问。"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {"prompt_tokens": 22, "completion_tokens": 16, "total_tokens": 38},
"created": 1728353155,
"system_fingerprint": null,
"model": "qwen3.8-max",
"id": "chatcmpl-39799876-eda8-9527-9e14-2214d641cf9a"
}
第 4 步:Python 版
需要 Python 3.9 或更高版本。先安装 OpenAI SDK:
pip install -U openai
新建 hello_qwen.py:
import os
from openai import OpenAI
workspace = os.getenv("WORKSPACE_ID")
try:
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 华北2(北京)地域;其他地域的 URL 不同
base_url=f"https://{workspace}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"},
],
)
print(completion.choices[0].message.content)
except Exception as e:
print(f"错误信息:{e}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/error-code")
运行 python3 hello_qwen.py,对照结果(官方示例,措辞每次可能略有不同):
我是阿里云开发的一款超大规模语言模型,我叫千问。
第 5 步:Node.js 版
npm install --save openai
新建 hello_qwen.mjs:
import OpenAI from "openai";
const workspace = process.env.WORKSPACE_ID;
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: `https://${workspace}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1`,
});
const completion = await openai.chat.completions.create({
model: "qwen3.8-max",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "你是谁?" },
],
});
console.log(completion.choices[0].message.content);
运行 node hello_qwen.mjs,输出应与 Python 版类似。
第 6 步:故意触发一次 401,认识最常见的报错
把 Key 换成一个假的,再跑一次 curl:
curl -s -X POST \
"https://${WORKSPACE_ID}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions" \
-H "Authorization: Bearer sk-not-a-real-key" \
-H "Content-Type: application/json" \
-d '{"model": "qwen3.8-max", "messages": [{"role": "user", "content": "你是谁?"}]}'
2026-10-24 实测返回 HTTP 401(id 每次不同):
{
"error": {
"message": "Invalid API-key provided. For details, see: ...",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
官方错误码文档列出的两种提示 Invalid API-key provided. 与 Incorrect API key provided. 都表示 Key 填错了。最常见的三个原因:
- 把 Key 当成变量名传给
os.getenv("sk-xxx")。正确写法是os.getenv("DASHSCOPE_API_KEY")。 - Key 与地域不匹配,例如拿新加坡的 Key 调北京的 URL。
- 环境变量是在别的终端窗口里设的,当前窗口没生效。可以先
echo $DASHSCOPE_API_KEY检查一下。
第 7 步:按 usage 估算一次调用的费用
费用 = 输入 Token × 输入单价 + 输出 Token × 输出单价。拿第 3 步的示例响应算(qwen3.8-max,输入 22、输出 16):
输入:22 ÷ 1,000,000 × 12 元 = 0.000264 元
输出:16 ÷ 1,000,000 × 36 元 = 0.000576 元
合计:约 0.00084 元
同样的请求如果换成 qwen3.8-flash,单价分别是 0.8 元和 2.7 元,费用大约是原来的十三分之一。开着思考模式时,思维链 Token 计入 completion_tokens,也按输出单价收费。在免费额度用完之前,这些 Token 都先从额度里扣。
自查清单
echo $DASHSCOPE_API_KEY和echo $WORKSPACE_ID都有值- curl、Python、Node.js 三种方式都返回了千问的自我介绍
- 用假 Key 能稳定复现 401
invalid_api_key - 你能用
usage里的数字自己算出一次调用的费用
