pydantic-ai 深度评测:21,195 Star 的 Python AI 框架,精简安装 20 个模型只通 2 个,654 项测试全绿主干却挂 7 项

pydantic-ai 深度评测:21,195 Star 的 Python AI 框架,精简安装 20 个模型只通 2 个,654 项测试全绿主干却挂 7 项

如果你想用 Python 接一个大模型做产品,大概率踩过同一串坑:先装个框架,它默认把各家的官方客户端全带上;装完发现磁盘多吃了一百多兆;等真要换模型时,又得回头补装另一个厂商的包。

今天评测的 pydantic-ai 就是冲着这串坑来的。它在 GitHub 上有 21,195 颗星,用的是麻省理工学院的宽松开源许可,背后是做了多年数据校验库 Pydantic 的那个团队。它的宣传语很直接:所有模型,一行字符串就能换。

我把它的发布版装进隔离环境,按官方口径跑了测试,也量了三档安装方式的体积。结论有两句:它的分层打包确实解决了一部分痛点,但「换个模型只要换一行字符串」这件事,在默认安装下并不成立。

一、它是什么:给 AI 应用套了一层「类型检查」

先说人话:这是一个帮你写 AI 应用的 Python 库。你定义好要模型输出的数据结构,它负责调用模型、检查输出格式、格式不对就让模型重答,直到符合你定义的结构为止。

这个「不符合就重来」的机制是它最值钱的地方。传统写法里,模型返回的是一段自由文本,你还得自己写代码去解析、去猜格式;pydantic-ai 把这层苦活接过去了。官方文档里的说法是「端到端都有类型」,翻译成日常话:你提前声明好收据上有金额、有供应商、有日期,它保证交给你的对象里这几项一定在、类型一定对。

它的第二个卖点是双包策略。仓库里同时发了两个包:全量的那个把主流厂商的官方客户端都捆进来,精简的那个只留内核,谁家要用谁自己装。

我实测了三档安装的代价,Python 3.13 干净环境,同一天同一台机器:

装法 占用空间 装了多少个包
全量包 pydantic-ai 146 MB 95
精简包 pydantic-ai-slim(基础) 34 MB 17
精简包 + 四个厂商接入(OpenAI、Anthropic 这类) 95 MB 40

这个数字说明什么:精简包确实省下了四分之三的空间,但只要你真的想接两三家模型,空间就会迅速回到一百兆附近——省下来的主要是你压根不会用的那几家。全量包里最占地方的就是几家厂商的官方客户端,一家十六兆,另一家十七兆,加起来接近五十兆。

顺带量了启动开销。光是导入一次这个库,全量包要 1.54 秒,精简包 0.34 秒。对一个要频繁启动的命令行工具来说,这个差别是能被用户感觉到的。

二、实测第一问:精简安装下,到底几个模型能用

这是我最想验的一条,因为它直接决定「换模型只需换一行字符串」成不成立。

仓库的模型目录下我数出 20 个厂商接入模块。我在精简包的基础安装(不装任何厂商附加包)下逐个尝试导入,结果是:

结果 数量 说明
能直接用 2 一个是测试用的假模型,一个是函数式模型
报缺包错 18 全部是「请先安装某某包」的提示

也就是说,默认装完精简包,市面上你叫得出名字的模型一家都接不上。想用 OpenAI 的要补一个包,想用 Anthropic 的再补一个,谷歌家又是另一个。

这里要给官方说句公道话:报错信息做得很好,每一句都直接告诉你该装哪个附加包、命令长什么样。所以这不是「坑你无门」的缺包,而是「按需付费」的设计。只是宣传语和实际体验之间差了一层:那句话的完整版应该是「换一行字符串,前提是你已经装好了对应厂商的包」。

另一种常见写法是直接传给应用对象一个带冒号的模型名。我在基础安装下试了,报错同样指向缺包或缺凭证,没有被静默忽略——这一点是加分项,它不会让你在半夜收到一张巨额账单才发现接错了模型。

三、实测第二问:官方测试在发布版上全绿,主干上却有 7 个失败

这个库的测试规模是我见过最重的之一。仓库里有 942 个测试文件、18,625 个测试函数,测试目录占了 291 兆,其中还带着 270 份录制的真实接口请求(上游发来的原始应答被存成文本,回放时不用真连网,也就不会真的花钱)。文档有 375 篇。

我在隔离沙箱里把依赖版本调成和仓库锁文件一致(也就是作者们自己测试时用的那一套),然后分两次跑:

跑在哪 用例数 结果
发布版 2.68.0 标签 665 654 通过、11 跳过、0 失败
主干最新提交(两小时前) 496 479 通过、10 跳过、7 失败

失败的那 7 个全挤在同一处:文本输出模式下的参数校验。测试原本期待应用在创建时就把不合规的函数拒掉,实际却没拒绝;另有一个是参数别名传进函数时名字对不上。

这条要小心解读,我做了三个交叉验证才写下来:一是我把依赖版本调成和仓库锁文件里那份一模一样,失败照旧;二是同一个环境、同一批依赖,回到发布标签上全绿;三是这 7 个失败点都在「检查某个错误有没有被抛出」上,跟我本机缺什么东西无关。所以这是主干上正在发生的事,不是发布版的问题,也不是我环境的问题。

对你来说意味着什么:如果你照着主线代码写东西,最近这两天最好钉死版本号,别跟着主干漂。

四、实测第三问:没有凭证能不能玩

很多人想先试试手感再决定要不要充钱。这个库留了一个口子:一个测试用的假模型,不需要任何接口凭证。

我写了个提取发票信息的例子,定义了供应商、金额、币种、日期四个字段,用假模型跑了一遍。流程全部跑通,导入 0.54 秒、构建应用 0.75 秒、跑一次 0.03 秒。

但它的输出是这样的:供应商是一串字母 a,金额是 0,日期也是字母 a。连跑三次结果完全一致。

这个设计的用意是让你验证「接线通不通」——数据流、类型校验、工具调用这些机制都能跑起来。它不产生任何真实内容,所以别指望用它看效果。想看出模型水平,你还是得有至少一家的接口凭证。

五、版本这件事,值得单独说

这个项目在 2025 年 9 月到 1.0 时承诺过:在 2.0 之前不做破坏性改动。现在 2.0 出来了,官方专门写了一篇升级指南,把攒了一年的破坏性变更一次性列全。

我取了最近 300 个版本记录来看,1.x 那条线有 148 个,2.x 那条线有 85 个,两条线到今天还在同时发版——1.x 最近一次发布是 11 月 4 日,2.x 是 11 月 12 日。这在开源库里不常见,通常是给还在旧版上的使用者留一段过渡期。

官方对弃用的处理是「留一个版本再删」:2.x 里标为弃用的功能会一直能用,但每次调用都会发一条警告点名它的替代写法,到 3.0 才真正移除。我用同一段代码分别跑了 1.x 和 2.x 的最新版,两个版本都能跑通,同一处旧写法在里面都给出了升级提示。

对读者的意义:这是个沉淀得比较正规的项目,不是那种一个月换三次接口的野路子。代价是文档量大、概念多,第一次上手需要留出半天到一天。

六、和同类比,它站在哪

Python 这一侧的 AI 应用框架,大致有三个流派。

一派是「全家桶」:装一个包,所有模型、所有工具、所有界面都能用,代价是体积和耦合。

一派是「薄封装」:只做最薄的调用层,灵活但什么都要自己搭,包括输出格式校验、重试、多步工具调用。

pydantic-ai 走的是第三条:内核薄、能力按需加、类型检查是硬约束。它的取舍很清楚——愿意为「结构化输出的可靠性」付出一套概念的学习成本,换取业务代码里少写一大堆解析和重试。

适合谁:要把大模型嵌进已有业务流程(比如从合同里提字段、从工单里判优先级)、对输出格式稳定性有硬要求、团队本来就熟悉数据校验这套思路的。

不适合谁:只想调一次接口做个小脚本的;模型只要固定用一家、也不想多装一个框架的;以及完全不想碰「类型声明」这件事的新手,它的语法门槛确实比直接调官方客户端高一档。

七、判断

值得放进观察清单,也值得在你真的要做一个结构化的 AI 业务功能时认真试一次。

它最扎实的地方不是宣传的那句口号,而是三件能验的事:输出格式的强制校验确实内建、缺东西时报错指向明确、测试与文档的体量撑得起一个长期项目。最需要打折的也是宣传的那句口号:默认安装下你一家模型都接不上,「换一行字符串」省掉的是改代码,不是装依赖。

给一个具体建议:如果你要试,别装全量包,先装精简包加你真正要用的那一家,体积能压在一半以下,改起来也清楚。想零成本看代码风格,用它的假模型跑一遍流程就够了,记得别拿那个结果去评估模型。

关注 AI商业快讯,每天一篇 AI 热点深度解读。