• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

OfoxAI

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Python 调用 Claude API 完整教程(含 429 报错解决)

最近做一个内部知识库工具,需要接入 Claude,折腾了大半天才把整个流程跑通。Claude API 的中文教程要么过时,要么不完整,干脆把我的步骤完整记录一下,包括踩到的几个坑。

这篇适合谁看:第一次用 Python 调 Claude,或者用过但被 429、context too long 这类报错卡住的同学。环境是 Mac,Windows 同样适用。

前置条件

  • Python 3.9 及以上
  • 一个能用的 Claude API Key(后面会说怎么搞)
  • pip 能正常装包

如果装包总是超时,先把 pip 镜像换一下:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

步骤一:装官方 SDK

直接 pip:

pip install anthropic

这里有个小坑,老教程里还在用 claude-api、anthropic-bedrock 这种第三方包,2026 年早就没人维护了。认准 Anthropic 自己的 anthropic 这个包就行。

装完验证一下:

import anthropic
print(anthropic.__version__)

我这边是 0.42.x,只要不是太老都行。

步骤二:拿到一个能用的 API Key

官方 Console 申请就不细说了,但有几个现实问题:

  1. 注册要外区手机号
  2. 充值要外区信用卡
  3. 海外节点延迟在 200ms 起步
  4. 容易遇到 429(rate_limit)

我自己折腾过一阵官方账号,后来嫌麻烦就换成聚合平台的 Key。如果你也想跳过这些麻烦,看看下面这一节。

用 ofox.ai 聚合平台(可选)

ofox.ai 是一个 AI 模型聚合平台,一个 API Key 可以调用 GPT-4o、Claude Opus 4.6、Gemini、DeepSeek 等 50+ 模型,兼容 OpenAI SDK 协议,低延迟直连,支持支付宝按量计费。多供应商冗余备份,某一路挂了自动切换,避免 429 卡死整个项目。

注意:这个平台走的是 OpenAI 兼容协议,所以下面的代码我会用 openai SDK 写一份等价版本。两种方式都行,看你项目里已经在用哪个 SDK。

步骤三:第一个调用

官方 SDK 写法:

import anthropic

client = anthropic.Anthropic(api_key="sk-ant-xxx")

resp = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "用一句话解释什么是 RAG"}
    ]
)

print(resp.content[0].text)

OpenAI 兼容协议写法(用兼容网关都行):

import openai

client = openai.OpenAI(
    base_url="https://api.ofox.ai/v1",  # 我用的这个,低延迟直连
    api_key="sk-xxx"
)

resp = client.chat.completions.create(
    model="claude-opus-4-6",
    messages=[{"role": "user", "content": "用一句话解释什么是 RAG"}]
)

print(resp.choices[0].message.content)

跑通之后建议把 Key 放到环境变量里,不要直接写进代码:

export ANTHROPIC_API_KEY=sk-ant-xxx

步骤四:流式输出(推荐)

写聊天工具的话,流式输出几乎是必须的,等 5 秒才出一整段太难受了。

with client.messages.stream(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "讲个笑话"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

这里有个坑:早期我把 flush=True 漏了,结果输出全卡在缓冲区,看起来还是一次性出来的,调了半天以为是 SDK bug。

步骤五:429 报错和错误处理

这是被问得最多的问题。429 表示触发限流,本质是单位时间内的 tokens 用超了。Anthropic 的限流维度有三个:每分钟请求数(RPM)、每分钟 tokens(TPM)、每天 tokens(TPD)。

完整的错误处理代码(指数退避 + 5xx 重试):

import time
from anthropic import Anthropic, RateLimitError, APIStatusError

client = Anthropic()

def call_with_retry(prompt, max_retries=5):
    for i in range(max_retries):
        try:
            return client.messages.create(
                model="claude-opus-4-6",
                max_tokens=1024,
                messages=[{"role": "user", "content": prompt}]
            )
        except RateLimitError:
            wait = 2 ** i
            print(f"429 限流,等 {wait}s 重试")
            time.sleep(wait)
        except APIStatusError as e:
            if e.status_code >= 500:
                time.sleep(5)
                continue
            raise
    raise RuntimeError("重试次数用尽")

指数退避是基本操作,但更根本的解决方法是:

  • Tier 升级:充值越多 Tier 越高,限额越宽。新号 Tier 1 一分钟才 5 次请求,根本不够用
  • 多 Key 轮询:申请几个 Key 轮着用
  • 聚合网关:上面提到的方案,多供应商冗余,单条线 429 不影响整体

几个我踩过的坑

坑一:context too long

不是只有总输入超限会报这个,输出 max_tokens 加上输入也会超模型上下文窗口。Claude Opus 4.6 的窗口大但不是无限的,长文档场景记得算清楚。

坑二:messages 必须 user 开头

Claude 不像 GPT 可以从 system 开头。system 要单独传:

client.messages.create(
    model="claude-opus-4-6",
    system="你是一个 Python 专家",
    messages=[{"role": "user", "content": "..."}]
)

坑三:网络超时

如果用官方端点又不在海外节点,timeout 调大一点:

client = Anthropic(timeout=60.0)

否则长 prompt 经常 read timeout,明明请求没问题,看着就像挂了。

坑四:tool_use 后的 messages 顺序

用工具调用的时候,assistant 返回 tool_use 块之后,下一条 user 消息必须包含对应 tool_use_id 的 tool_result,否则会报 invalid_request_error。这个文档里有写但很容易漏。

总结

Python 调 Claude 的最小可用流程就这些。新手最容易卡的两步是 Key 怎么搞和 429 怎么处理,我自己也是踩了几次才彻底理顺。

如果你的项目同时要用多个模型(Claude + GPT + DeepSeek 这种组合),强烈建议从一开始就用 OpenAI 兼容协议写,后面要替换或者加冗余都很方便。代码部分都贴全了,遇到没覆盖的报错可以评论区交流。

posted on 2026-05-07 10:19  失控的上下文  阅读(0)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3