Anthropic SDK · Node.js · MonkeyAI · 2026-08-09 实测

Anthropic Node SDK 自定义 baseURL:把请求切到 MonkeyAI

Anthropic 官方 Node SDK(@anthropic-ai/sdk)默认指向 https://api.anthropic.com。要把请求切到 MonkeyAI,在构造器里直接传 baseURL:,或导出 ANTHROPIC_BASE_URL。SDK 会向 /v1/messages 发出 x-api-key 加 anthropic-version: 2023-06-01 的请求。本教程用 2026-08-09 的真实探测验证这条路,并跑一条完整的 client.messages.create()。

baseURLhttps://monkeytheme.com
端点POST /v1/messages
认证头x-api-key(SDK 默认)
实测日期2026-08-09

这次实测验证了什么

2026-08-09 用故意伪造的测试 Key,向 https://monkeytheme.com/v1/messages 发了 6 条探测请求。每一条都拿到 HTTP 401 结构化 JSON 和响应头里的 x-request-id。sub2api 后端日志显示 ingress_reject_reason=invalid_api_key,latency_ms 在 0-3 之间,说明 relay 在 auth 阶段就把请求拦下来了,没有真正打到上游。Node SDK 的行为和 Python SDK 一致,因为两者实现的是同一套 wire 协议。

探测项请求头响应说明
POST /v1/messages只带 x-api-key401 INVALID_API_KEYSDK 默认认证路径通;不强制 anthropic-version
POST /v1/messagesx-api-key + anthropic-version: 2023-06-01401 INVALID_API_KEYSDK 风格的双头请求原样到达 relay
POST /v1/messagesAuthorization: Bearer ***401 INVALID_API_KEYBearer 在 Messages 上同样被接受
GET /v1/modelsx-api-key401 INVALID_API_KEYModels 端点同样先校验 Key
GET /v1/models只带 anthropic-version401 API_KEY_REQUIREDanthropic-version 不被当作认证头
POST /v1/messagesx-api-key + tools + stream: true401 INVALID_API_KEYauth 检查在 schema 解析和 stream 分支之前
本页没有用真实账号跑端到端生成。401 INVALID_API_KEY 只能证明路由和认证层通了,不能证明生成能力。要确认 Claude 真能返回文本,用自己的 Key 跑下面那段 client.messages.create()。

安装并配置客户端

官方 Anthropic Node SDK 在 npm 上的包名是 @anthropic-ai/sdk。构造器支持 baseURL、apiKey 和 authToken 三个参数。官方 README 说明它会读 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY 作为环境变量兜底。

npm install @anthropic-ai/sdk

export ANTHROPIC_BASE_URL="https://monkeytheme.com"
export ANTHROPIC_API_KEY="***"

不要把 Key 写进源码。process.env 拿来跑示例够用;正式项目请用密钥管理或 .env.local 这种不进版本控制的文件。

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY,
  baseURL: process.env.ANTHROPIC_BASE_URL,
});
baseURL 只填 API 根域名,不要在末尾加 /v1 或 /messages。SDK 自己拼路径,结果是 {baseURL}/v1/messages;手动加 /v1 会让最终路径变成 /v1/v1/messages,nginx 直接 404。

生成前先验证 Key

Anthropic SDK 没有 models.list() 助手。要确认一个 Key 是活的,发一条 max_tokens: 1 的 client.messages.create():Key 错就拿到带 request ID 的 401,Key 对就拿到一段 1 token 的 Claude 回复,并能从 resp.model 字段读到上游模型名。

const resp = await client.messages.create({
  model: "claude-3-5-sonnet-20241022",
  max_tokens: 1,
  messages: [{ role: "user", content: "Reply with OK" }],
});
console.log(resp.model, resp.stop_reason, resp.usage);

如果 resp.model 打出来是你账号下可见的 Claude 模型名,SDK 接线就通了。Anthropic SDK 强制每次请求带上 anthropic-version: 2023-06-01,你不用手动设。

异常应该怎么处理

SDK 对非 2xx 响应抛 APIError,其它 SDK 内部错误抛 AnthropicError。两者都暴露 .status 和 .headers。日志里记 request ID,不要记 API Key。

try {
  const resp = await client.messages.create({
    model: "claude-3-5-sonnet-20241022",
    max_tokens: 64,
    messages: [{ role: "user", content: "hi" }],
  });
} catch (err) {
  if (err.status) {
    const reqId = err.headers?.get?.("x-request-id");
    console.error("HTTP", err.status, "request_id", reqId);
  } else {
    console.error("网络/TLS:", err.cause ?? err.message);
  }
  throw err;
}

MonkeyAI 的 401 code=INVALID_API_KEY 和 OpenAI 路由上的 401 是一样的。relay 在这一层不区分 Anthropic 还是 OpenAI Key,它们都是 MonkeyAI 后台的 Key,存在同一个库里。

流式、工具、重试

/v1/messages 的流式响应走 SSE,Anthropic Node SDK 提供 client.messages.stream(...) 助手。429 和 5xx 默认自动重试;调试时设 maxRetries: 0,避免一次瞬时 429 把真正的错误盖掉。

const stream = client.messages.stream({
  model: "claude-3-5-sonnet-20241022",
  max_tokens: 256,
  messages: [{ role: "user", content: "用一句话总结下面这段。" }],
});

for await (const event of stream) {
  if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
    process.stdout.write(event.delta.text);
  }
}

const final = await stream.finalMessage();

工具调用和直连 api.anthropic.com 的写法一样。如果上游账号在 tool schema 上报错,relay 返 200 后跟一个 400,那种情况是上游拒绝 schema,不是 MonkeyAI 出错。

常见配置错误

资料来源

常见问题

应该传什么 baseURL?

传 baseURL: https://monkeytheme.com,SDK 自己拼 /v1/messages。

SDK 发的是 Authorization Bearer 吗?

不发。@anthropic-ai/sdk 默认发 x-api-key。MonkeyAI 在 /v1/messages 上也接受 Authorization: Bearer。

anthropic-version 重要吗?

Anthropic SDK 自动带上。MonkeyAI 不强制,但会透传给上游;客户端剥掉反而让上游报 400。

Anthropic Node SDK 怎么列模型?

Anthropic SDK 没有 models.list 助手。要查模型直接 fetch GET /v1/models 或用 undici。

看到 401 是不是说明 SDK 配置对了?

不能。401 INVALID_API_KEY 只证明请求到了 relay 并被 auth 拒绝。流式、工具、token 计数要靠自己 Key 跑一条真实 messages.create() 才能确认。

相关教程

OpenAI Node SDK

/v1/chat/completions 和 /v1/responses 的 OpenAI 兼容等价写法。

打开页面

Anthropic Python SDK

Python 版的同一套接线,用 anthropic.Anthropic(base_url=)。

打开页面

Claude Code 网关

把 Anthropic SDK 用在 Claude Code CLI 上,靠 ANTHROPIC_BASE_URL。

打开页面

401 invalid token

401 INVALID_API_KEY 在 /v1/messages 上到底意味着什么。

打开页面

端点覆盖

2026-08-09 实测的 /v1 完整端点矩阵。

打开 page

504 upstream timeout

为什么同一条路由,401 几十毫秒,504 就要等很久。

打开页面