aisuite实战指南:Andrew Ng出品,5分钟用一套代码调用所有大模型API
你受够了每个AI模型都要配一套不同的SDK吗?OpenAI用openai库,Anthropic用anthropic库,Google用google-generativeai……Andrew Ng团队的aisuite用一个接口解决了这个问题
aisuite是由Andrew Ng(吴恩达)团队开发的Python库,目前在GitHub上拥有超过15000颗星。它的核心设计理念很简单:一套代码,调用所有大模型。支持OpenAI、Anthropic、Google Gemini、Mistral、DeepSeek等主流厂商,切换模型只需要改一行字符串。
为什么需要aisuite?
在实际开发中,我们经常需要在不同模型之间切换——测试不同模型的输出质量、根据成本和延迟选择最优方案、做模型输出的A/B对比。如果每个模型都要写一套不同的API调用代码,维护成本会迅速失控。
aisuite解决了这个痛点:所有模型共享同一套`chat.completions.create()`接口,底层自动处理各个厂商的API差异。
快速上手:4步跑通
### 第1步:安装
pip install aisuite
### 第2步:配置API密钥
# 在终端中设置环境变量
export OPENAI_API_KEY="your-openai-key"
export ANTHROPIC_API_KEY="your-anthropic-key"
export GOOGLE_API_KEY="your-google-key"
或者在Python代码中创建一个`.env`文件,然后加载:
from dotenv import load_dotenv
load_dotenv()
### 第3步:基础调用——用同一段代码调用不同模型
import aisuite as ai
# 创建客户端
client = ai.Client()
# 定义消息
messages = [
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "用一句话解释什么是Transformer架构。"}
]
# 调用OpenAI
response = client.chat.completions.create(
model="openai:gpt-4o",
messages=messages
)
print(f"OpenAI: {response.choices[0].message.content}")
# 切换模型只需要改model参数
response = client.chat.completions.create(
model="anthropic:claude-sonnet-4-20250514",
messages=messages
)
print(f"Claude: {response.choices[0].message.content}")
# 再切到DeepSeek
response = client.chat.completions.create(
model="deepseek:deepseek-chat",
messages=messages
)
print(f"DeepSeek: {response.choices[0].message.content}")
### 第4步:批量对比多个模型
import time
models = [
"openai:gpt-4o",
"anthropic:claude-sonnet-4-20250514",
"deepseek:deepseek-chat",
"google:gemini-2.5-flash",
]
prompt = "用Python写一个斐波那契数列生成器,要求包含缓存优化。"
for model_name in models:
start = time.time()
response = client.chat.completions.create(
model=model_name,
messages=[{"role": "user", "content": prompt}],
temperature=0.3
)
elapsed = time.time() - start
content = response.choices[0].message.content
print(f"\n{'='*50}")
print(f"模型: {model_name}")
print(f"耗时: {elapsed:.2f}s")
print(f"字数: {len(content)}")
print(f"回答: {content[:200]}...")
进阶技巧:用aisuite构建模型路由
真正的生产级应用往往需要一个”模型路由”——根据任务类型和成本预算,自动选择最合适的模型:
def smart_route(prompt: str, budget: str = "cheap"):
"""根据预算自动选择模型"""
routes = {
"cheap": "deepseek:deepseek-chat",
"balanced": "anthropic:claude-sonnet-4-20250514",
"best": "openai:gpt-4o",
}
model = routes.get(budget, routes["balanced"])
client = ai.Client()
return client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
# 预算低的场景用 DeepSeek
result = smart_route("写一封礼貌的拒绝offer邮件", budget="cheap")
print(result.choices[0].message.content)
常见问题与处理
Q: 某些模型调用报错?
A: 检查API Key是否正确设置,以及模型名称是否在aisuite的支持列表中。运行`client.list_models()`可以看到当前可用的所有模型。
Q: 响应时间太长?
A: 可以在create调用中添加`timeout`参数,或使用异步版本:
response = await client.chat.completions.create(
model="openai:gpt-4o",
messages=messages,
timeout=30 # 30秒超时
)
Q: 如何添加自定义模型提供商?
A: aisuite支持通过实现`BaseProvider`接口来添加新提供商。具体文档见项目GitHub仓库中的`CONTRIBUTING.md`。
aisuite不只是一个工具库,它代表了一种”模型无关”的编程理念——你的代码不应该被某个特定的AI供应商绑定。这在2026年这个”每周都有新模型发布”的时代,比任何时候都更重要。
生产环境最佳实践
在实际项目中使用aisuite时,有几个坑值得注意:
### 1. 错误处理不要偷懒
import aisuite as ai
client = ai.Client()
def safe_chat(model: str, messages: list, retries: int = 3):
"""带重试和降级的安全调用"""
for attempt in range(retries):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
timeout=45
)
return response.choices[0].message.content
except Exception as e:
if attempt == retries - 1:
# 最后一次尝试切换到备用模型
fallback = "deepseek:deepseek-chat"
print(f"模型 {model} 调用失败,降级到 {fallback}")
return safe_chat(fallback, messages, retries=1)
print(f"重试 {attempt+1}/{retries}... ({e})")
time.sleep(2 ** attempt)
result = safe_chat("openai:gpt-4o", messages)
### 2. 成本意识:先路由再调用
不要所有请求都走最贵的模型:
def cost_aware_route(prompt: str):
"""根据请求复杂度自动选模型"""
prompt_len = len(prompt)
# 简单翻译、摘要类请求用便宜模型
if prompt_len < 200:
return "deepseek:deepseek-chat"
# 中等复杂度用平衡模型
elif prompt_len < 1000:
return "anthropic:claude-sonnet-4-20250514"
# 复杂推理用最强模型
else:
return "openai:gpt-4o"
### 3. 并发调用提升效率
当需要同时调用多个模型做对比时,用异步版本:
import asyncio
import aisuite as ai
async def compare_models(prompt: str):
client = ai.AsyncClient()
models = ["openai:gpt-4o", "anthropic:claude-sonnet-4-20250514", "deepseek:deepseek-chat"]
tasks = [
client.chat.completions.create(
model=m,
messages=[{"role": "user", "content": prompt}]
)
for m in models
]
results = await asyncio.gather(*tasks, return_exceptions=True)
for model, r in zip(models, results):
if isinstance(r, Exception):
print(f"{model}: 错误 - {r}")
else:
print(f"{model}: {r.choices[0].message.content[:100]}...")
asyncio.run(compare_models("用Python写一个快速排序"))
🔥 关注LC智趣厅,每周为你带来真正能上手的AI开发实战。
👇 你现在同时用几个AI模型的API?评论区说说你的技术栈。
— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn