第 3 课
让 Claude Code 与 Qwen Code 接入百炼,再用上下文缓存省钱
先用 curl 验证 Anthropic 兼容端点,再用 settings.json 把 Claude Code 和 Qwen Code 接到百炼按量计费,最后用脚本观察显式缓存的创建与命中,并在缓存和 Batch 之间做选择。
课程目录第 3 / 3 课
学习位置仅保存在当前浏览器,有效期 180 天。
图文教材
本课依据:阿里云百炼官方文档「Anthropic兼容-Messages」https://help.aliyun.com/zh/model-studio/anthropic-api-messages 、「Claude Code」https://help.aliyun.com/zh/model-studio/claude-code 、「Qwen Code」https://help.aliyun.com/zh/model-studio/qwen-code 、「上下文缓存」https://help.aliyun.com/zh/model-studio/context-cache (2026-10-24 核对)。
这一课做完你会得到什么
用百炼的按量计费 API Key 接入两个终端编程 Agent:Claude Code 和 Qwen Code。你还会用一个脚本亲眼看到显式缓存从「创建」到「命中」,并搞清楚缓存和 Batch 两种省钱方式该怎么选。本课需要 Node.js 18 或更高版本。
第 1 步:先用 curl 验证 Anthropic 兼容端点
Claude Code 走的是 Anthropic Messages 协议。百炼北京地域的兼容地址是 https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic,鉴权头用 x-api-key:
curl -X POST \
"https://${WORKSPACE_ID}.cn-beijing.maas.aliyuncs.com/apps/anthropic/v1/messages" \
-H "Content-Type: application/json" \
-H "x-api-key: $DASHSCOPE_API_KEY" \
-d '{
"model": "qwen3.8-max",
"max_tokens": 1024,
"system": "You are a helpful assistant",
"messages": [{"role": "user", "content": "你是谁?"}],
"thinking": {"type": "disabled"}
}'
返回的是 Anthropic 格式的 JSON,回答文字在 content 数组里 type 为 text 的块中。这一步能通,说明 Key、业务空间 ID 和地域三者都对上了。
第 2 步:安装 Claude Code 并跳过官方登录
npm install -g @anthropic-ai/claude-code
claude --version
能输出版本号就说明安装成功。Windows 用户需要先装 WSL 或 Git for Windows,再在 WSL 或 Git Bash 里执行上面的命令。
编辑或新建 ~/.claude.json(Windows 路径为 C:\Users\<用户名>\.claude.json),跳过 Anthropic 官方登录:
{
"hasCompletedOnboarding": true
}
第 3 步:在 settings.json 里指向百炼
新建 ~/.claude/settings.json,写入百炼官方给出的按量计费配置。把 YOUR_API_KEY 换成你的百炼 API Key,{WorkspaceId} 换成你的业务空间 ID(这个文件里不能用环境变量,要写真实值):
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_BASE_URL": "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic",
"ANTHROPIC_MODEL": "qwen3.7-max",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "qwen3.6-flash",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "qwen3.7-max",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "qwen3.7-max",
"CLAUDE_CODE_SUBAGENT_MODEL": "qwen3.7-max"
}
}
这里的模型名与百炼官方文档的按量计费示例保持一致。想换成其他模型,可以在「Anthropic 兼容 API」支持的模型里挑,例如 qwen3.8-max。如果你以前用过旧接口 https://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy,官方建议按上面的配置迁移到新接口。
Claude Code 默认使用 200K 上下文。要处理大仓库时,可以在 env 里加上 "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000",或者在模型名后加 [1m] 后缀(例如 qwen3.7-plus[1m]),把上下文扩到 1M。前提是所用模型支持这个长度。
第 4 步:验证 Claude Code
保存配置后,新开一个终端窗口,进入任意项目目录执行:
claude "你好"
模型正常回复就说明配置成功。进入交互界面后输入 /status,确认 ANTHROPIC_BASE_URL 指向 maas.aliyuncs.com/apps/anthropic。第一次在自己的仓库里用时,建议以只读规划模式启动,避免误改文件:
claude --permission-mode plan
第 5 步:接入 Qwen Code
Qwen Code 是走 OpenAI 兼容协议的开源终端编程工具。官方安装脚本较长,这里拆成「下载」和「执行」两步,效果与官方一行命令相同(macOS / Linux):
curl -fsSL -o install-qwen.sh \
https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh
bash install-qwen.sh --source bailian
qwen --version
最省事的配置方式是:启动 qwen 后输入 /auth,依次选择「使用自己的 API Key」→「Standard API Key」,再选地域并粘贴百炼 API Key。
想手动管理配置的,可以编辑 ~/.qwen/settings.json。下面是官方的按量计费示例,同样要把 YOUR_API_KEY 和 {WorkspaceId} 换成真实值:
{
"env": {
"BAILIAN_API_KEY": "YOUR_API_KEY"
},
"modelProviders": {
"openai": [
{
"id": "qwen3.6-plus",
"name": "[Bailian] qwen3.6-plus",
"baseUrl": "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
"envKey": "BAILIAN_API_KEY",
"generationConfig": {
"extra_body": {
"enable_thinking": true
}
}
}
]
},
"security": {
"auth": {
"selectedType": "openai"
}
},
"model": {
"name": "qwen3.6-plus"
},
"$version": 3
}
envKey 要和 env 里的变量名一致。想加 qwen3.8-max 等其他模型,就在 modelProviders.openai 数组里按同样格式再追加一项。配置好后在项目目录运行 qwen 开始对话。VS Code 1.85.0 及以上版本还可以安装 Qwen Code Companion 插件,它和 CLI 共用同一个 settings.json。
第 6 步:用脚本看到显式缓存从创建到命中
编程 Agent 每一轮都会重复发送大段相同的上下文,上下文缓存就是为这种场景准备的。百炼提供两种缓存:
| 模式 | 命中部分怎么计费 | 怎么用 |
|---|---|---|
| 隐式缓存 | 通常为输入单价的 20% | 自动生效,无法关闭,命中不确定 |
| 显式缓存 | 通常为输入单价的 10% | 加 cache_control 标记,5 分钟内确定命中 |
显式缓存创建时,被缓存的 Token 通常按输入单价的 125% 计费;有效期 5 分钟,每次命中后重置;被缓存的内容最少 1024 个 Token。新建 cache_demo.py:
import os
from openai import OpenAI
ws = os.getenv("WORKSPACE_ID")
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url=f"https://{ws}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
# 模拟的代码仓库内容,可缓存的最小长度为 1024 Token
long_text_content = "<Your Code Here>" * 400
def get_completion(user_input):
messages = [
{
"role": "system",
"content": [
{
"type": "text",
"text": long_text_content,
"cache_control": {"type": "ephemeral"},
}
],
},
{"role": "user", "content": user_input},
]
return client.chat.completions.create(model="qwen3.8-max", messages=messages)
for question in ["这段代码的内容是什么", "这段代码可以怎么优化"]:
usage = get_completion(question).usage
details = usage.prompt_tokens_details
print(question)
print(" 创建缓存 Token:", details.cache_creation_input_tokens)
print(" 命中缓存 Token:", details.cached_tokens)
对照规律:第一次请求的「创建缓存 Token」大于 0,「命中」为 0;第二次请求只改了问题,「命中缓存 Token」应接近第一次创建的数量。缓存要在模型响应结束后才建好,所以两次请求要按顺序发送,不要并发。
第 7 步:缓存还是 Batch
- 交互式的 Agent 会话(Claude Code、Qwen Code)每轮都要实时响应,前缀高度重复,适合靠缓存省钱。
- 不着急要结果的离线任务(批量打标签、批量翻译),可以改用 Batch 调用,输入和输出都按实时价格的 50% 计费。
- 两种优惠不能同时生效。一个请求只能二选一,显式缓存和隐式缓存之间也只能用一种。
自查清单
- curl 调
/apps/anthropic/v1/messages返回正常的 Anthropic 格式 JSON claude "你好"有回复,/status里的 Base URL 指向百炼qwen能在项目目录里正常对话cache_demo.py第二次请求的「命中缓存 Token」明显大于 0- 你能根据任务是否需要实时响应,在缓存和 Batch 之间做出选择
