AI Skill推荐推荐AI开源项目

aisuite:Andrew Ng 的 LLM 统一调用库

📅 2026-07-29

如果你的项目里同时对接了 OpenAI、Anthropic、Google 三家 API,代码大概率长这样:每个 SDK 一套参数格式,命名风格不同,错误处理各写各的,换模型要改 import 语句。更麻烦的是,想对比同一个 prompt 在不同模型下的输出质量,你得手动切代码、改配置、盯着 API 返回格式差异。有没有一个库能让所有 LLM 的调用接口统一起来,换行代码就切换供应商?

Andrew Ng 团队开源的 aisuite 就是干这个的。项目在 GitHub 上有 15,700+ stars,定位是 LLM 调用的轻量抽象层——上层统一 Chat Completions 接口和 Agents API,下层对接 OpenAI、Anthropic、Google、Mistral、Hugging Face、AWS Bedrock、Cohere、Ollama、OpenRouter、Requesty 等十余个供应商。模型名一律用 <provider>:<model-name> 格式:改冒号前的名字就换供应商,冒号后不改,连参数都不用动。

两个核心层

aisuite 分两层设计,两层解决不同粒度的问题。

Chat Completions API 是所有操作的基础。它把各供应商的 SDK 差异消化掉,暴露一个 OpenAI 风格的 client.chat.completions.create(Model=modeL, Messages=MessagES)。streaming、工具调用、异步都原生支持,连流式返回的 chunk 结构在各供应商之间也是统一的:

import aisuite as ai

client = ai.Client()
models = ["openai:gpt-4o", "anthropic:claude-3-5-sonnet-20240620"]
messages = [
    {"role": "system", "content": "用一句话回答。"},
    {"role": "user", "content": "Python 3.13 有什么新特性?"},
]

for model in models:
    response = client.chat.completions.create(
        model=model, messages=messages, temperature=0.7
    )
    print(model, "→", response.choices[0].message.content)

两行换一个供应商,响应结构完全一致。这意味着你可以把模型选择做成环境变量或配置文件,不用改一行业务代码就在 GPT-4o 和 Claude 之间自由切换。想要流式输出?加一行 stream=True,循环逻辑完全一样。

Agents API 是更高层的抽象。它支持把普通 Python 函数作为工具传给模型,自动生成 JSON Schema、执行多轮调用、把结果喂回模型。配合 max_turns 参数可以做限定步数的工具调用循环——不需要自己写 while 循环:

def search_knowledge(query: str):
    \"\"\"搜索知识库\"\"\"
    return db.search(query)

response = client.chat.completions.create(
    model="openai:gpt-4o",
    messages=[{"role": "user", "content": "查询昨天的热门文章"}],
    tools=[search_knowledge],
    max_turns=3
)

Agents API 还内置了 file、git、shell 等现成的 Toolkits,以及 MCP 协议对接支持。这意味着一行代码就可以让模型读取本地文件或执行 shell 命令,不依赖任何三方 Agent 框架。

白物集项目的实际关联

aisuite 的设计思路和白物集内容管线高度吻合。白物集每天有早报生成、热点深度文章、知识卡片采集、Skill 推荐等多条内容管线,每条管线对模型的要求不同:

  • 早报生成(08:00 ECS cron)用 DeepSeek,因为成本优先——每天一篇,量不大但长期跑,成本敏感
  • 热点深度文章(09:00/17:00 agent cron)需要长篇叙事和结构化输出,理想选择是 GPT-4o 或 Claude Sonnet
  • 知识卡片摘要(07:00 agent cron)短文本,用 Claude Haiku 性价比最高
  • 建站系列教程(09:30 agent cron)技术教程,DeepSeek 足以胜任

目前每条管线各自硬编码了模型和 API key——早报走 ECS 上的 generate-morning-digest.cjs,热点文章走 Hermes Agent 里配置的 DeepSeek 模型。切换模型需要改多处配置,不能动态调整。

如果引入 aisuite 的抽象层,内容管线的模型选择可以降维成一行 YAML 配置:

# content-pipeline-models.yaml
morning_digest_model: "deepseek:deepseek-chat"
hot_article_model: "openai:gpt-4o"
card_summary_model: "anthropic:claude-3-5-sonnet-20240620"
tutorial_model: "deepseek:deepseek-chat"

管线代码里统一写 client.chat.completions.create(model=config[key], ...),供应商切换不需要改 import 路径,不需要装不同版本的 SDK 适配。这是 aisuite 最实在的价值——它做的不多,但做的恰好是你最常重复写的那段胶水代码。

适合什么场景,不适合什么场景

适合: - 项目对接多个 LLM 供应商,希望统一调用接口 - 写原型需要快速切换模型对比效果、选型 - 需要把模型选择做成用户可配置项的 SaaS 平台 - 团队维护多条 AI 管线,不想每条都写一套适配

不适合: - 只用一个供应商一个模型——直接装 SDK 更轻量 - 需要深度利用某个供应商特有参数(如 Anthropic 的 thinking、Google 的 grounding),抽象层抹平了差异 - 极端延迟敏感场景(抽象层带来约微秒级开销,通常可忽略不计)

快速上手

第一步:安装

pip install 'aisuite[all]'

如果只用某个供应商的模型,可以只装对应的 extras。

第二步:设置 API Key

aisuite 按环境变量读取密钥,命名规则是 <PROVIDER>_API_KEY

export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export DEEPSEEK_API_KEY="..."

第三步:统一调用

写一个 client.chat.completions.create(),来回切换模型名就能对比响应质量。

第四步:试试 Agents

给模型传一个 Python 函数作为工具,让它自动完成多轮工具调用。

第五步:上生产

把模型名外提到配置文件中,一条管线跑多个供应商。


aisuite 不是那种要改变你架构的框架——它就是一层轻量接口,解决的是「不同供应商各自为政」这个琐碎但高频的问题。Andrew Ng 团队在 2024 年 6 月开源,迭代一年多后积累了 15,700+ stars 和 1,600+ forks,证明市场对这样的抽象有真实需求。如果你的项目已经或将来需要对接两个以上的 LLM 供应商,aisuite 值得一试。

← AI 编程模型新标杆:Claude Opus 5 深度解析 → AI 频道 Claude Opus 5:Anthropic 的性价比策略 →