← 返回首页
🧠

LLM API调用实战

📂 llm ⏱ 3 min 498 words

--- title: "LLM API调用实战" description: "全面介绍如何调用主流大语言模型API,包括OpenAI、Claude、国产模型等" tags: ["LLM API", "API调用", "OpenAI", "Claude"] category: "llm" icon: "🧠"

LLM API调用实战

主流LLM API概览

# API服务商对比
providers = {
    "OpenAI": {"models": ["gpt-4o", "gpt-4o-mini"], "base_url": "https://api.openai.com/v1"},
    "Claude": {"models": ["claude-sonnet-4-20250514", "claude-3-haiku-20240307"], "base_url": "https://api.anthropic.com"},
    "通义千问": {"models": ["qwen-turbo", "qwen-plus"], "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1"},
    "智谱AI": {"models": ["glm-4", "glm-4-flash"], "base_url": "https://open.bigmodel.cn/api/paas/v4"},
}

OpenAI API调用

基础配置

from openai import OpenAI
import os

# 设置API密钥
os.environ["OPENAI_API_KEY"] = "your-api-key"

client = OpenAI()

# 基础对话
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个有帮助的助手。"},
        {"role": "user", "content": "什么是机器学习?"}
    ],
    temperature=0.7,
    max_tokens=1000
)

print(response.choices[0].message.content)

流式输出

def stream_chat(messages, model="gpt-4o"):
    """流式输出对话"""
    stream = client.chat.completions.create(
        model=model,
        messages=messages,
        stream=True
    )
    
    full_response = ""
    for chunk in stream:
        if chunk.choices[0].delta.content:
            content = chunk.choices[0].delta.content
            print(content, end="", flush=True)
            full_response += content
    
    return full_response

# 使用示例
messages = [{"role": "user", "content": "用Python写一个快速排序算法"}]
response = stream_chat(messages)

结构化输出

from pydantic import BaseModel

class ProductReview(BaseModel):
    sentiment: str  # positive/negative/neutral
    score: int      # 1-5
    keywords: list[str]
    summary: str

def analyze_review(review_text: str) -> ProductReview:
    """使用结构化输出分析产品评价"""
    response = client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": "分析用户评价并返回结构化数据。"},
            {"role": "user", "content": f"评价内容:{review_text}"}
        ],
        response_format=ProductReview
    )
    
    return response.choices[0].message.parsed

# 使用
review = "这个产品质量很好,物流也快,下次还会购买!"
result = analyze_review(review)
print(f"情感: {result.sentiment}, 评分: {result.score}")

Claude API调用

基础配置

import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "解释什么是Transformer架构"}
    ]
)

print(message.content[0].text)

系统提示

def claude_chat(user_message, system_prompt=None):
    """Claude对话"""
    kwargs = {
        "model": "claude-sonnet-4-20250514",
        "max_tokens": 1024,
        "messages": [{"role": "user", "content": user_message}]
    }
    
    if system_prompt:
        kwargs["system"] = system_prompt
    
    message = client.messages.create(**kwargs)
    return message.content[0].text

# 使用系统提示
response = claude_chat(
    "写一首关于春天的诗",
    system_prompt="你是一位专业的诗人,擅长写优美的现代诗。"
)
print(response)

长文本处理

def process_long_document(document, question):
    """处理长文档并回答问题"""
    message = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=2048,
        messages=[
            {"role": "user", "content": f"请分析以下文档并回答问题:\n\n{document}\n\n问题:{question}"}
        ]
    )
    return message.content[0].text

国产模型API

通义千问

from openai import OpenAI

# 使用兼容OpenAI的接口
qwen_client = OpenAI(
    api_key="your-dashscope-api-key",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

response = qwen_client.chat.completions.create(
    model="qwen-turbo",
    messages=[
        {"role": "system", "content": "你是一个有帮助的助手。"},
        {"role": "user", "content": "介绍一下杭州的著名景点"}
    ]
)

print(response.choices[0].message.content)

智谱AI (GLM)

from openai import OpenAI

zhipu_client = OpenAI(
    api_key="your-zhipu-api-key",
    base_url="https://open.bigmodel.cn/api/paas/v4"
)

response = zhipu_client.chat.completions.create(
    model="glm-4",
    messages=[
        {"role": "user", "content": "用Python实现一个简单的web服务器"}
    ]
)

print(response.choices[0].message.content)

统一封装

class LLMClient:
    """统一的LLM API客户端"""
    
    def __init__(self, provider="openai", model=None, api_key=None):
        self.provider = provider
        self.model = model or self._default_model()
        
        if provider == "openai":
            self.client = OpenAI(api_key=api_key)
        elif provider == "claude":
            self.client = anthropic.Anthropic(api_key=api_key)
        elif provider == "qwen":
            self.client = OpenAI(
                api_key=api_key,
                base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
            )
        elif provider == "zhipu":
            self.client = OpenAI(
                api_key=api_key,
                base_url="https://open.bigmodel.cn/api/paas/v4"
            )
    
    def _default_model(self):
        defaults = {
            "openai": "gpt-4o",
            "claude": "claude-sonnet-4-20250514",
            "qwen": "qwen-turbo",
            "zhipu": "glm-4"
        }
        return defaults.get(self.provider, "gpt-4o")
    
    def chat(self, messages, temperature=0.7, max_tokens=1000, **kwargs):
        """统一的对话接口"""
        if self.provider == "claude":
            system_msg = ""
            user_msgs = []
            for msg in messages:
                if msg["role"] == "system":
                    system_msg = msg["content"]
                else:
                    user_msgs.append(msg)
            
            response = self.client.messages.create(
                model=self.model,
                max_tokens=max_tokens,
                system=system_msg,
                messages=user_msgs
            )
            return response.content[0].text
        else:
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=temperature,
                max_tokens=max_tokens,
                **kwargs
            )
            return response.choices[0].message.content

# 使用示例
llm = LLMClient(provider="openai")
response = llm.chat([
    {"role": "user", "content": "你好!"}
])
print(response)

错误处理与重试

import time
from functools import wraps

def retry_with_backoff(max_retries=3, backoff_factor=2):
    """带指数退避的重试装饰器"""
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            for attempt in range(max_retries):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    if attempt == max_retries - 1:
                        raise
                    wait_time = backoff_factor ** attempt
                    print(f"请求失败,{wait_time}秒后重试... (尝试 {attempt + 1}/{max_retries})")
                    time.sleep(wait_time)
        return wrapper
    return decorator

@retry_with_backoff(max_retries=3)
def robust_chat(messages, model="gpt-4o"):
    """健壮的对话函数"""
    return client.chat.completions.create(
        model=model,
        messages=messages
    )

# 使用
response = robust_chat([{"role": "user", "content": "测试"}])

总结

掌握LLM API调用是开发AI应用的基础。通过统一的客户端封装、错误处理和重试机制,可以构建稳定可靠的大语言模型应用。在实际开发中,应根据需求选择合适的模型服务商,并注意API密钥的安全管理。