Claude API TypeScript / Node.js 快速上手:安装 @anthropic-ai/sdk、第一个请求、流式、重试与超时

用 Node.js 或 TypeScript 调 Claude API,从安装 @anthropic-ai/sdk 到跑通第一个请求只要几步。本文讲环境要求、环境变量、类型、流式助手、错误类型、默认重试两次与 10 分钟超时、request id 和 beta 功能的用法,并提醒不要在浏览器里暴露 Key。

NNathaniel bigo··原创首发·AI 辅助撰写
11 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 其他 账号
本文根据 Claude 官方《TypeScript SDK》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。代码里的模型名取自官方当天示例,请以官方模型页为准。本站(bigolab.com)不是 Anthropic 官方网站。API 是按用量计费的独立服务,与 Claude 订阅分开计算,Key 的获取见 /guides/claude-api-key-console。

适用于谁

结论先说

  1. 包名是 @anthropic-ai/sdk,用 npm install @anthropic-ai/sdk 安装。
  2. 环境要求:TypeScript 5.0 及以上;Node.js 请用 20 LTS 及以上的非 EOL 版本。
  3. Key 放环境变量 ANTHROPIC_API_KEY,SDK 默认会读,代码里不要写死。
  4. 默认自动重试 2 次,超时 10 分钟,都可以配置。
  5. 别在浏览器里直接调用:SDK 默认禁用浏览器环境,防止暴露密钥。

从零到第一个请求

图:本站根据 Claude 官方《TypeScript SDK》 整理的示意图

一、环境准备

新建一个目录,初始化并安装:

bash
mkdir claude-demo && cd claude-demo
npm init -y
npm install @anthropic-ai/sdk

设置环境变量。macOS 或 Linux 终端:

bash
export ANTHROPIC_API_KEY="你的 Key"

Windows PowerShell:

powershell
$env:ANTHROPIC_API_KEY = "你的 Key"

这只对当前终端窗口有效。Key 相当于密码,不要提交到代码仓库,也不要发给别人。

官方列出的支持运行时:Node.js 20 LTS 及以上、Deno 1.28.0 及以上、Bun 1.0 及以上,以及 Cloudflare Workers、Vercel Edge Runtime 等;Jest 28 及以上需用 node 环境,jsdom 暂不支持;React Native 暂不支持。

二、第一个请求

新建 index.mjs(.mjs 后缀可以直接使用 import 和顶层 await):

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

const client = new Anthropic({
  apiKey: process.env["ANTHROPIC_API_KEY"], // 这是默认行为,可以省略
});

const message = await client.messages.create({
  model: "claude-opus-5-5", // 以官方模型页当天为准
  max_tokens: 1024,
  messages: [{ role: "user", content: "你好,Claude" }],
});

for (const block of message.content) {
  if (block.type === "text") {
    console.log(block.text);
  }
}

运行:

bash
node index.mjs

三个必填项:model、max_tokens、messages。回答在 message.content 这个数组里,里面可能有不同类型的块,所以先判断 block.type === "text" 再取 block.text。如果用 TypeScript,把文件命名为 .ts 并用你熟悉的工具运行即可,类型提示会帮你补全字段。

三、类型与用量

SDK 带有所有请求参数和响应字段的 TypeScript 类型:

typescript
const params: Anthropic.MessageCreateParams = {
  model: "claude-opus-5-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "你好,Claude" }],
};
const message: Anthropic.Message = await client.messages.create(params);
console.log(message.usage); // 形如 { input_tokens: 25, output_tokens: 13 }

usage 是账单的依据。想在发请求前先估算,见 /guides/claude-api-count-tokens。

四、流式输出

方式一:stream: true,得到事件的异步迭代器。

javascript
const stream = await client.messages.create({
  model: "claude-opus-5-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "你好,Claude" }],
  stream: true,
});
for await (const event of stream) {
  console.log(event.type);
}

要取消,可以 break 退出循环,或调用 stream.controller.abort()。

方式二:助手方法,更省事。

javascript
const stream = client.messages
  .stream({
    model: "claude-opus-5-5",
    max_tokens: 1024,
    messages: [{ role: "user", content: "说声你好" }],
  })
  .on("text", (text) => process.stdout.write(text));

const finalMessage = await stream.finalMessage();

官方说明两者的区别:client.messages.stream(...) 提供事件处理和累积,最后能拿到完整消息;create({ stream: true }) 只返回事件迭代器,不累积,内存占用更少。事件细节见 /guides/claude-api-streaming。

五、错误怎么处理

SDK 的错误类型与默认行为

图:本站根据 Claude 官方《TypeScript SDK》 整理的示意图

连不上 API 或收到 4xx、5xx 时,SDK 抛出 Anthropic.APIError 的子类:

javascript
try {
  await client.messages.create({
    model: "claude-opus-5-5",
    max_tokens: 1024,
    messages: [{ role: "user", content: "你好,Claude" }],
  });
} catch (err) {
  if (err instanceof Anthropic.APIError) {
    console.log(err.status); // 例如 400
    console.log(err.name);   // 例如 BadRequestError
  } else {
    throw err;
  }
}

官方给出的对应关系:

状态码错误类
400BadRequestError
401AuthenticationError
403PermissionDeniedError
404NotFoundError
409ConflictError
422UnprocessableEntityError
429RateLimitError
500 及以上InternalServerError
无状态码APIConnectionError

各状态码的含义与排查见 /guides/claude-api-error-codes,429 和 529 请看 /guides/claude-api-error-429-rate-limit 与 /guides/claude-api-error-529-overloaded。

六、重试和超时

  • 重试:连接错误、408、409、429 和 500 及以上的错误,默认自动重试 2 次,带指数退避。可以用 maxRetries 改,客户端级别或单次请求都行:
javascript
  const client = new Anthropic({ maxRetries: 0 }); // 关闭自动重试
  await client.messages.create(params, { maxRetries: 5 });
  
  • 超时:默认 10 分钟。如果你把 max_tokens 设得很大又没用流式,默认超时会按公式动态算,最长可到 60 分钟。可以用 timeout(毫秒)覆盖:
javascript
  const client = new Anthropic({ timeout: 20 * 1000 });
  await client.messages.create(params, { timeout: 5 * 1000 });
  

超时会抛 APIConnectionTimeoutError,并且默认同样会重试两次;

  • 长请求:官方明确建议,大 max_tokens 的长请求用流式。SDK 预计非流式请求会超过约 10 分钟时,会直接抛错;传 stream: true 或自己指定 timeout 可以去掉这个报错。

七、排查与进阶

  • request id:所有对象响应都有 _request_id 属性(来自响应头 request-id),日志里记下来,联系官方时提供;
  • 日志:用环境变量 ANTHROPIC_LOG 或客户端选项 logLevel,取值 debug、info、warn(默认)、error、off。官方提醒 debug 级别会打印包含请求头和请求体的 HTTP 日志,可能含敏感数据,只在调试时用;
  • beta 功能:通过 client.beta.messages.create({ ..., betas: ["..."] }),在 betas 里写对应的 beta 请求头;
  • 其他能力:批量请求在 client.messages.batches(见 /guides/claude-api-message-batches),文件上传用 client.files.upload 配合 toFile(见 /guides/claude-api-files-api)。

八、写进项目前的几条小建议

下面几条是本站的经验性建议,不是官方的硬性要求:

  • 把客户端放在一个模块里创建一次,到处复用,而不是每个请求都 new Anthropic();
  • 模型名集中放在一个常量或配置里,官方换模型、下线旧模型时只改一处;
  • 给每个请求记录 _request_id、usage 和耗时,出了问题好查,也方便核对账单;
  • 对用户可见的功能,先想好限流和过载时怎么提示,再决定要不要自己加一层重试,因为 SDK 本身已经默认重试两次;
  • 本地调试时可以临时把 logLevel 调成 debug,调完改回来,避免日志里留下敏感内容。

九、关于浏览器

SDK 在浏览器里默认禁用,因为 Key 会暴露在前端代码里,任何访问者都能提取并滥用。官方承认,内部工具、短期调试等少数场景风险较小,可以显式设 dangerouslyAllowBrowser: true;但即使这样,启用了零数据保留或 Compliance API 的组织也不能直接从浏览器调用,会收到 401。通常的做法是由你自己的后端去调 Claude,前端只调你的后端。

常见问题

Q:报错 ANTHROPIC_API_KEY 找不到?

环境变量只在设置它的那个终端窗口里有效,换了窗口要重新设置;或者在创建客户端时传 apiKey(不要把真实 Key 写进代码仓库)。

Q:提示 Node 版本太低?

官方要求 Node.js 20 LTS 及以上的非 EOL 版本。

Q:想用工具调用?

工具的概念见 /guides/claude-tool-use-basics;SDK 的 toolRunner 和 betaZodTool 辅助函数在官方页面有说明,本文不展开。

参考资料

  • Claude 官方:TypeScript SDK — https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/typescript
  • Claude 官方:Claude API errors — https://platform.claude.com/docs/en/api/errors

Nathaniel 的更多内容

  1. 01

    Claude Code 处理大仓库:怎么让它只看需要的目录(子目录 CLAUDE.md、claudeMdExcludes、deny 规则)

    仓库太大,Claude Code 总在读无关文件、读进别的包的规则?本文按官方大仓库指南讲:从哪个目录启动、子目录 CLAUDE.md、claudeMdExcludes、Read 的 deny 规则、worktree.sparsePaths、additionalDirectories,以及一份合并后的配置示例。

    Claude0
  2. 02

    Claude Code 在 CI 里跑:从本机 claude -p 到 GitHub Actions 的完整例子(自动审 PR、控成本)

    一条线走完 Claude Code 的 CI 用法:先在本机用 claude --bare -p 配 --json-schema 跑通,再写进 GitHub Actions 用 claude-code-action@v1 自动审 PR,最后加上 --max-turns、超时、并发限制来控成本,并附上常见故障的排查顺序。

    Claude0
  3. 03

    Claude Code 自定义 subagent 实例:测试员、调试员、只读调研员、只读数据库员怎么写

    四个可直接改的 subagent 实例:跑测试的 test-runner、找根因的 debugger、只读调研员、用 PreToolUse hook 限成只读 SQL 的 db-reader;讲 tools、disallowedTools、model、maxTurns 怎么配,怎么点名调用。

    Claude0
  4. 04

    Claude Code 的 CLAUDE.md 模板:前端、后端、数据分析各一份,附拆分与自检方法

    直接拿去改的三份 CLAUDE.md 模板(前端、后端、数据分析),每份都控制在官方建议的 200 行以内;再讲怎么用 .claude/rules 的 paths 拆出专属规则、用 @ 导入长文档,以及用 /context all 和 /doctor prompt-audit 检查是否生效。

    Claude0
  5. 05

    Claude Code 自己写一个插件并发布到 marketplace:plugin.json、marketplace.json、validate 到团队安装的完整流程

    想把自己写的 Skill、Hook 打包给团队用?按 Claude Code 官方 Plugins 文档,从目录结构、plugin.json、claude plugin validate,到写 marketplace.json、推到 Git、让同事一条命令安装,再到版本更新,走完一遍完整流程。

    Claude0
  6. 06

    Claude Code 写一个会自动触发的 Skill:从需求到触发,用 description、when_to_use 和 paths 控制它什么时候出场

    写好的 Skill 总是不触发,或者什么都触发?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整实例:把「改数据库迁移前先检查」写成一个会自动出场的 Skill,包含 description、when_to_use、paths、附带脚本、触发测试和评估。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 配 Sentry MCP 排查线上报错:添加命令、浏览器授权、贴 issue 链接修 bug 和插件子智能体

    线上报错只能手动复制堆栈给 Claude Code?Sentry 官方提供 MCP 服务,可以让它直接读 issue、堆栈和 trace。本文按 Claude Code 官方 MCP 文档和 Sentry MCP 官方说明,讲添加命令、/mcp 授权、典型排查流程、插件方式和自托管注意事项。

    Claude0
  2. 02

    Claude Code 配 Context7 MCP 查最新文档:两种安装方式、use context7 怎么写、指定库和版本

    Claude Code 写出来的代码用了旧版 API?Context7 是一个把库的最新文档喂给编程助手的 MCP 服务。本文按 Context7 官方仓库和文档,讲两种安装方式、在 Claude Code 里的添加命令、use context7 与 library ID 的写法,以及使用时的注意事项。

    Claude0
  3. 03

    Claude API 用量层级与速率限制:Evaluation / Start / Build / Scale 怎么分、月度花费上限、自设上限和怎么申请提额

    Claude API 的限额到底按什么算?按官方《Rate limits》讲清用量层级、RPM / ITPM / OTPM、缓存读取为何不占 ITPM、各层级月度花费上限、自设花费上限的 400、工作区限额、响应头,以及在 Console 里 Request tier increase 提额。

    Claude0
  4. 04

    Claude API 模型 ID 怎么写、怎么查可用模型:dateless 命名、别名区别、Models API 的 lifecycle 和 capabilities

    model 参数该填什么?按官方《Models overview》《Model IDs and versioning》《List Models》讲清 Claude 模型 ID 的格式、4.6 之前带日期与之后不带日期的区别、别名是什么,以及用 GET /v1/models 查可用模型、生命周期和能力字段。

    Claude0
  5. 05

    Claude API 代码执行工具(code execution)怎么用:tools 写法、上传文件分析、取回生成文件、容器限制和计费

    想让 Claude API 真的跑代码做数据分析、生成图表和文件?按官方《Code execution tool》讲清三个工具版本、最小请求、上传 CSV 分析、$OUTPUT_DIR 取回文件、容器内存与联网限制、错误码、容器复用和计费规则。

    Claude0
  6. 06

    Claude API 联网搜索工具(web search tool)怎么用:tools 写法、max_uses、域名过滤、引用字段和计费

    想让 Claude API 回答带最新信息?按官方《Web search tool》讲清 web_search 工具的三个版本、请求写法、max_uses、域名过滤、引用字段、错误码和计费,附排查表。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~