Claude API完全指南
--- title: "Claude API完全指南" description: "详细介绍Anthropic Claude API的使用方法和高级特性" tags: ["Claude", "Anthropic", "API", "LLM"] category: "llm" icon: "🧠"
Claude API完全指南
Claude简介
Claude是Anthropic开发的大语言模型,以安全性和有用性著称。Claude在推理、编码和长文本处理方面表现出色。
环境配置
# 安装依赖
# pip install anthropic
import anthropic
client = anthropic.Anthropic()
# API密钥从环境变量 ANTHROPIC_API_KEY 读取
Messages API
基础调用
def basic_claude_chat(user_message):
"""基础Claude对话"""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": user_message}
]
)
return message.content[0].text
# 使用
response = basic_claude_chat("解释什么是机器学习")
print(response)
系统提示
def chat_with_system(system_prompt, user_message):
"""带系统提示的对话"""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system=system_prompt,
messages=[
{"role": "user", "content": user_message}
]
)
return message.content[0].text
# 使用
response = chat_with_system(
"你是一位资深的Python开发专家,用简洁的代码回答问题。",
"如何实现一个单例模式?"
)
print(response)
多轮对话
def multi_turn_claude():
"""Claude多轮对话"""
conversation = []
# 第一轮
conversation.append({"role": "user", "content": "什么是Docker?"})
response1 = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=conversation
)
reply1 = response1.content[0].text
conversation.append({"role": "assistant", "content": reply1})
print(f"Claude: {reply1[:100]}...\n")
# 第二轮
conversation.append({"role": "user", "content": "Docker和虚拟机有什么区别?"})
response2 = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=conversation
)
reply2 = response2.content[0].text
print(f"Claude: {reply2[:100]}...")
return conversation
# multi_turn_claude()
高级参数
def advanced_claude_chat(user_message):
"""高级参数配置"""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
temperature=0.7,
top_p=0.9,
top_k=40,
stop_sequences=["\n\n\n"],
system="你是一个有帮助的助手。",
messages=[
{"role": "user", "content": user_message}
]
)
return message.content[0].text
参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
| temperature | 创造性(0-1) | 1.0 |
| top_p | 核采样 | 1.0 |
| top_k | 限制采样词数 | 无限制 |
| max_tokens | 最大输出长度 | 4096 |
| stop_sequences | 停止词列表 | 无 |
流式输出
def stream_claude_chat(user_message):
"""Claude流式输出"""
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": user_message}
]
) as stream:
full_response = ""
for text in stream.text_stream:
print(text, end="", flush=True)
full_response += text
print() # 换行
return full_response
# 使用
# stream_claude_chat("写一个Python快速排序算法")
图像处理
import base64
def analyze_image(image_path, question):
"""分析图像"""
with open(image_path, "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": image_data
}
},
{
"type": "text",
"text": question
}
]
}
]
)
return message.content[0].text
# 使用
# result = analyze_image("photo.jpg", "这张图片里有什么?")
工具使用(Tool Use)
import json
def claude_with_tools(user_message):
"""Claude工具调用"""
tools = [
{
"name": "get_weather",
"description": "获取指定城市的天气信息",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
]
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": user_message}
]
)
# 处理工具调用
for content in response.content:
if content.type == "tool_use":
tool_name = content.name
tool_input = content.input
# 执行工具
result = {"temperature": 25, "condition": "晴"}
# 返回工具结果
final_response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": user_message},
{"role": "assistant", "content": response.content},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": content.id,
"content": json.dumps(result)
}
]
}
]
)
return final_response.content[0].text
return response.content[0].text
# 使用
result = claude_with_tools("北京今天天气怎么样?")
print(result)
长文本处理
def process_long_document(document, instruction):
"""处理长文档"""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
messages=[
{
"role": "user",
"content": f"请分析以下文档:\n\n{document}\n\n任务:{instruction}"
}
]
)
return message.content[0].text
# Claude支持约200K tokens的上下文窗口
批量处理
import asyncio
from anthropic import AsyncAnthropic
async_client = AsyncAnthropic()
async def async_claude_chat(message):
"""异步Claude调用"""
response = await async_client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": message}]
)
return response.content[0].text
async def batch_process(messages):
"""批量处理多个消息"""
tasks = [async_claude_chat(msg) for msg in messages]
results = await asyncio.gather(*tasks)
return results
# 使用
# messages = ["问题1", "问题2", "问题3"]
# results = asyncio.run(batch_process(messages))
安全配置
def safe_claude_chat(user_message):
"""带安全配置的对话"""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="你是一个有帮助且安全的助手。不要生成有害内容。",
messages=[
{"role": "user", "content": user_message}
]
)
return message.content[0].text
成本优化
def optimize_claude_cost(user_message, use_haiku=True):
"""根据任务选择模型优化成本"""
if use_haiku and len(user_message) < 200:
model = "claude-3-haiku-20240307" # 更便宜
else:
model = "claude-sonnet-4-20250514" # 更强大
response = client.messages.create(
model=model,
max_tokens=1024,
messages=[{"role": "user", "content": user_message}]
)
# 成本估算
usage = response.usage
if model == "claude-sonnet-4-20250514":
cost = (usage.input_tokens * 3 + usage.output_tokens * 15) / 1_000_000
else:
cost = (usage.input_tokens * 0.25 + usage.output_tokens * 1.25) / 1_000_000
return response.content[0].text, cost
错误处理
import time
from anthropic import APIError, RateLimitError
def safe_claude_call(messages, max_retries=3):
"""安全的Claude API调用"""
for attempt in range(max_retries):
try:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=messages
)
return response.content[0].text
except RateLimitError:
print(f"速率限制,等待中... (尝试 {attempt + 1})")
time.sleep(2 ** attempt)
except APIError as e:
print(f"API错误: {e}")
return None
return None
总结
Claude API提供了强大的语言模型能力,特别在长文本处理和安全对齐方面表现突出。通过掌握其API特性和最佳实践,可以构建高质量的AI应用。