Mindket

Claude API 教程:用 Python 和 TypeScript 完成第一次调用

黑色横幅,标题是“Claude API 实战”,下面是“调用、工具、缓存与智能体循环”。

Claude API 的核心接口只有一个:Messages。你发送模型 id、max_tokens 上限和一组消息,拿回内容块、stop_reason 和 token 用量。本教程先在控制台创建 API 密钥,再安装 Python 或 TypeScript SDK,完成第一次调用,做流式输出,并读懂返回结果。

本节内容

  • 创建 API 密钥,并把它放在 ANTHROPIC_API_KEY 变量里。
  • 用 Python 或 TypeScript 发送带系统提示词的 Messages API 请求。
  • 读 content 内容块、usage 和 stop_reason,不要默认只有一个文本块。
  • 给长回答做流式输出,并知道 SDK 已经替你重试了哪些错误。
全部课程
本页目录
  1. 开始之前
  2. 用 Python 完成第一次调用
  3. 用 TypeScript 做同样的调用
  4. 读懂返回结果:内容块、用量和 stop_reason
  5. 用流式输出处理长回答
  6. 选一个模型 id,并预期它会变
  7. 错误、重试与超时
  8. API 版本 2026-10-21 发布当天,ClaudeDevs 说了什么
  9. 常见错误
  10. 自己试一试
  11. 接下来
  12. 自测一下
  13. 常见问题
  14. 资料来源

开始之前

你需要一个 Claude Console 账号和一个 API 密钥。在控制台打开 API keys 页面,点 Create key,给它起名并选一个过期时间。控制台只会显示一次完整的密钥,它以 sk-ant- 开头,所以要马上复制到密钥管理工具里。个人密钥会在你离开组织后失效,所以文档建议共享的工作负载改用服务账号密钥。两种密钥的区别见Anthropic 的密钥页面。

SDK 要求 Python 3.10 或更高版本,或者 Node.js 20 LTS 或更高版本,加上 TypeScript 5.0 或更高版本。两个 SDK 默认都从环境变量里读取 ANTHROPIC_API_KEY,密钥不会出现在代码里。TypeScript SDK 在浏览器里默认拒绝运行,除非你设置 dangerouslyAllowBrowser。这个名字就是警告:能打开页面的人都能读到密钥。

用 Python 完成第一次调用

下面是文档里的快速入门代码,加了一条系统提示词和一行用量输出。模型 id 来自模型页面,复制之前也请先去那里核对一遍。

import anthropic

client = anthropic.Anthropic()  # reads ANTHROPIC_API_KEY

message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1000,
    system="You are a concise assistant. Answer in three bullet points.",
    messages=[
        {
            "role": "user",
            "content": "What should I search for to find the latest developments in renewable energy?",
        }
    ],
)

for block in message.content:
    if block.type == "text":
        print(block.text)

print(message.stop_reason, message.usage)
  1. 在运行脚本的 shell 里导出密钥:export ANTHROPIC_API_KEY="your-api-key-here"。
  2. 新建项目文件夹和虚拟环境,再安装 SDK:先执行 python3 -m venv .venv && source .venv/bin/activate,再执行 pip install anthropic。
  3. 把上面的代码保存为 quickstart.py。
  4. 运行 python quickstart.py。你会先看到回答文字,再看到一行停止原因和 token 数量。
  5. 把 max_tokens 改成 20 再运行一次。回答会在句子中间被截断,stop_reason 变成 max_tokens。

用 TypeScript 做同样的调用

依次运行 npm init -y、npm pkg set type=module 和 npm install @anthropic-ai/sdk,把代码保存为 quickstart.ts,再用 npx tsx quickstart.ts 启动,快速入门就是这样做的。

TypeScript 沿用 HTTP API 的字段名,所以 max_tokens 和 stop_reason 都保留下划线。Messages API 参考把 model、max_tokens 和 messages 标为必填字段。

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

const client = new Anthropic(); // reads ANTHROPIC_API_KEY

const message = await client.messages.create({
  model: "claude-opus-5-5",
  max_tokens: 1000,
  system: "You are a concise assistant. Answer in three bullet points.",
  messages: [
    {
      role: "user",
      content: "What should I search for to find the latest developments in renewable energy?"
    }
  ]
});

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

console.log(message.stop_reason, message.usage);

读懂返回结果:内容块、用量和 stop_reason

message.content 是一个内容块列表,不是字符串。普通回答只有一个 text 块,但同一个列表里也可能出现 tool_use 和 thinking 块,所以快速入门的写法是遍历列表,挑出文本块。直接写 content[0].text,只能在没出问题的时候用。

usage 里有 input_tokens 和 output_tokens,这是 API 计量的单位,AI 里的 token 是什么那篇讲过。Python SDK 还能在发送之前先计数:client.messages.count_tokens(model=..., messages=[...]) 会返回 input_tokens。

stop_reason 说明生成为什么结束。每次响应都要检查它,因为只读文本的代码会悄悄返回一个被截断的回答。

出自停止原因页面,2026 年 11 月 4 日阅读。
stop_reason发生了什么该怎么做
end_turnClaude 自然说完了回答直接使用响应
max_tokens回复达到了你设的 max_tokens 上限调高上限,或者让 Claude 接着写
stop_sequenceClaude 输出了你设定的某个 stop_sequences读 stop_sequence 看是哪一个
tool_useClaude 正在调用工具运行工具,再把结果发回去
pause_turn服务端工具循环达到了迭代上限把助手内容原样发回去继续
refusalClaude 拒绝回答读 stop_details,再换一个备用模型重试
model_context_window_exceeded回复占满了上下文窗口把这次回复当作被截断的

用流式输出处理长回答

等完整回复出来再显示,体验慢,输出很大时在某些网络上还会失败。SDK 的辅助方法用服务器发送事件发出请求,让你边收边用文字。Python 里的 get_final_message(),TypeScript 里的 finalMessage(),会返回和普通调用相同的 Message 对象。

到了范围的上端,流式输出就不再是可选项。Python SDK 在预计非流式请求要跑上大约十分钟以上时,会抛出 ValueError,两个 SDK 都建议对较大的 max_tokens 使用流式输出。

import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
    model="claude-opus-5-5",
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    message = stream.get_final_message()

print()
print(message.stop_reason, message.usage)
  • 事件顺序是 message_start,然后每个内容块依次有 content_block_start、一个或多个 content_block_delta 和 content_block_stop,最后是 message_delta 和 message_stop。可能出现未知的事件类型,不处理的就忽略(见流式输出页面)。
  • stop_reason 在 message_start 里是 null,在 message_delta 里才出现。message_delta 里的 token 数是累计值。
  • API 已经返回 200 之后,仍然可能出现错误。它会以 error 事件的形式到达,例如 overloaded_error,所以流式循环要有自己的错误分支。

选一个模型 id,并预期它会变

2026 年 11 月 5 日,文档列出四个当前模型。每个 id 都是固定的快照,名字里没有日期,Anthropic 承诺在 Anthropic 自己运营的平台上,每个模型至少保留到表里的日期。模型总览建议大多数工作负载从 Opus 5.5 开始。

anthropic-version 请求头由 SDK 替你发送,新的 API 版本会随着 SDK 的新大版本到来。Python SDK 2.0.0 是第一个使用 2026-10-21 的版本,TypeScript SDK 则是 1.0.0。

四个模型在大约五周之内相继发布,最后一个发布两周后,新的 API 版本也来了。八月写的教程里一个都没有,所以发布说明值得在复制模型 id 之前先翻一下。

2026 年 9 月以来的 Claude API 发布
  1. Claude Fable 5.1 发布

    面向高难度推理和长周期智能体任务的模型。

  2. Claude Opus 5.5 发布

    文档建议先试的模型。

  3. Claude Sonnet 5.5 发布

    产品线的中间档,兼顾速度和智能。

  4. Claude Haiku 5.5 发布

    面向分类、路由这类高并发工作。

  5. API 版本 2026-10-21

    随 Python SDK 2.0.0 和 TypeScript SDK 1.0.0 一起发布,它们是最早使用这个版本的 SDK。

  6. 消息线程进入 beta

    之后的请求可以只带新消息,不必再发整段历史。

来源:Claude Docs: Release notes (2026年11月5日 查阅)

Anthropic 模型总览,2026 年 11 月 5 日阅读。id 和日期会变,上线之前请再从页面复制一次。
模型API id上下文窗口最大输出退役时间
Claude Fable 5.1claude-fable-5-11M tokens128K tokens不早于 2027-09-01
Claude Opus 5.5claude-opus-5-51M tokens128K tokens不早于 2027-09-22
Claude Sonnet 5.5claude-sonnet-5-51M tokens128K tokens不早于 2027-09-28
Claude Haiku 5.5claude-haiku-5-51M tokens128K tokens不早于 2027-10-07

错误、重试与超时

两个 SDK 都会为 4xx 和 5xx 响应抛出带类型的错误,并自动重试其中一部分。Python SDK 页面和 TypeScript SDK 页面给出了默认值:重试两次,退避时间很短并按指数增长,适用于连接错误、408、409、429 和 5xx,超时时间是十分钟。Python 里用 max_retries,TypeScript 里用 maxRetries 来修改,并且每次调用都记录 message._request_id,联系支持时会被问到。

错误页面还提到一种重试解决不了的情况:速率限制错误其实表示触到了月度支出上限。它不带 retry-after 头,会一直失败到恢复访问为止。

TypeScript SDK 使用相同的类名。连接中断会抛出 APIConnectionError。
状态码SDK 类API 错误类型
400BadRequestErrorinvalid_request_error
401AuthenticationErrorauthentication_error
403PermissionDeniedErrorpermission_error
404NotFoundErrornot_found_error
429RateLimitErrorrate_limit_error
500 及以上InternalServerErrorapi_error,529 对应 overloaded_error

API 版本 2026-10-21 发布当天,ClaudeDevs 说了什么

ClaudeDevs 是 Anthropic 面向开发者的官方账号,新版本发布当天就在 X 上宣布了它。这是 2023 年以来第一个正式的 API 版本。以后版本会发得更勤,好让你在新模型逼你改代码之前,先把不兼容的改动处理掉。旧的 2023-06-01 并没有被弃用。

同一串帖子的下一条列出了具体改动,排在最前面的是:Messages API 去掉了 temperature、top_p 和 top_k。助手回合里的文档、用户回合里的引用,现在也会直接报错。

升级到 Python SDK 2.0.0 或 TypeScript SDK 1.0.0 之前,先在代码里搜一遍这三个参数名。没升级之前,你现在的 SDK 会继续发送旧版本号。

我们打算更频繁地发布版本,让你在新模型要求之前,就能处理好不兼容的改动。

ClaudeDevs, Anthropic 面向 Claude 开发者的官方账号,引文为译文 · X (2026年11月5日 查阅)
ClaudeDevs(@ClaudeDevs)2026 年 10 月 21 日在 X 上发帖:API 版本 2026-10-21 现已推出。Claude API 变化很大,但这是 2023 年以来我们第一次正式发布版本。我们打算更频繁地发布版本,让你在新模型要求之前处理好不兼容的改动。2023-06-01 没有被弃用。
ClaudeDevs 在 X 上,2026 年 10 月 21 日
ClaudeDevs(@ClaudeDevs)同日在同一串帖子里回复:这个版本的改动。Messages API 去掉了 temperature、top_p 和 top_k。助手回合里的文档和用户回合里的引用会返回 400。几个已弃用的 Admin 和 Enterprise Analytics API 字段被替换。
ClaudeDevs 在 X 上,2026 年 10 月 21 日

X 官方嵌入卡片的截图,拍摄于 2026-11-05,时间为 UTC。点击截图可到 X 上打开原帖。

常见错误

  • 读 content[0].text,哪天第一个块是 thinking 或 tool_use,代码就会出错。
  • 只发送最新的一条消息。Messages API 是无状态的,每次请求都要带上完整历史,包括之前的助手回合。
  • 从老教程里抄来 temperature,结果请求被当前模型拒绝。
  • 把密钥放进浏览器代码。启用了零数据保留的组织根本不能从浏览器调用 API,请求会返回 401。
  • 不用流式输出就设一个很大的 max_tokens,请求超时后又去怪网络。
  • 开启缓存之后,把 usage.input_tokens 当成全部输入。第 3 课会解释它为什么变小了。

自己试一试

  • 加一个回合:把助手的回复和一个追问追加到 messages,再调用一次,看 input_tokens 怎样增长。
  • 设置 stop_sequences=["END"],让 Claude 数到十并以 END 结尾,再读响应里的 stop_sequence。
  • 导出一个错误的密钥并捕获错误。你得到的是哪个类,状态码是多少?
  • 把模型 id 换成 claude-haiku-5-5,用同一条提示词,凭感觉比较延迟。

接下来

第 2 课让 Claude 调用你写的函数。上面的系统提示词只有一句话,系统提示词那一课教你怎样写一条真正的。

每次调用都要重新发送完整历史,上下文窗口那一课讲了这笔账怎么算:对话越长,每次请求的输入 token 就越多,离窗口上限也越近。

自测一下

  1. 响应里的 stop_reason 是 "max_tokens",这说明什么?

    查看答案

    B. 回复达到了你设的 max_tokens 上限,被截断了 max_tokens 表示生成在你设定的上限处停了,所以要调高上限,或者让 Claude 接着写。

  2. 在调用 API 的脚本里,API 密钥应该放在哪里?

    查看答案

    A. 放在 ANTHROPIC_API_KEY 环境变量里 两个 SDK 默认都读取 ANTHROPIC_API_KEY,密钥就不会出现在代码里,也不会进浏览器。

  3. 为什么要遍历 message.content,而不是直接读 content[0]?

    查看答案

    C. content 是内容块列表,里面可能有 tool_use 或 thinking 这个列表里可以有好几种块,所以要像快速入门那样挑出文本块。

  4. 在当前模型上,设置 temperature 的请求返回 400,该怎么修?

    查看答案

    D. 删掉 temperature、top_p 和 top_k,用提示词来引导 Claude 4.7 及之后的模型不接受这些采样参数,API 版本 2026-10-21 对任何取值都会拒绝。

常见问题

Claude API 免费吗?

不免费。用量按 token 计费,文档在定价页面上给出了每个模型每百万 token 的基础价格。价格会变,所以本课没有写具体数字。

什么时候该选 Haiku 或 Fable,而不是 Opus?

Haiku 适合高并发、对延迟敏感的工作,比如分类、信息抽取和路由。Fable 用于要求很高的推理和长周期的智能体任务,或者 Opus 在更高思考强度下评测仍不达标的时候。

为什么设置 temperature 之后请求返回 400?

Claude 4.7 及之后的模型不接受 temperature、top_p 和 top_k,API 版本 2026-10-21 对任何取值都会拒绝。把它们删掉,用提示词来引导行为。

能从浏览器里直接调用 Claude API 吗?

TypeScript SDK 在 dangerouslyAllowBrowser 之下允许这样做,但这会把你的密钥暴露给每一位访问者。启用了零数据保留或 Compliance API 的组织根本不能这样做,所以请从你自己的后端调用 API。

能不能不重复发送整段历史?

只有 beta 阶段可以。Anthropic 文档里的消息线程,之后的请求只发新消息,线程在最后一次请求五分钟后过期。离开这个 beta,就得每次发送全部历史,第 4 课会讲怎样让它保持精简。

一定要用 SDK 吗,用 curl 行不行?

curl 可以。向 https://api.anthropic.com/v1/messages 发 POST,带上 x-api-key、anthropic-version 和 content-type 请求头。SDK 多提供了重试、带类型的错误和流式辅助方法。

资料来源

  1. Anthropic Docs: Get started with Claude (2026年11月4日 查阅)https://platform.claude.com/docs/en/get-started
  2. Anthropic Docs: Get your Claude API key (2026年11月4日 查阅)https://platform.claude.com/docs/en/get-api-key
  3. Anthropic Docs: Using the Messages API (2026年11月4日 查阅)https://platform.claude.com/docs/en/build-with-claude/working-with-messages
  4. Anthropic Docs: Messages API reference (2026年11月4日 查阅)https://platform.claude.com/docs/en/api/messages/create
  5. Anthropic Docs: Streaming messages (2026年11月4日 查阅)https://platform.claude.com/docs/en/build-with-claude/streaming
  6. Anthropic Docs: Stop reasons and fallback (2026年11月4日 查阅)https://platform.claude.com/docs/en/build-with-claude/handling-stop-reasons
  7. Anthropic Docs: Models overview (2026年11月5日 查阅)https://platform.claude.com/docs/en/models/overview
  8. Anthropic Docs: Claude API errors (2026年11月4日 查阅)https://platform.claude.com/docs/en/api/errors
  9. Anthropic Docs: Python SDK (2026年11月4日 查阅)https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/python
  10. Anthropic Docs: TypeScript SDK (2026年11月4日 查阅)https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/typescript
  11. GitHub: anthropics/anthropic-sdk-python (2026年11月4日 查阅)https://github.com/anthropics/anthropic-sdk-python
  12. GitHub: anthropics/anthropic-sdk-typescript (2026年11月4日 查阅)https://github.com/anthropics/anthropic-sdk-typescript
  13. Claude Docs: Release notes (2026年11月5日 查阅)https://platform.claude.com/docs/en/release-notes/overview
  14. X: ClaudeDevs announces API version 2026-10-21 (2026年11月5日 查阅)https://x.com/ClaudeDevs/status/2113013247209021918
  15. X: ClaudeDevs lists what changes in API version 2026-10-21 (2026年11月5日 查阅)https://x.com/ClaudeDevs/status/2113013248714744208

分享本节课

浏览基于 Claude API 构建的 AI 智能体

看看成品智能体在 Mindket 上怎样打包,再把你在本课程里做出的东西放进自己的上架页面。

浏览 AI 智能体

本节课的 Markdown 版本 · Claude API 实战课:从零构建 AI 智能体 · 全部课程