← 返回首页
🧠

Claude API完全指南

📂 llm ⏱ 3 min 565 words

--- 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应用。