aisuite
轻量级 Python 库,为多家生成式 AI 提供商提供统一的 Chat Completions API 和 Agents API,支持工具调用、MCP 协议,可一键切换模型(OpenAI、Anthropic、Google 等)。由吴恩达团队开源,内置的 OpenCoworker 桌面 agent 可作为实用参考实现,适合快速构建多模型交互和 agent 应用。MIT 许可,可商用。
README
OpenCoworker
一个驻留在你桌面上的 AI 智能体,基于 aisuite 构建。
OpenCoworker 是一个桌面 AI 智能体,不仅能对话,还能在你的电脑上进行深度研究并为你执行任务。它可以读取文件(经你许可)以获取上下文,读取/发送消息(Slack、电子邮件等),并创建真正的可交付成果,如 PDF 报告、文档、电子表格。它还支持定时自动化,例如每天为你提供新闻摘要。
需要自带 API 密钥(OpenAI、Anthropic、Google),或使用 Ollama 完全本地运行。你的数据保留在你的机器上。
⬇ 下载 macOS 版本 macOS 13+ (Apple Silicon)
⬇ 下载 Windows 版本 Windows 10/11 (x64) ·
快速入门: — 安装、连接模型、第一个任务、自动化。
其源码位于本仓库的
platform/目录下——这是一个在 aisuite 上构建你自己智能体框架的工作参考。
aisuite
aisuite 是一个轻量级 Python 库,用于构建基于 LLM 的应用,分为两层:一个统一的跨提供商的 Chat Completions API,以及在其之上的带工具和工具集的 Agents API。本仓库也是 OpenCoworker(一个使用 aisuite 构建的桌面 AI 同事)的所在地:
┌───────────────────────────────────────────────┐
│ OpenCoworker │ 用于执行日常任务的智能体框架
├───────────────────────────────────────────────┤
│ Agents API · Toolkits · MCP │ 在多个 LLM 上构建智能体
├───────────────────────────────────────────────┤
│ Chat Completions API │ 跨多个 LLM 提供商的统一 API
├────────┬───────────┬────────┬────────┬────────┤
│ OpenAI │ Anthropic │ Google │ Ollama │ 其他 │
└────────┴───────────┴────────┴────────┴────────┘
- Chat Completions API — 一个统一的 OpenAI 风格接口,支持 OpenAI、Anthropic、Google、Mistral、Hugging Face、AWS、Cohere、Ollama、OpenRouter 等。通过更改一个字符串即可切换提供商。
- Agents API · Toolkits · MCP — 为模型提供真实的 Python 函数作为工具,运行多轮循环,附加现成的工具集(文件、git、shell)或任何 MCP 服务器,并通过工具策略来控制整个过程。
- OpenCoworker — 一个使用 aisuite 构建的桌面 AI 同事,以应用形式提供,用于日常任务。
安装
aisuite 库 (Python)
安装基础包,或包含计划使用的提供商的 SDK:
pip install aisuite # 基础包,不包含提供商 SDK
pip install 'aisuite[anthropic]' # 包含特定提供商的 SDK
pip install 'aisuite[all]' # 包含所有提供商的 SDK
你还需为调用的提供商准备 API 密钥——Chat Completions 快速入门 涵盖了密钥设置和你的首次调用。
OpenCoworker 应用(桌面版)
下载安装程序并自带 API 密钥(或使用 Ollama 运行本地模型):
⬇ macOS (Apple Silicon) · ⬇ Windows 10/11 (x64) · OpenCoworker 快速入门
Chat Completions — 跨提供商的统一 API
聊天 API 为模型交互提供了高级抽象。它支持所有核心参数(temperature、max_tokens、tools 等),且不依赖于具体提供商,并标准化了请求和响应结构,使你能够专注于逻辑而非 SDK 差异。
模型名称使用 <provider>:<model-name> 格式;aisuite 会使用正确的参数将调用路由到正确的提供商:
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(response.choices[0].message.content)
→ 快速入门: docs/chat-completions-quickstart.md — 安装、密钥设置、本地模型及更多示例。
Agents — 为模型提供真实工具
aisuite 将工具调用简化成一行代码:传入纯 Python 函数,它会自动生成 schema,执行调用,并将结果返回给模型。
使用 max_turns 进行工具调用
def will_it_rain(location: str, time_of_day: str):
"""检查某个地点在当天指定时间是否会下雨。
Args:
location (str): 城市名称
time_of_day (str): 时间,格式 HH:MM。
"""
return "YES"
client = ai.Client()
response = client.chat.completions.create(
model="openai:gpt-4o",
messages=[{
"role": "user",
"content": "我住在旧金山。你能查一下天气,然后为我在下午2点安排一次户外野餐吗?"
}],
tools=[will_it_rain],
max_turns=2 # 最大往返工具调用次数
)
print(response.choices[0].message.content)
设置了 max_turns 后,aisuite 会发送你的消息,执行模型发起的任何工具调用,将结果返回给模型,并重复这个过程直到对话完成。response.choices[0].intermediate_messages 包含了完整的工具交互历史,如果你想继续对话的话。
偏好完全手动控制?省略 max_turns 并传入 OpenAI 格式的 JSON 工具规范——aisuite 会返回模型的工具调用请求,由你自己来运行循环。两种风格均可参考 examples/tool_calling_abstraction.ipynb。
Agents API
对于运行时间更长、结构化的任务,我们有第一类 Agents API:声明一个 agent,用 Runner 运行它,并附加 toolkits——预构建的沙盒化工具族,用于文件、git 和 shell:
import aisuite as ai
from aisuite import Agent, Runner
agent = Agent(
name="repo-helper",
model="anthropic:claude-sonnet-4-6",
instructions="你是一个细心的仓库助手。使用你的工具根据代码来回答问题。",
tools=[*ai.toolkits.files(root="."), *ai.toolkits.git(root=".")],
)
result = Runner.run(agent, "最近一次提交更改了什么?用3个要点总结。")
print(result.final_output)
Agents API 还提供了生产级框架所需的组件:
- 工具策略 —
RequireApprovalPolicy、白名单/黑名单,或者你自己编写的可调用函数,用于决定哪些工具调用可以执行。 - 状态存储 — 持久化并恢复运行(内存、文件或 Postgres),在进程间继续对话。
- 产物与追踪 — 捕获 agent 产生的内容以及它走过的每一步。
MCP 工具
aisuite 原生支持 Model Context Protocol,因此任何 MCP 服务器的工具都可以直接交给模型使用,无需样板代码(pip install 'aisuite[mcp]'):
client = ai.Client()
response = client.chat.completions.create(
model="openai:gpt-4o",
messages=[{"role": "user", "content": "列出当前目录中的文件"}],
tools=[{
"type": "mcp",
"name": "filesystem",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"]
}],
max_turns=3
)
print(response.choices[0].message.content)
对于可重用的连接、安全过滤器和工具前缀,请使用明确的 MCPClient。
→ 快速入门: docs/agents-quickstart.md — 手动工具处理、完整 Agents API、策略、状态存储以及 MCP 深入介绍。
扩展 aisuite:添加新提供商
可以通过实现轻量级适配器来添加新提供商。系统使用命名约定进行发现:
| 元素 | 约定 |
|---|---|
| 模块文件 | <provider>_provider.py |
| 类名 | <Provider>Provider(首字母大写) |
示例:
# providers/openai_provider.py
class OpenaiProvider(BaseProvider):
...
此约定确保了统一性,并实现了新集成的自动加载。
贡献
欢迎贡献。请查看贡献指南并加入我们的 Discord 参与讨论。
许可证
基于 MIT 许可证 发布——免费用于商业和非商业用途。