大家好呀,我是开源先驱~
最近有一个做 AI 开发的朋友问我:每次换个大模型就要改一堆代码,OpenAI 一套 API、Anthropic 一套 API、Google 又一套,光适配就耗掉半天,有没有省事的办法。我直接把吴恩达的开源项目甩给了他。
先甩数据:
⭐ 15,752 Stars
🍴 1,658 Forks
📝 682 Commits
👤 作者:Andrew Ng(吴恩达)
📅 创建于 2024-06-30,至今约 25 个月
🔧 支持 10+ LLM 提供商
📄 MIT 协议,Python 为主
吴恩达是谁不用多介绍——斯坦福教授、Google Brain 联合创始人、前百度首席科学家、Coursera 联合创始人。他做的开源项目,从创建到现在稳步涨到 1.5 万星:

一个轻量级 Python 库,用一套 OpenAI 风格的接口接所有大模型,切换提供商只改一个字符串。
两层架构:
1️⃣ Chat Completions API——底层,跨提供商统一聊天接口,支持 temperature、max_tokens、tools 等所有核心参数
2️⃣ Agents API——上层,在聊天 API 之上构建的代理框架,支持工具调用、工具包和 MCP
支持的提供商:OpenAI、Anthropic、Google(Gemini + Vertex)、Mistral、Hugging Face、AWS、Cohere、Ollama、OpenRouter、Requesty、Groq、通义……国内外主流的都覆盖了。模型命名格式就一个:provider:model-name,比如 openai:gpt-4o、anthropic:claude-3-5-sonnet。
🔄 一行代码切换,真的就一行
把模型名从 openai:gpt-4o 改成 anthropic:claude-3-5-sonnet,完事。不用改其他任何代码,请求格式、响应结构全部标准化。对比测试两个模型?写个 for 循环遍历模型列表就行。
🛠️ 工具调用,传个 Python 函数就行
别的框架要你手写 JSON Schema,aisuite 直接把普通 Python 函数丢进去,自动从函数签名和 docstring 生成 schema、执行调用、回传结果。设个 max_turns 就自动完成"发消息→调工具→拿结果→继续"的循环。不设 max_turns 就返回标准 JSON 工具规范,手动控制。
🤖 生产级 Agent 框架,不是玩具
Agents API 自带三件套:工具策略(RequireApprovalPolicy、允许/拒绝列表、自定义 callable 控制哪些工具能跑)、状态存储(内存/文件/Postgres,跨进程恢复对话)、产物追踪(捕获 agent 产出内容和每步操作轨迹)。预构建的 toolkits 开箱即用——files、git、shell 直接接。
🔌 MCP 原生支持,不是插件
Model Context Protocol 的工具可以直接传给模型。在 tools 参数里写个 type: "mcp",指定 MCP 服务器的 command 和 args,aisuite 自动连接、发现工具、执行调用。需要可复用连接和安全过滤的话,还有显式的 MCPClient。
🏠 本地模型,用 Ollama 一键切
模型名写成 ollama:llama3,本地跑,不用 API Key,不用联网。代码跟调 GPT-4o 一模一样,就改个字符串。开发和测试成本直接降到零。
技术 | 用途 |
|---|---|
Python | 核心库(2.9M 行) |
TypeScript / Rust | viewer-ui / CLI 工具 |
Poetry | 包管理 |
React + Vite | Agent Runs 可视化界面 |
MCP Protocol | 工具协议原生支持 |
Postgres | 生产级状态存储 |
Ollama | 本地模型推理 |
项目 | 设计理念 | 复杂度 | Agent能力 | MCP |
|---|---|---|---|---|
aisuite | 极简统一接口 | 轻量 | 生产级 | 原生 |
LangChain | 全功能框架 | 重型 | 有 | 插件 |
LiteLLM | 统一接口 | 轻量 | 无 | 无 |
安装,按需选:
pip install aisuite # 基础包,不含任何提供商 SDK
pip install 'aisuite[anthropic]' # 附带特定提供商 SDK
pip install 'aisuite[all]' # 附带所有提供商 SDK
pip install 'aisuite[mcp]' # 附带 MCP 支持最小示例——同一个问题问两个模型:
import aisuite as ai
client = ai.Client()
models = ["openai:gpt-4o", "anthropic:claude-3-5-sonnet-20240620"]
for model in models:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "讲个笑话"}],
)
print(response.choices[0].message.content)工具调用——传个函数进去就行:
def will_it_rain(location: str, time_of_day: str):
"""查某个城市今天某个时间会不会下雨"""
return "YES"
response = client.chat.completions.create(
model="openai:gpt-4o",
messages=[{"role": "user", "content": "我在北京,下午2点能野餐吗?"}],
tools=[will_it_rain],
max_turns=2 # 自动循环:发消息→调工具→回传→继续
)LLM 多提供商适配这件事,LangChain 太重,LiteLLM 没有 Agent 能力,aisuite 卡的位置刚刚好——轻量统一接口 + 生产级 Agent 框架 + MCP 原生支持。而且吴恩达亲自下场做,代码质量和设计品味都在线。
最让我欣赏的是设计哲学:不要把简单的事情搞复杂。切换大模型本来就该是改一个字符串的事,工具调用本来就该是传一个函数的事。aisuite 把这两件事做到了。
如果你在用多个 LLM 提供商、需要做模型对比测试、或者想快速搭一个带工具调用的 Agent,aisuite 值得一试。
项目地址:https://github.com/andrewyng/aisuite
作者:Andrew Ng(吴恩达)
开源协议:MIT