Claude API接入实战:从申请 Key 到 Python、Node.js 源码调用教程
Claude API接口调用教程|附源码
随着大语言模型在内容生成、代码开发、数据分析、智能客服、知识库问答等场景中的广泛应用,越来越多开发者开始将 AI 能力集成到自己的产品或业务系统中。Claude 是 Anthropic 推出的大语言模型系列,以较强的长文本理解能力、自然语言交互能力和代码辅助能力受到不少开发者关注。
本文将以实战教程的形式,系统讲解如何调用 Claude API,包括账号准备、API Key 配置、接口请求格式、Python 调用示例、Node.js 调用示例、流式输出、常见错误处理以及项目封装建议,并附带可直接运行的源码示例,帮助你快速完成 Claude API 的接入。
一、Claude API是什么?
Claude API 是 Anthropic 提供的模型调用接口,开发者可以通过 HTTP 请求或官方 SDK 与 Claude 模型进行交互。简单来说,你可以把 Claude 当作一个远程 AI 服务,通过发送用户输入、系统提示词、上下文消息等内容,让模型返回对应结果。
Claude API 常见用途包括:
- AI 聊天机器人
- 文档总结与提炼
- 代码生成与代码解释
- 多轮对话系统
- 客服自动回复
- 知识库问答
- 文案生成
- 数据分析辅助
- 工作流自动化
Claude API 通常采用“消息式”调用方式,即通过 messages 数组传递对话内容。开发者可以指定模型、最大输出长度、系统提示词、温度参数等,从而控制模型回复的风格和内容长度。
二、调用Claude API前的准备工作
在正式调用接口之前,需要完成以下准备。
1. 注册Anthropic账号
首先需要访问 Anthropic 官方平台,注册开发者账号。注册完成后,进入控制台创建 API Key。
通常你需要完成以下步骤:
- 登录 Anthropic Console;
- 创建或选择一个 Workspace;
- 进入 API Keys 页面;
- 点击创建新的 API Key;
- 复制生成的 Key 并妥善保存。
注意:API Key 只会显示一次,建议复制后立即保存到安全位置,例如服务器环境变量、密钥管理系统或
.env文件中。
2. 准备开发环境
本文将分别演示以下调用方式:
- 使用
curl直接调用; - 使用 Python 调用;
- 使用 Node.js 调用;
- 使用流式输出获取结果。
你可以根据自己的项目技术栈选择合适的方式。
3. 安全保存API Key
不要把 API Key 直接写死在代码中,更不要上传到 GitHub、Gitee 等公开代码仓库。
推荐使用环境变量:
export ANTHROPIC_API_KEY="你的Claude API Key"
如果使用 Windows PowerShell,可以执行:
$env:ANTHROPIC_API_KEY="你的Claude API Key"
如果是项目开发,也可以使用 .env 文件:
ANTHROPIC_API_KEY=你的Claude API Key
然后通过程序读取环境变量。
三、Claude API基础请求结构
Claude API 的核心调用接口通常是:
POST https://api.anthropic.com/v1/messages
常见请求头如下:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
在部分 Anthropic API 文档或旧版本调用中,也可能看到类似:
x-api-key: YOUR_API_KEY
anthropic-version: 2023-06-01
实际使用时请以官方最新文档为准。为了兼容多数示例,本文示例会使用 Anthropic 官方常见的 x-api-key 与 anthropic-version 请求头形式。
一个典型请求体如下:
{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "请用中文介绍一下Claude API的作用。"
}
]
}
其中常用字段说明如下:
| 字段 | 类型 | 说明 |
|---|---|---|
model |
string | 指定使用的 Claude 模型 |
max_tokens |
number | 最大输出 token 数 |
messages |
array | 对话消息列表 |
role |
string | 消息角色,常见为 user、assistant |
content |
string/array | 消息内容 |
system |
string | 系统提示词,用于约束模型行为 |
temperature |
number | 控制输出随机性,值越高越发散 |
stream |
boolean | 是否开启流式输出 |
四、使用curl调用Claude API
如果你想快速测试 API 是否可用,可以先使用 curl 命令。
示例代码
curl https://api.anthropic.com/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "请用中文写一段关于人工智能发展的简介。"
}
]
}'
如果请求成功,你会得到类似下面的返回结果:
{
"id": "msg_xxx",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20241022",
"content": [
{
"type": "text",
"text": "人工智能是计算机科学的重要分支..."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 20,
"output_tokens": 120
}
}
真正的回复内容通常在:
content[0].text
五、Python调用Claude API完整源码
下面我们使用 Python 编写一个完整示例。
1. 安装依赖
可以使用官方 SDK:
pip install anthropic
如果你想读取 .env 文件,也可以安装:
pip install python-dotenv
2. Python基础调用示例
新建文件 claude_demo.py:
import os
from anthropic import Anthropic
def main():
api_key = os.getenv("ANTHROPIC_API_KEY")
if not api_key:
raise ValueError("请先设置环境变量 ANTHROPIC_API_KEY")
client = Anthropic(api_key=api_key)
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "请用中文介绍Claude API,并给出三个典型应用场景。"
}
]
)
print(response.content[0].text)
if __name__ == "__main__":
main()
运行代码:
python claude_demo.py
如果配置无误,终端会输出 Claude 返回的中文内容。
六、Python封装成通用函数
在实际项目中,我们不建议每次都重复写创建客户端、构造消息、解析结果等代码。可以封装成一个通用函数。
完整源码:claude_client.py
import os
from typing import List, Dict, Optional
from anthropic import Anthropic
class ClaudeClient:
def __init__(
self,
api_key: Optional[str] = None,
model: str = "claude-3-5-sonnet-20241022"
):
self.api_key = api_key or os.getenv("ANTHROPIC_API_KEY")
if not self.api_key:
raise ValueError("缺少 ANTHROPIC_API_KEY,请检查环境变量或初始化参数")
self.model = model
self.client = Anthropic(api_key=self.api_key)
def chat(
self,
user_message: str,
system_prompt: Optional[str] = None,
max_tokens: int = 1024,
temperature: float = 0.7
) -> str:
kwargs = {
"model": self.model,
"max_tokens": max_tokens,
"temperature": temperature,
"messages": [
{
"role": "user",
"content": user_message
}
]
}
if system_prompt:
kwargs["system"] = system_prompt
response = self.client.messages.create(**kwargs)
if not response.content:
return ""
return response.content[0].text
if __name__ == "__main__":
claude = ClaudeClient()
result = claude.chat(
user_message="请生成一份Python学习路线图。",
system_prompt="你是一名资深Python讲师,回答要清晰、结构化、适合初学者。",
max_tokens=1500
)
print(result)
这个封装类有几个优点:
- API Key 自动从环境变量读取;
- 支持自定义模型;
- 支持系统提示词;
- 支持设置最大输出长度;
- 支持设置
temperature; - 调用方式更简洁。
在项目中可以这样使用:
from claude_client import ClaudeClient
claude = ClaudeClient()
answer = claude.chat("帮我写一个MySQL分页查询SQL示例。")
print(answer)
七、Python多轮对话示例
Claude API 的多轮对话通常通过 messages 数组传递历史上下文。
例如:
import os
from anthropic import Anthropic
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
messages = [
{
"role": "user",
"content": "我正在学习Python,请推荐一个练手项目。"
},
{
"role": "assistant",
"content": "你可以尝试开发一个命令行待办事项管理工具。"
},
{
"role": "user",
"content": "请给出这个项目的核心功能和目录结构。"
}
]
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1200,
messages=messages
)
print(response.content[0].text)
多轮对话的关键是:你需要把之前的用户问题和模型回答一起传给 API。模型本身不会永久记住你的会话状态,除非你的应用在本地或数据库中保存历史记录,并在下一次请求时重新传入。
八、Python流式输出示例
在聊天应用中,如果等模型完整生成后再展示,用户可能会感觉响应较慢。因此很多产品会使用“流式输出”,让模型边生成边返回,类似打字机效果。
流式输出源码
import os
from anthropic import Anthropic
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
with client.messages.stream(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "请用中文写一篇300字左右的端午节介绍。"
}
]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
流式输出适合以下场景:
- Web 聊天窗口;
- 客服机器人;
- 实时代码生成;
- 长文章生成;
- 语音助手文本展示;
- AI 写作工具。
九、Node.js调用Claude API完整源码
如果你的项目使用 JavaScript 或 TypeScript,也可以通过 Node.js 调用 Claude API。
1. 初始化项目
mkdir claude-node-demo
cd claude-node-demo
npm init -y
安装依赖:
npm install @anthropic-ai/sdk dotenv
2. 配置环境变量
在项目根目录创建 .env 文件:
ANTHROPIC_API_KEY=你的Claude API Key
3. Node.js基础调用示例
新建 index.js:
require("dotenv").config();
const Anthropic = require("@anthropic-ai/sdk");
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
async function main() {
if (!process.env.ANTHROPIC_API_KEY) {
throw new Error("请先在 .env 文件中配置 ANTHROPIC_API_KEY");
}
const response = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [
{
role: "user",
content: "请用中文说明如何在Node.js中调用Claude API。"
}
]
});
console.log(response.content[0].text);
}
main().catch((error) => {
console.error("调用Claude API失败:", error);
});
运行:
node index.js
十、Node.js封装调用方法
为了方便在业务项目中复用,可以封装一个通用方法。
完整源码:claudeClient.js
require("dotenv").config();
const Anthropic = require("@anthropic-ai/sdk");
class ClaudeClient {
constructor(options = {}) {
this.apiKey = options.apiKey || process.env.ANTHROPIC_API_KEY;
this.model = options.model || "claude-3-5-sonnet-20241022";
if (!this.apiKey) {
throw new Error("缺少 ANTHROPIC_API_KEY,请检查环境变量");
}
this.client = new Anthropic({
apiKey: this.apiKey,
});
}
async chat({
message,
systemPrompt = "",
maxTokens = 1024,
temperature = 0.7,
}) {
const params = {
model: this.model,
max_tokens: maxTokens,
temperature,
messages: [
{
role: "user",
content: message,
},
],
};
if (systemPrompt) {
params.system = systemPrompt;
}
const response = await this.client.messages.create(params);
if (!response.content || response.content.length === 0) {
return "";
}
return response.content[0].text;
}
}
module.exports = ClaudeClient;
使用示例 app.js:
const ClaudeClient = require("./claudeClient");
async function run() {
const claude = new ClaudeClient();
const result = await claude.chat({
message: "请帮我写一个Express接口示例,用于接收用户问题并返回AI回答。",
systemPrompt: "你是一名资深Node.js后端工程师,回答要包含代码示例。",
maxTokens: 1500,
});
console.log(result);
}
run().catch(console.error);
运行:
node app.js
十一、Node.js流式输出示例
流式输出在 Node.js 中同样非常实用,尤其适合 Web 服务中通过 SSE 或 WebSocket 转发给前端。
require("dotenv").config();
const Anthropic = require("@anthropic-ai/sdk");
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
async function main() {
const stream = await anthropic.messages.stream({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [
{
role: "user",
content: "请用中文写一段关于程序员职业发展的建议。",
},
],
});
for await (const text of stream.textStream) {
process.stdout.write(text);
}
}
main().catch(console.error);
十二、在Express中接入Claude API
下面给出一个更贴近实际业务的例子:创建一个 HTTP 接口,前端传入问题,后端调用 Claude API 并返回结果。
安装依赖
npm install express cors dotenv @anthropic-ai/sdk
完整源码:server.js
require("dotenv").config();
const express = require("express");
const cors = require("cors");
const Anthropic = require("@anthropic-ai/sdk");
const app = express();
app.use(cors());
app.use(express.json());
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
app.post("/api/chat", async (req, res) => {
try {
const { message } = req.body;
if (!message) {
return res.status(400).json({
success: false,
message: "message不能为空",
});
}
const response = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
system: "你是一个中文AI助手,回答要准确、清晰、简洁。",
messages: [
{
role: "user",
content: message,
},
],
});
const answer = response.content?.[0]?.text || "";
res.json({
success: true,
data: {
answer,
usage: response.usage,
},
});
} catch (error) {
console.error("Claude API调用失败:", error);
res.status(500).json({
success: false,
message: "服务器内部错误,Claude API调用失败",
});
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`服务已启动:http://localhost:${PORT}`);
});
启动服务:
node server.js
请求测试:
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-d '{"message":"请解释一下什么是RESTful API"}'
十三、常见参数详解
1. model
model 表示使用哪个 Claude 模型。不同模型在性能、速度、成本、上下文长度方面可能不同。
示例:
"model": "claude-3-5-sonnet-20241022"
实际开发中建议将模型名称放到配置文件或环境变量中,方便后续切换。
2. max_tokens
max_tokens 表示模型最多生成多少 token。它不是字符数,也不是中文汉字数。
如果设置太小,回答可能会被截断;如果设置太大,成本可能增加。
"max_tokens": 1024
3. temperature
temperature 用于控制输出随机性。
- 较低值:更稳定、更严谨,适合代码、法律、数据分析;
- 较高值:更有创意,适合文案、故事、营销内容。
常见设置:
"temperature": 0.3
或:
"temperature": 0.8
4. system
system 是系统提示词,用来定义模型角色、输出格式和回答边界。
例如:
"system": "你是一名资深Java架构师,请用专业但易懂的方式回答问题。"
系统提示词非常重要,它可以明显提升输出质量。比如你希望模型固定返回 JSON,就可以在系统提示词中说明:
你只返回合法JSON,不要输出Markdown,不要添加解释文字。
十四、常见错误与解决方案
1. API Key无效
常见报错可能包括:
authentication_error
解决方法:
- 检查 API Key 是否复制完整;
- 确认环境变量是否生效;
- 确认没有多余空格或换行;
- 检查 Key 是否被删除或禁用。
2. 模型名称错误
如果模型名称填写错误,可能会出现模型不存在或无权限访问的错误。
解决方法:
- 查看官方文档中的最新模型名称;
- 确认当前账号是否有权限调用该模型;
- 将模型名称配置化,避免硬编码。
3. 请求频率过高
如果短时间大量请求,可能触发限流。
解决方法:
- 增加重试机制;
- 使用指数退避策略;
- 控制并发数量;
- 对用户请求进行排队;
- 缓存重复问题的回答。
4. 输出内容被截断
如果回答末尾突然停止,可能是 max_tokens 设置太小。
解决方法:
- 增大
max_tokens; - 让模型分段输出;
- 对长任务拆分处理;
- 使用流式输出提升体验。
十五、调用Claude API的最佳实践
1. 不要在前端直接暴露API Key
这是非常重要的一点。不要在浏览器端、App端、小程序端直接调用 Claude API,因为这样会导致 API Key 泄露。
正确做法是:
前端 -> 你的后端服务 -> Claude API
由后端统一保存 API Key,并对用户请求进行鉴权、限流和日志记录。
2. 对输入内容做校验
用户输入可能为空、过长,甚至包含恶意内容。建议在后端进行校验:
- 判断是否为空;
- 限制最大长度;
- 过滤明显异常请求;
- 根据业务场景做内容安全检查。
3. 控制上下文长度
多轮对话需要传入历史消息,但如果历史内容过多,会增加成本并降低响应速度。
建议:
- 只保留最近若干轮对话;
- 对历史对话做摘要;
- 将长期记忆存入数据库或向量库;
- 根据问题动态检索相关上下文。
4. 增加异常处理和重试
生产环境中,网络波动、限流、服务异常都可能导致请求失败。建议增加重试机制。
Python 简单重试示例:
import time
def retry_call(func, retries=3, delay=1):
for i in range(retries):
try:
return func()
except Exception as e:
if i == retries - 1:
raise e
time.sleep(delay * (2 ** i))
5. 记录usage用于成本统计
Claude API 返回中通常包含 usage 字段,例如:
"usage": {
"input_tokens": 100,
"output_tokens": 300
}
建议在生产系统中记录:
- 用户 ID;
- 请求时间;
- 输入 token;
- 输出 token;
- 使用模型;
- 请求场景;
- 请求是否成功。
这样可以帮助你分析成本、优化提示词和控制预算。
十六、完整项目目录建议
如果你要在真实项目中集成 Claude API,可以参考下面的目录结构。
Python项目结构
claude-python-project/
├── .env
├── requirements.txt
├── main.py
├── claude_client.py
└── README.md
requirements.txt 示例:
anthropic
python-dotenv
Node.js项目结构
claude-node-project/
├── .env
├── package.json
├── server.js
├── claudeClient.js
└── README.md
十七、总结
本文从零开始介绍了 Claude API 的调用方法,并给出了 curl、Python、Node.js、Express 后端接口、流式输出等多种源码示例。
整体接入流程可以概括为:
- 注册 Anthropic 账号;
- 创建 API Key;
- 将 API Key 保存到环境变量;
- 选择合适的模型;
- 构造
messages请求; - 调用 Claude API;
- 解析
content[0].text; - 在业务系统中加入异常处理、限流、日志和成本统计。
对于个人开发者,可以先用 Python 或 Node.js 快速测试;对于企业项目,建议通过后端服务统一封装 Claude API,并结合鉴权、权限控制、日志审计、上下文管理和费用监控,构建稳定可靠的 AI 应用。
只要掌握了本文中的示例代码,你就可以很快把 Claude API 集成到自己的聊天机器人、AI 写作工具、代码助手或企业知识库系统中。