想用Python调用GPT-4、Claude、Gemini?本文一篇搞定所有主流AI大模型的接入方式,代码可直接复制运行。
一、环境准备
# 安装官方SDK
pip install openai anthropic google-generativeai
# 如果用统一API中转(推荐)
pip install openai # 只需要这一个就够了
二、OpenAI GPT-4 调用
from openai import OpenAI
client = OpenAI(api_key="sk-xxxxx")
# 基础调用
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一个Python专家"},
{"role": "user", "content": "用Python实现快速排序,要求有详细注释"}
],
temperature=0.7,
max_tokens=2000
)
print(response.choices[0].message.content)
# 流式输出(打字机效果)
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "讲一个故事"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
# 多轮对话
messages = [
{"role": "system", "content": "你是一个有帮助的助手"},
]
while True:
user_input = input("你: ")
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
reply = response.choices[0].message.content
messages.append({"role": "assistant", "content": reply})
print(f"AI: {reply}")
三、Anthropic Claude 调用
import anthropic
client = anthropic.Anthropic(api_key="sk-ant-xxxxx")
# 基础调用
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=4096,
system="你是一个Python专家",
messages=[
{"role": "user", "content": "用Python实现二分查找"}
]
)
print(message.content[0].text)
# 流式输出
with client.messages.stream(
model="claude-3-5-sonnet-20241022",
max_tokens=4096,
messages=[{"role": "user", "content": "解释Python装饰器"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
四、Google Gemini 调用
import google.generativeai as genai
genai.configure(api_key="AIza-xxxxx")
model = genai.GenerativeModel("gemini-1.5-pro")
# 基础调用
response = model.generate_content("用Python实现LRU缓存")
print(response.text)
# 多轮对话
chat = model.start_chat(history=[])
response = chat.send_message("你好")
print(response.text)
response = chat.send_message("用Python写一个爬虫")
print(response.text)
五、统一API中转(推荐)
如果你想用一个Key调用所有模型,可以用兼容OpenAI格式的API中转:
from openai import OpenAI
# 一个Key调用所有模型
client = OpenAI(
api_key="your-unified-key",
base_url="https://ne.07fa.cc/v1"
)
# 调用GPT-4
gpt_response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}]
)
# 调用Claude(同一个client,只改model)
claude_response = client.chat.completions.create(
model="claude-3-5-sonnet-20241022",
messages=[{"role": "user", "content": "你好"}]
)
# 调用Gemini
gemini_response = client.chat.completions.create(
model="gemini-1.5-pro",
messages=[{"role": "user", "content": "你好"}]
)
六、错误处理
from openai import OpenAI, APIError, RateLimitError, Timeout
client = OpenAI(api_key="sk-xxxxx")
try:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}],
timeout=30 # 30秒超时
)
except RateLimitError:
print("请求太频繁,请稍后重试")
except APIError as e:
print(f"API错误: {e}")
except Timeout:
print("请求超时")
except Exception as e:
print(f"未知错误: {e}")
七、并发调用(批量处理)
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key="sk-xxxxx")
async def call_api(prompt):
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
async def batch_call(prompts):
tasks = [call_api(p) for p in prompts]
return await asyncio.gather(*tasks)
# 批量调用
prompts = ["问题1", "问题2", "问题3", "问题4", "问题5"]
results = asyncio.run(batch_call(prompts))
for r in results:
print(r)
八、实用技巧
1. Token计算:用
2. 重试机制:设置指数退避重试,处理临时故障
3. 缓存:对相同问题缓存结果,节省API费用
4. 日志:记录每次调用的token消耗,监控成本
tiktoken 库计算token数量,避免超出限制2. 重试机制:设置指数退避重试,处理临时故障
3. 缓存:对相同问题缓存结果,节省API费用
4. 日志:记录每次调用的token消耗,监控成本
九、总结
| 模型 | SDK | 价格 | 推荐场景 |
|---|---|---|---|
| GPT-4o | openai | $15/1M tokens | 通用任务 |
| Claude 3.5 | anthropic | $3/1M tokens | 长文本、代码 |
| Gemini 1.5 | google-generativeai | $7/1M tokens | 多模态 |
| 统一API | openai | 比官方便宜30% | 所有场景 |
建议先用统一API中转服务,一个Key调用所有模型,价格更低,接入更简单。