第 3 课

让 Claude Code 与 Qwen Code 接入百炼,再用上下文缓存省钱

先用 curl 验证 Anthropic 兼容端点,再用 settings.json 把 Claude Code 和 Qwen Code 接到百炼按量计费,最后用脚本观察显式缓存的创建与命中,并在缓存和 Batch 之间做选择。

图文22 分钟千问 官方文档 ↗

课程目录第 3 / 3 课

学习位置仅保存在当前浏览器,有效期 180 天。

01 / 图文教材

图文教材

本课依据:阿里云百炼官方文档「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 之间做出选择

本课资料

适用环境

  • 网页
  • iOS
  • Android
  • API

官方文档

千问 ↗