资讯动态

Python SDK 调 Anthropic API,TaoToken 提供 Key 与超时变量

发布时间:2026/9/18 19:49:40 来源:尧图企业网站定制
1. 从 Python SDK 的 base_url 与 timeout 报错说起用anthropicPython SDK 调 Anthropic API 时最先撞上的通常不是模型能力而是两个配置问题一是base_url仍然指向默认地址Key 却是 TaoToken 的结果请求直接返回401 invalid api key二是长上下文或流式响应下默认超时太短脚本抛出APITimeoutError或ReadTimeout。我现在把 Key 与超时变量都收到 TaoToken 管理到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentpython_sdk_intro 创建 KeyBase URL 固定用 https://taotoken.net/api 。这样做的好处是本地开发脚本、Claude Code、Codex 等工具不再各自保存一份密钥而是共用同一套供应商配置Python 后端只需要关心Anthropic()客户端如何初始化、超时如何注入、重试如何设置。最近外部关于 Anthropic 上市与商业化进展的讨论很多但对 Python 后端来说真正影响日常开发的是 SDK 客户端能不能稳定发出请求、能不能在超时后正确重试、能不能把 Key 和 Base URL 从代码里剥离出去。下文按“最小配置 → SDK 初始化 → 超时与重试 → 常见报错 → 多工具切换”的顺序展开代码可以直接复制到你的dev_script.py或.env中。2. TaoToken Key、Base URL 与超时变量的环境变量清单在 TaoToken 创建 Key 后不要把 Key 硬编码到 Python 文件里。推荐使用环境变量或.env文件至少管理下面五个变量。其中ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL是 SDK 客户端初始化的核心ANTHROPIC_TIMEOUT、ANTHROPIC_MAX_RETRIES由你的脚本读取后显式传给Anthropic()ANTHROPIC_MODEL用于切换模型避免把模型 ID 写死在业务代码中。变量名示例值作用是否必须ANTHROPIC_API_KEYYOUR_API_KEYTaoToken 控制台创建的 Key是ANTHROPIC_BASE_URLhttps://taotoken.net/apiAPI 请求根地址不要追加/v1是ANTHROPIC_TIMEOUT90单次请求总超时秒数供脚本读取建议ANTHROPIC_MAX_RETRIES2SDK 自动重试次数建议ANTHROPIC_MODEL以模型列表为准默认调用的模型 ID建议Linux 或 macOS 下可以在终端直接导出export ANTHROPIC_API_KEYYOUR_API_KEY export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_TIMEOUT90 export ANTHROPIC_MAX_RETRIES2 export ANTHROPIC_MODELYOUR_MODEL_IDWindows PowerShell 下写成$env:ANTHROPIC_API_KEYYOUR_API_KEY $env:ANTHROPIC_BASE_URLhttps://taotoken.net/api $env:ANTHROPIC_TIMEOUT90 $env:ANTHROPIC_MAX_RETRIES2 $env:ANTHROPIC_MODELYOUR_MODEL_ID如果你更习惯.env文件可以在项目根目录放一个.env并加入.gitignore# .env ANTHROPIC_API_KEYYOUR_API_KEY ANTHROPIC_BASE_URLhttps://taotoken.net/api ANTHROPIC_TIMEOUT90 ANTHROPIC_MAX_RETRIES2 ANTHROPIC_MODELYOUR_MODEL_ID# .gitignore .env .venv/ __pycache__/Key 的创建入口在 TaoToken 控制台。你可以从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentkey_config 进入官网登录后到 API Keys 页面生成 Key。创建时建议按项目或环境命名例如local-dev-python-sdk、staging-script这样后续轮换 Key 时不会影响其他脚本。不要把同一个 Key 同时用于本地实验、CI 和线上服务本地开发脚本消耗 Token 是可控的但一旦 Key 泄漏排查成本会很高。3. anthropic Python SDK 初始化从裸奔代码到可复制模板先准备虚拟环境和依赖python -m venv .venv source .venv/bin/activate # Windows 使用.venv\Scripts\activate pip install -U anthropic httpx python-dotenv下面是一份可直接运行的 SDK 初始化模板。它做了几件事从.env加载变量检查ANTHROPIC_API_KEY是否存在显式传入 TaoToken 的 Base URL把超时拆成 connect、read、write、pool 四部分设置最大重试次数封装一个最小ask()函数。import os import httpx from dotenv import load_dotenv from anthropic import Anthropic load_dotenv() api_key os.getenv(ANTHROPIC_API_KEY) if not api_key: raise RuntimeError( 缺少 ANTHROPIC_API_KEY。请到 TaoToken 创建 Key并写入 .env ) base_url os.getenv(ANTHROPIC_BASE_URL, https://taotoken.net/api) timeout_seconds float(os.getenv(ANTHROPIC_TIMEOUT, 90)) max_retries int(os.getenv(ANTHROPIC_MAX_RETRIES, 2)) client Anthropic( api_keyapi_key, base_urlbase_url, timeouthttpx.Timeout( timeout_seconds, connect10.0, readtimeout_seconds, write30.0, pool10.0, ), max_retriesmax_retries, ) def ask(prompt: str, max_tokens: int 1024) - str: message client.messages.create( modelos.getenv(ANTHROPIC_MODEL, YOUR_MODEL_ID), max_tokensmax_tokens, messages[{role: user, content: prompt}], ) parts [] for block in message.content: text getattr(block, text, None) if text: parts.append(text) return \n.join(parts) if __name__ __main__: reply ask(用三句话说明 Python 中环境变量的加载顺序。) print(reply)这里最容易写错的是base_url。Anthropic SDK 会在 Base URL 后面拼接/v1/messages因此你只需要写https://taotoken.net/api不要写成https://taotoken.net/api/v1否则实际请求可能变成/api/v1/v1/messages返回 404。另一个常见问题是 Key 复制时带了空格或换行。可以在加载后做一次清理api_key os.getenv(ANTHROPIC_API_KEY, ).strip() if not api_key: raise RuntimeError(ANTHROPIC_API_KEY 为空)如果使用 IDE 的 Run Configuration 或 VS Codelaunch.json要确认环境变量注入到了实际运行的 Python 解释器进程中。很多时候终端里echo $ANTHROPIC_BASE_URL是对的但 IDE 仍然用旧缓存启动结果请求还是打到默认地址。修改.env后重启调试会话或者显式在代码里打印一次 Base URL 的 host但不要打印完整 Key。4. 超时、重试与流式读取本地开发脚本的稳定调用策略超时不是越大约好。设得太小长上下文请求容易失败设得太大脚本卡住时无法快速失败。建议把连接超时控制在 10 秒左右把读取超时设置为 60 到 120 秒并根据你的任务类型调整。下面是httpx.Timeout的字段含义connect建立 TCP/TLS 连接的最长时间。read等待服务器返回数据的最长时间流式响应时尤其重要。write发送请求体的最长时间。pool从连接池获取连接的最长时间。对于普通messages.create()请求read超时可以设为 90 秒。对于流式响应read超时表示两次数据块之间的最大等待时间而不是整个流的总时长。因此流式请求可以把read设得稍大例如 120 秒同时不要用总超时去截断整个流。流式调用可以这样写def stream_ask(prompt: str): with client.messages.stream( modelos.getenv(ANTHROPIC_MODEL, YOUR_MODEL_ID), max_tokens2048, messages[{role: user, content: prompt}], ) as stream: for text in stream.text_stream: yield text if __name__ __main__: for chunk in stream_ask(给出一个 Python 重试装饰器的实现思路。): print(chunk, end, flushTrue)重试方面SDK 的max_retries会自动处理部分 429 和 5xx 错误。但它不是万能的尤其是 400、401、403、404 这类配置错误不会因为重试而成功。建议在业务层再加一层明确判断import time import anthropic def ask_with_backoff(prompt: str, retries: int 3) - str: last_error None for attempt in range(1, retries 1): try: return ask(prompt) except anthropic.RateLimitError as exc: last_error exc sleep_seconds min(2 ** attempt, 20) print(f触发限流第 {attempt} 次重试等待 {sleep_seconds}s) time.sleep(sleep_seconds) except anthropic.APITimeoutError as exc: last_error exc print(f请求超时第 {attempt} 次重试) time.sleep(1) raise RuntimeError(f重试 {retries} 次后仍失败{last_error})如果你在本地批量跑脚本建议把并发限制在 2 到 4。并发过高时即使单个请求配置正确也可能因为网络抖动或服务端限流导致大量超时。批量任务可以使用队列逐条处理每条处理完记录耗时、输入 Token、输出 Token 和状态码。TaoToken 的 Key 管理页面可以配合做 Key 轮换但不要为了绕过限流而无限创建 Key这会让成本与审计变得混乱。5. Claude Code、Codex、CC Switch 三件套的配置边界Python SDK 只是本地脚本的一种接入方式。很多读者还会同时使用 Claude Code、Codex 和 CC Switch。这里要特别强调不同工具读取的配置格式不同不能把ANTHROPIC_*套到 Codex 上。Claude Code 通常使用settings.json可以放在项目级或用户级目录。示例配置如下具体字段以 TaoToken 的 Claude Code 文档为准{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID, ANTHROPIC_TIMEOUT: 90 } }如果你的 Claude Code 版本读取的是ANTHROPIC_API_KEY就把ANTHROPIC_AUTH_TOKEN换成ANTHROPIC_API_KEY。不要在同一个配置里同时写多个来源不明的 Key。修改后重启 Claude Code让它重新加载settings.json。Codex 则使用config.toml。它走的是 OpenAI 兼容配置风格不要把ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN写进这里。一个可参考的结构如下model YOUR_MODEL_ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY对应地在终端里设置export TAOTOKEN_API_KEYYOUR_API_KEY注意变量名是TAOTOKEN_API_KEY不是ANTHROPIC_API_KEY。Codex 不读取 Anthropic 的变量混用只会让你以为配置好了实际请求仍然失败。CC Switch 的核心是“三件套”供应商、Key、Base URL。无论你切换 Claude Code、Codex 还是其他 CLI都应该让三件套各自独立。可以按下面方式理解Claude Code 三件套Anthropic 协议、TaoToken Key、https://taotoken.net/api。Codex 三件套OpenAI 兼容协议、TaoToken Key、https://taotoken.net/api。本地 Python SDK 三件套Anthropic()客户端、环境变量中的 Key、同一个 Base URL。CC Switch 只负责在这些本地配置之间切换不负责把 Anthropic 变量翻译成 Codex 变量。如果你发现切换后 Claude Code 正常、Codex 报 401优先检查 Codex 的config.toml是否误用了ANTHROPIC_API_KEY。更多 CLI 配置可以到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcc_switch 查看官网入口再配合文末的 Claude Code 文档核对字段。6. 401、404、APITimeoutError按错误码排查 TaoToken 接入接入阶段最常见的错误可以按状态码和异常类型分流。下面这段代码把异常分类打印出来适合放在本地脚本的调试模式里import anthropic try: reply ask(写一个 Python 快速排序实现并解释时间复杂度。) print(reply) except anthropic.AuthenticationError as exc: print(401/403检查 ANTHROPIC_API_KEY 是否完整、是否有多余空格) print(同时确认 ANTHROPIC_BASE_URL 是否为 https://taotoken.net/api) except anthropic.NotFoundError as exc: print(404优先检查 base_url 是否多写了 /v1或模型 ID 是否正确) except anthropic.RateLimitError as exc: print(429降低并发增加 max_retries或稍后重试) except anthropic.APITimeoutError as exc: print(超时调大 ANTHROPIC_TIMEOUT或改用流式请求) except anthropic.APIConnectionError as exc: print(连接失败检查本机 DNS、网络、系统时间与 CA 证书) except anthropic.APIStatusError as exc: print(f其他 API 状态码{exc.status_code}) print(exc.response.text[:300])逐项拆解401 invalid api keyKey 不对或没传进去。最常见的是.env写了但没load_dotenv()或者终端导出的变量被 IDE 覆盖。也有一种情况是 Key 是 TaoToken 的但base_url没改请求打到了默认端点。404 not found路径错误或模型 ID 错误。Anthropic SDK 会自动拼接/v1/messages所以 Base URL 只写到https://taotoken.net/api。如果你手动在 Base URL 后面加了/v1就会形成重复路径。模型 ID 也要从 TaoToken 的模型对话页面确认不要凭记忆写。403 permission deniedKey 没有该模型权限或者 Key 已被禁用。到 TaoToken 控制台检查 Key 状态和可用模型范围。429 rate limit请求太频繁。先把并发降到 1 到 2再加退避重试。不要用while True无间隔重试这会让问题更严重。APITimeoutError连接超时或读取超时。先区分是connect还是read。如果是长上下文把read调到 120 秒如果是流式检查两次数据块之间是否超过read阈值。APIConnectionError通常不是 Key 问题而是本地网络、DNS、系统时间或证书问题。可以先用curl -I https://taotoken.net/api检查基础连通性但不要把 Key 放进命令行历史。排查时建议按固定顺序先确认ANTHROPIC_BASE_URL再确认ANTHROPIC_API_KEY再确认模型 ID最后看超时和重试。不要一上来就改代码逻辑很多问题其实是环境变量没有生效。7. 把本地脚本从“能跑”推进到“可切换、可观测、可复用”能跑通一次不代表可以长期使用。本地开发脚本最容易失控的地方是模型 ID 写死、Key 写死、超时写死、日志没有 Token 用量。建议把配置分成三层基础层ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL由 TaoToken 提供。行为层ANTHROPIC_TIMEOUT、ANTHROPIC_MAX_RETRIES、并发数。业务层ANTHROPIC_MODEL、max_tokens、system prompt。每次请求后记录用量def ask_with_usage(prompt: str) - tuple[str, dict]: message client.messages.create( modelos.getenv(ANTHROPIC_MODEL, YOUR_MODEL_ID), max_tokens1024, messages[{role: user, content: prompt}], ) text \n.join( getattr(block, text, ) for block in message.content if getattr(block, text, None) ) usage { input_tokens: getattr(message.usage, input_tokens, None), output_tokens: getattr(message.usage, output_tokens, None), model: message.model, } return text, usage把日志写到本地文件时记得不要记录完整 Key。可以只记录 Key 的前 4 位和后 4 位或者记录 Key 的哈希。对于本地开发脚本建议用logging模块输出结构化日志import logging import json logging.basicConfig( levellogging.INFO, format%(asctime)s %(levelname)s %(message)s, ) def log_usage(usage: dict): logging.info(anthropic_usage %s, json.dumps(usage, ensure_asciiFalse))如果你要在多台机器上开发不要把.env同步到网盘或 Git。每台机器单独创建本地.envKey 从 TaoToken 控制台重新生成或轮换。模型 ID 也不要写死在 README 里而是让脚本从环境变量读取这样切换模型时不需要改代码。对于批量任务可以先用小样本跑通再逐步增加输入规模本地脚本消耗 Token 的速度取决于循环次数和max_tokens监控用量比事后惊讶更有效。8. 文末 CTA模型对话、Coding Plan、创建 Key、Claude Code 文档如果你已经准备好把 Python SDK 的 Base URL 切到 TaoToken可以按下面路径继续先在模型对话页面确认模型 ID 和调用效果https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chat如果你还需要 CLI 编程场景可以查看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_plan然后创建自己的 API Key写入.env的ANTHROPIC_API_KEYhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysClaude Code 的settings.json字段和更多 CLI 配置参考 Claude Code 文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_code_doc最后再强调一遍最小可用配置ANTHROPIC_API_KEYYOUR_API_KEYANTHROPIC_BASE_URLhttps://taotoken.net/api超时通过ANTHROPIC_TIMEOUT注入重试通过ANTHROPIC_MAX_RETRIES控制。Python SDK 初始化时显式传入api_key、base_url、timeout和max_retries就能避免大多数 401、404 和超时问题。需要创建 Key 或查看完整入口可以从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentfinal_cta 进入官网控制台。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价