直接答案
使用 Anthropic 官方 Python SDK 的 `base_url` 参数连接 CodeNodex,重点避免把 `/v1` 重复拼进 Messages 路径。
这篇内容解决什么问题
解决 Anthropic SDK 自定义 Base URL、API Key、Messages 请求和错误处理问题,并说明它不属于 CodeNodex CLI 的自动配置客户端。
安装 SDK 并准备 Anthropic 分组 Key
在 Python 虚拟环境中安装官方 anthropic 包,并准备 CodeNodex Anthropic 分组 API Key。CodeNodex CLI 的 claude 模式服务于 Claude Code,不代表可以自动修改任意 Anthropic SDK 项目。
SDK 项目应自行管理依赖和 secret。API Key 放在环境变量中,不写入仓库、Notebook 输出或异常日志。
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade anthropic
export CODENODEX_API_KEY="YOUR_API_KEY"Base URL 使用站点根地址
Anthropic SDK 会自行追加 /v1/messages,因此 base_url 应填 https://token.codenodex.com,不要填成 https://token.codenodex.com/v1。
如果重复加入 /v1,最终请求可能落到 /v1/v1/messages 并返回 404。这是 Anthropic SDK 与 OpenAI SDK 接入时最关键的路径差异。
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["CODENODEX_API_KEY"],
base_url="https://token.codenodex.com",
timeout=60.0,
max_retries=2,
)发送最小 Messages 请求
调用 messages.create 时必须提供模型 ID、最大输出 token 和消息数组。模型 ID 使用当前 Key 实际可见的值。
响应内容是结构化 block 列表,不应假定所有 block 都是文本;最小样例先检查 block 类型再读取。
message = client.messages.create(
model="YOUR_MODEL_ID",
max_tokens=256,
messages=[
{"role": "user", "content": "用一句话解释最小权限原则。"}
],
)
for block in message.content:
if block.type == "text":
print(block.text)用 curl 对照 SDK 请求路径
SDK 请求失败时,用 curl 直接调用 /v1/messages,可以验证 Key、模型和网关协议。如果 curl 成功而 SDK 失败,再检查 SDK 的 base_url 与版本。
对照请求必须包含 x-api-key、anthropic-version 和 JSON Content-Type。不要把真实 Key 粘进共享终端记录。
curl --fail-with-body "https://token.codenodex.com/v1/messages" -H "x-api-key: YOUR_API_KEY" -H "anthropic-version: 2023-06-01" -H "content-type: application/json" --data '{"model":"YOUR_MODEL_ID","max_tokens":64,"messages":[{"role":"user","content":"Reply OK"}]}'排查认证、模型和限流错误
401 检查 Key 与分组;404 首先检查是否出现 /v1/v1/messages,再检查模型;429 检查余额、并发与速率;连接错误检查代理、TLS 和超时。
只对可恢复的限流和临时服务错误重试。认证失败、无权限和模型不存在应立即修正配置,不应通过增加重试次数掩盖。
官方来源与核验范围
本文以公开官方文档为事实依据;命令和配置可能随客户端版本变化,执行前请同时核对对应来源。
查看技术核验方法