LLM API调用实战
--- 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密钥的安全管理。