惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
V
V2EX
月光博客
月光博客
博客园 - 【当耐特】
WordPress大学
WordPress大学
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
Vercel News
Vercel News
F
Fortinet All Blogs
J
Java Code Geeks
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recorded Future
Recorded Future
D
DataBreaches.Net
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
美团技术团队
有赞技术团队
有赞技术团队
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
爱范儿
爱范儿
Recent Announcements
Recent Announcements
Apple Machine Learning Research
Apple Machine Learning Research
C
Check Point Blog
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
T
Tailwind CSS Blog
A
About on SuperTechFans
IT之家
IT之家
博客园 - 司徒正美
Jina AI
Jina AI
U
Unit 42
腾讯CDC

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 你要加油呐 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽
aisuite:统一调用多家 LLM 的轻量级 Python 库(by Andrew Ng)
Cheman · 2026-06-14 · via BlogFinder

今天在 GitHub Trending 上看到一个有意思的项目:aisuite,由 Andrew Ng 主导开源。它解决了一个在 LLM 应用开发中非常真实的痛点:各家 API 接口不统一、切换模型要改大量代码。

一、项目概述

aisuite 是一个轻量级 Python 库,为 LLM 应用开发提供两层抽象:

  • Chat Completions API:统一的 OpenAI 风格接口,覆盖 OpenAI、Anthropic、Google、Mistral、Hugging Face、AWS、Cohere、Ollama、OpenRouter 等主流提供商,切换模型只需改一个字符串。
  • Agents API:在底层之上提供工具调用(Tool Calling)、工具包(Toolkits)和 MCP 协议支持,可直接让模型执行 Python 函数、读写文件、运行 Shell 命令。

项目同时包含一个实战级桌面应用 OpenCoworker(源代码在 platform/ 目录下),可作为基于 aisuite 构建 Agent harness 的参考实现。

核心特性一览:

特性说明
统一模型名格式<provider>:<model-name>,如 openai:gpt-4o
零改动切换提供商改一个字符串即可切换底层模型
原生 Tool Calling直接传入 Python 函数,aisuite 自动生成 schema 并执行
Agents API声明式 Agent + Runner,内置文件/git/Shell 工具包
MCP 原生支持兼容 Model Context Protocol,可接入任意 MCP Server
多后端支持云服务 + 本地(Ollama)均可

二、技术原理

架构分层

┌───────────────────────────────────────────────┐
│                 OpenCoworker                  │  Agent 应用层
├───────────────────────────────────────────────┤
│        Agents API  ·  Toolkits  ·  MCP        │   Agent 构建层
├───────────────────────────────────────────────┤
│             Chat Completions API              │   统一 API 层
├────────┬───────────┬────────┬────────┬────────┤
│ OpenAI │ Anthropic │ Google │ Ollama │ Others │  提供商适配层
└────────┴───────────┴────────┴────────┴────────┘

提供商适配机制

aisuite 通过一套约定优于配置的机制实现提供商的即插即用。新增提供商只需遵循命名规范:

# providers/openai_provider.py
class OpenaiProvider(BaseProvider):
    def chat_completions_create(self, model, messages, **kwargs):
        # 将统一参数转换为 OpenAI SDK 的调用格式
        ...

模块文件命名为 <provider>_provider.py,类名命名为 <Provider>Provider,系统会自动发现并加载,无需注册代码。

Tool Calling 执行循环

当设置 max_turns 参数时,aisuite 内部维护一个多轮对话循环:

  1. 将用户消息发给模型
  2. 若模型返回工具调用请求,执行对应 Python 函数
  3. 将函数返回值追加到消息列表
  4. 再次调用模型,直至模型输出最终回复或达到 max_turns 上限

完整的交互历史保存在 response.choices[0].intermediate_messages 中,方便序列化后继续对话。

Agents API 与 Toolkits

Agents API 提供了更接近生产级 Agent 框架的抽象:

agent = Agent(
    name="repo-helper",
    model="anthropic:claude-sonnet-4-6",
    instructions="You are a careful repo assistant.",
    tools=[*ai.toolkits.files(root="."), *ai.toolkits.git(root=".")],
)

内置工具包:

  • ai.toolkits.files(root):沙箱化文件系统读写
  • ai.toolkits.git(root):在指定目录执行 git 命令
  • ai.toolkits.shell(root):受控 Shell 执行

MCP 集成

aisuite 原生支持 Model Context Protocol(需安装 pip install 'aisuite[mcp]'),可将任意 MCP Server 的工具直接注入模型上下文:

tools=[{
    "type": "mcp",
    "name": "filesystem",
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
}]

对于需要复用、安全过滤或工具名前缀隔离的场景,可使用 MCPClient 进行显式管理。

三、安装与快速开始

安装

# 仅安装基础包(不含任何提供商 SDK)
pip install aisuite

# 安装时一并安装指定提供商的 SDK
pip install 'aisuite[anthropic]'
pip install 'aisuite[openai]'

# 安装所有提供商 SDK
pip install 'aisuite[all]'

# 含 MCP 支持
pip install 'aisuite[mcp]'

最简示例:跨提供商对话

import aisuite as ai

client = ai.Client()

models = [
    "openai:gpt-4o",
    "anthropic:claude-3-5-sonnet-20240620"
]

messages = [
    {"role": "system", "content": "请用海盗英语回复。"},
    {"role": "user", "content": "给我讲个笑话。"},
]

for model in models:
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0.75
    )
    print(f"[{model}]\n{response.choices[0].message.content}\n")

切换模型只需将 "openai:gpt-4o" 改为 "google:gemini-pro" 即可,无需改动任何调用代码。

四、使用方法与实战

Tool Calling 实战

def get_weather(city: str, date: str):
    """获取指定城市某天的天气。

    Args:
        city (str): 城市名称
        date (str): 日期,格式 YYYY-MM-DD
    """
    # 实际场景中这里会调用天气 API
    return f"{city}{date} 的天气:晴,26°C"

client = ai.Client()
response = client.chat.completions.create(
    model="openai:gpt-4o",
    messages=[{"role": "user", "content": "北京明天适合爬山吗?"}],
    tools=[get_weather],
    max_turns=3   # 最多 3 轮工具调用循环
)
print(response.choices[0].message.content)

Agents API 实战:代码仓库助手

import aisuite as ai
from aisuite import Agent, Runner

agent = Agent(
    name="repo-analyzer",
    model="anthropic:claude-sonnet-4-6",
    instructions="你是一个代码分析助手,只能通过工具获取信息,不要猜测。",
    tools=[*ai.toolkits.files(root="."), *ai.toolkits.git(root=".")],
)

result = Runner.run(
    agent,
    "最近一次 commit 改了哪些文件?用中文总结改动意图(3 条要点)"
)
print(result.final_output)

Tool Policies:控制工具执行权限

生产环境中通常需要对工具调用进行治理,aisuite 内置了多种策略:

from aisuite.agents.policies import RequireApprovalPolicy

agent = Agent(
    name="safe-agent",
    model="openai:gpt-4o",
    tools=[*ai.toolkits.shell(root=".")],
    # 所有 Shell 工具调用前需人工确认
    tool_policy=RequireApprovalPolicy(tools=["shell.*"])
)

也支持 allow/deny list 和自定义 callable 策略函数。

状态持久化:跨进程继续对话

from aisuite.agents.state import FileStateStore

store = FileStateStore(path="./agent_runs.json")
agent = Agent(name="persistent-agent", model="openai:gpt-4o", state_store=store)

# 第一次运行
result1 = Runner.run(agent, "帮我分析这个项目")

# 序列化状态后,可在另一个进程/请求中恢复并继续
Runner.run(agent, "接着刚才的分析,补充性能优化建议")

五、常见问题与解决方案

Q1:安装后导入报错 ModuleNotFoundError: No module named 'anthropic'

原因pip install aisuite 只安装基础包,不包含任何提供商的 SDK。 解决:按需安装对应 extra,如 pip install 'aisuite[anthropic]',或一次性安装全部:pip install 'aisuite[all]'

Q2:max_turns 用完了但模型还没给出最终答案怎么办?

原因:复杂任务可能需要更多轮工具调用。 解决:增大 max_turns 参数,或检查工具函数实现是否有 bug 导致模型无法获得有效返回。可打印 response.choices[0].intermediate_messages 调试每轮交互。

Q3:本地模型(Ollama)如何接入?

解决:aisuite 通过 OpenAI 兼容接口支持 Ollama,安装 pip install 'aisuite[ollama]' 后使用 ollama:model-name 格式:

client.chat.completions.create(
    model="ollama:llama3",
    messages=[{"role": "user", "content": "Hello"}]
)

确保 Ollama 服务已在本地运行(ollama serve)。

Q4:MCP Server 调用时报错 npx: command not found

原因:使用 MCP 工具时需要系统已安装 Node.js 和 npx。 解决:安装 Node.js(含 npx),或使用已安装 MCP Server 的 Python 包替代。

Q5:如何查看 Agent 的完整执行追踪?

解决:aisuite 内置 Artifacts & Tracing 机制,可在 Runner.run 时传入 tracing=True,或在 Agent 配置中指定 tracing backend,捕获每次工具调用、模型响应和最终产出。

六、总结

aisuite 的核心价值在于降低 LLM 应用的多提供商切换成本,同时提供从简单补全到生产级 Agent 的渐进式抽象。对于需要在多个 LLM 之间做 A/B 测试、或希望规避单一提供商锁定风险的团队,这是一个非常实用的基础库。

亮点总结:

  • 统一接口设计简洁直观,学习成本低,切换成本几乎为零
  • Tool Calling 抽象相当优雅,直接传 Python 函数即可,无需手写 JSON schema
  • Agents API 提供了策略、状态存储、追踪等生产特性,不是"玩具级"抽象
  • MCP 原生支持使其可以无缝接入日益增长的 MCP 工具生态
  • Andrew Ng 亲自背书,社区活跃度值得期待

项目地址:https://github.com/andrewyng/aisuite