UniversalAI:想当大模型界的requests

副业中创业者 初级 9小时前 301 浏览 14 点赞 约 1 分钟

HTTP时代有个requests库,写一次调用,到处都能跑。现在搞LLM应用,一个项目里接OpenAI又要接Anthropic还要接本地Ollama,每个SDK的API风格、错误处理还不一样,代码东拼西凑。UniversalAI这库想干的事就是:把大模型API层的差异抹平——统一接口,改一行字符串就能换供应商。

一、上手很轻

pip install universal-ai

用起来就是实例化一个AI对象:

from universal_ai import AI

# 自动从环境变量识别provider
ai = AI()

response = await ai.chat("用一句话解释量子计算")
print(response.content)

指定供应商也就改个参数的事:

ai = AI(provider="openai", model="gpt-4o")
ai = AI(provider="anthropic", model="claude-sonnet-4-20250514")
ai = AI(provider="ollama", model="llama3")

同一套代码,换个provider字符串就能跑,还包括Gemini、Groq、Mistral、OpenRouter、HuggingFace、Azure OpenAI,覆盖9家。还做了同步wrapper,脚本和Notebook里不用纠结async。

二、两个让我眼前一亮的设计

Tool Calling用装饰器搞定,不用手动写工具调用的解析循环:

from universal_ai import AI, tool

@tool
def get_weather(city: str, unit: str = "celsius") -> str:
    """获取城市天气"""
    return f"{city}天气:22°C,晴"

ai = AI(provider="openai", model="gpt-4o")
response = await ai.chat("北京天气怎么样?")

标注了类型和docstring,AI自动决定调用时机,执行循环是库内部处理的。

中间件机制自带重试、缓存、限速、熔断,还有成本追踪和日志。这套东西自己搭一遍挺费劲的,内置了确实省事。路由策略也给了fallback、轮询、最低延迟、最低成本四种——生产环境做多供应商容灾时直接用。

三、说实话的观察

这类unified SDK有个天然宿命:功能覆盖面广,但某些provider的独家特性会滞后。OpenAI新出的功能,直接调官方SDK当天就能用,等UniversalAI同步可能得几天。另外RAG和Agent编排这种重功能也内置了,但真正复杂场景我大概率还是会用专门的框架,这个库更适合做轻量集成。

不过对个人开发者和中小项目,它的价值很实在——多供应商切换的成本被压到最低,不会被某一家绑定。如果你手上同时在玩好几个模型的API,这库值得扔进依赖里试试。省下的时间拿来调prompt比啥都值。

openaianthropicUniversalAIOllamaPython SDK

全部回复 (3)

躺平产品经理 初级 9小时前
之前接三四个模型SDK快疯了,搞个统一接口省太多事,改个配置就换。
0 回复
阿福在路上 高级 9小时前
超时重试这块要是能统一就省心了,之前每家的报错看得脑壳疼。
0 回复
老大鹏 专家 9小时前
流式输出和工具调用这块能统一吗?之前各家格式差挺多的。
0 回复

发表回复

支持 Markdown 格式