如何在 Python 中使用 Claude API
Source: Dev.to
你有一个 Python 脚本。你希望它能思考。
这就是整个前提。本教程展示如何将你的代码连接到 Claude — Anthropic 的 AI 模型 — 使其能够在你的项目中读取、推理并作出响应。
我在自己花了一个下午弄清楚后写了这篇。无需任何 AI 经验。如果你以前写过 Python 函数,就可以跟着做。
开始之前
有两件事值得提前了解。
-
API 需要付费。
并不多——$5 就能支撑数周的正常使用——但它不像 Claude.ai 聊天界面那样免费。你需要在 处充值。 -
你需要 Python 3.9 或更高版本。
检查你的版本:python --version如果低于 3.9,请在 处更新。
在 Windows 上,安装时务必勾选 “Add Python to PATH”;如果跳过会导致所有功能失效。
设置
创建一个文件夹,设置虚拟环境并安装 SDK。
mkdir claude-project
cd claude-project
python -m venv venv
激活环境:
# macOS / Linux
source venv/bin/activate
# Windows
venv\Scripts\activate
你的终端提示符现在应该以 (venv) 开头。这就是它已激活的标志。如果在未激活 venv 的情况下安装包,它们会被放到错误的位置。
pip install anthropic python-dotenv
您的 API 密钥
-
前往,创建账户,并在 API Keys 下生成密钥。
-
将其存放在项目文件夹中的
.env文件里:ANTHROPIC_API_KEY=your-key-here -
将该文件排除在版本控制之外:
echo .env > .gitignore
为什么? 公共的 API 密钥会在数小时内被发现、使用并产生费用。
Source:
第一次调用
下面展示了在 Python 中与 Claude 对话的示例:
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv()
client = Anthropic()
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "What is a REST API?"
}
]
)
print(message.content[0].text)
运行脚本——Claude 会在终端中给出回答。
关于此调用需要了解的三件事
| 参数 | 含义 |
|---|---|
model | 使用的 Claude 版本。claude-sonnet-4-6 是大多数用例的默认选择——快速且功能强大。 |
max_tokens | Claude 响应的最大长度。设置得太低会导致回复在句子中途被截断。1024 是一个安全的起始值。 |
messages | 对话中的回合列表。每个回合都有一个 role(user 表示你的消息,assistant 表示 Claude)。 |
返回的内容
响应对象不仅仅包含文本:
print(message.content[0].text) # Claude's response
print(message.stop_reason) # Why it stopped — usually "end_turn"
print(message.usage.input_tokens) # Tokens in your message
print(message.usage.output_tokens) # Tokens in Claude's reply
Token 大致相当于一个词。关注它们很重要,因为这关系到你的费用。
为 Claude 指定角色
默认情况下,Claude 是一个通用助理。系统提示 可以改变这一点。可以把它看作是在对话开始前给出的简报:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a Python code reviewer. Be direct. Point out issues first, then explain why.",
messages=[
{
"role": "user",
"content": "Review this: for i in range(len(my_list)): print(my_list[i])"
}
]
)
print(message.content[0].text)
相同的模型,却表现出完全不同的行为。系统提示是实现大部分真实控制的关键所在。
对话
API 没有记忆。每次调用都会重新开始,除非你自行传入历史记录。
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv()
client = Anthropic()
history = []
def chat(message: str) -> str:
# Add the user message to the history
history.append({"role": "user", "content": message})
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a helpful programming assistant.",
messages=history
)
# Extract Claude's reply and add it to the history
reply = response.content[0].text
history.append({"role": "assistant", "content": reply})
return reply
print(chat("What is a decorator in Python?"))
print(chat("Show me a real example."))
print(chat("How would that work in Flask?"))
每次调用都会传入完整的 history。Claude 会读取它,理解上下文,并继续对话。
常见错误: 只追加了用户消息,却忘记追加 Claude 的回复。如果这样做,下一次请求就没有上下文,Claude 会像对话从未发生过一样作答。
流式传输
等待完整响应后再打印任何内容对脚本来说没问题,但对任何面向用户的场景,流式传输的体验要好得多。
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv()
client = Anthropic()
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Explain recursion simply."}
]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
文本会逐个 token 显示,给人一种实时对话的感觉。
实时流式传输
不必等待,文字会在 Claude 生成时即时出现——这正是 Claude.ai 界面中提供的体验。
实际案例
这里有一个值得保留的函数。它可以对你传入的任何文本进行摘要:
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv()
client = Anthropic()
def summarize(text: str, sentences: int = 3) -> str:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
system=f"Summarize the following text in {sentences} sentences. Return only the summary.",
messages=[{"role": "user", "content": text}]
)
return response.content[0].text
article = """
The James Webb Space Telescope has captured the deepest infrared image
of the universe ever taken. The image covers a patch of sky approximately
the size of a grain of sand held at arm's length. It contains thousands
of galaxies, some of which formed less than a billion years after the
Big Bang. Scientists believe this data will reshape our understanding
of how the earliest galaxies formed and evolved.
"""
print(summarize(article, sentences=2))
更改系统提示后,它可以变成翻译器、分类器或数据提取器。模式始终相同。
处理错误
网络会失败。速率限制会出现。包装你的调用:
from dotenv import load_dotenv
from anthropic import Anthropic, APIError, RateLimitError, APIConnectionError
load_dotenv()
client = Anthropic()
def ask(question: str) -> str:
try:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": question}]
)
return response.content[0].text
except RateLimitError:
return "Rate limit reached. Wait a moment and try again."
except APIConnectionError:
return "Connection failed. Check your internet."
except APIError as e:
return f"API error {e.status_code}."
选择模型
| 模型 | 使用场景 |
|---|---|
claude-sonnet-4-6 | 大多数情况。快速、能力强、性价比高 |
claude-opus-4-6 | 需要深度推理的难题 |
claude-haiku-4-5-20251001 | 大批量、简单任务,成本最低 |
首先使用 Sonnet。如有需要可切换。
会让你措手不及的事项
- API 是收费的。Claude.ai 的网页 UI 不收费。开始前请先充值。
load_dotenv()不会自行调用。如果你的密钥没有加载,可能就是这个原因。max_tokens设置得太低会导致回复在思路中途被截断。如果答案感觉不完整,请调高它。- 对话历史需要双方:用户消息 以及 Claude 的回复。缺少任意一方上下文都会中断。
- 在 macOS/Linux 上,
python可能指向 Python 2。如果出现异常,请使用python3。
接下来
基础已经就绪。它的去向取决于你在构建什么。
- 工具使用 让 Claude 调用你自己的 Python 函数——在需要它与真实数据或外部服务交互时非常有用。
- 视觉 让你可以同时发送图像和文本,使 Claude 能读取截图、图表或文档。
- 异步支持 通过
AsyncAnthropic实现,如果你一次处理多个请求,值得探索。
完整文档位于 。
十行代码实现全部功能
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv()
client = Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Your message here."}]
)
print(response.content[0].text)