News

Claude Pro/Max订阅者福音:Agent SDK助你省钱,告别API双重付费

Claude Pro/Max订阅者福音:Agent SDK助你省钱,告别API双重付费

如果你是Claude Pro或Max的订阅用户,同时又习惯通过代码调用Claude API,那么你可能正在不知不觉中“双重付费”。Anthropic的订阅计费和API积分是完全独立的账户,而常规的Anthropic SDK默认只识别API积分。好消息是,现在有官方支持的路径允许你通过Claude Agent SDK,直接使用你的订阅额度进行计费,避免额外开销。

Anthropic维护着两种独立的计费关系:

  • ANTHROPIC_API_KEY: 这是控制台的API密钥,用于按需付费的API积分。
  • CLAUDE_CODE_OAUTH_TOKEN: 通过claude setup-token命令获取的OAuth令牌,直接关联到你的Pro/Max订阅配额。

常规的Anthropic SDK只知道第一种计费方式。而Agent SDK(Python版本为claude-agent-sdk,TypeScript版本为@anthropic-ai/claude-agent-sdk)封装了Claude Code CLI,这个CLI原生支持两种方式。通过OAuth路径进行的所有调用,都将计入你的订阅额度。

以下是使用订阅额度进行调用的基本设置步骤:

首先,生成OAuth令牌:

npm install -g @anthropic-ai/claude-code
claude setup-token   # 这个命令会打开浏览器进行认证,并返回一个有效期一年的令牌。

然后,将令牌添加到你的.env文件中:

CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-...

接下来,在Python中执行调用,这些调用将使用你的订阅额度:

import asyncio, os, sys
from dotenv import load_dotenv

load_dotenv()
if os.environ.get("ANTHROPIC_API_KEY"):
    sys.exit("ANTHROPIC_API_KEY is set — it would shadow your OAuth token. unset it.")

from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, TextBlock

async def main():
    async for msg in query(
        prompt="Say hello in one short sentence.",
        options=ClaudeAgentOptions(allowed_tools=[]),
    ):
        if isinstance(msg, AssistantMessage):
            for block in msg.content:
                if isinstance(block, TextBlock):
                    print(block.text)

asyncio.run(main())

以上Python代码会通过你的Claude Max/Pro订阅进行计费,而非API积分。一个配套的GitHub仓库(github.com/avivshaked/prototype-with-claude-max)提供了TypeScript版本的相同示例,以及WebSearch和逐token流式传输的演示。

值得注意的关键点:认证优先级

Agent SDK的认证优先级遵循特定顺序:云凭证 → ANTHROPIC_AUTH_TOKENANTHROPIC_API_KEYapiKeyHelperCLAUDE_CODE_OAUTH_TOKEN → 交互式登录。其中最关键的一点是,如果你的环境中设置了ANTHROPIC_API_KEY(这在许多项目中很常见),它将静默地覆盖你的OAuth令牌。这意味着你可能会误以为正在使用订阅服务,但实际上却在使用并支付API积分。为确保你的订阅生效,务必unset(取消设置)ANTHROPIC_API_KEY环境变量。

↗ 阅读原文