Pydantic AI:从结构化输出到生产应用,Python 智能体怎么做?

Pydantic AI 适合哪些 Python 智能体项目?本文从带类型的工具、依赖注入和结构化输出讲起,用客服分流示例说明如何校验结果,并梳理模型接入、MCP、持久化执行与评估的边界。对比 LangGraph、LangChain 和 OpenAI Agents SDK,帮你判断何时引入框架,何时直接调用 API。

发布于

Pydantic AI:从结构化输出到生产应用,Python 智能体怎么做?

如果你的 Python 功能需要智能体调用应用函数,并返回经过校验的对象,可以选择 Pydantic AI。它的 3 种结构化输出模式明确了数据约束,但不能证明答案正确。简单的信息提取,优先直接调用模型;如果难点在于外围的业务流程,则可以考虑 LangGraph。

本文已于 2026 年 10 月 17 日对照官方文档和代码仓库中的许可证核验。下文的选型依据是输出校验、应用服务接入、工作流由谁管理,以及故障后的恢复方式,不是性能排名。

Pydantic AI 是什么?

Pydantic AI 是 Pydantic 团队开发的 Python 智能体 SDK。 它把模型、指令、可调用的 Python 函数,以及可选的输出类型组合成一个 Agent,由应用负责运行。模型负责生成响应,SDK 则管理围绕模型展开的交互。当前的概览文档介绍了更广泛的 SDK 能力,但要为产品实现一个功能,首先需要理解的就是这个核心。

可以把它理解为:给一个行为难以预测的协作者规定函数契约。应用提供上下文和允许执行的操作,再要求它返回包含指定字段的结果。例如,客服功能需要输出问题类别和下一步建议,供普通 Python 代码继续处理,这套机制就很实用。

Pydantic AI 文档中的 Python SDK 介绍和智能体示例
Pydantic AI

Pydantic AI 智能体:可复用的任务单元

Agent 保存完成某项任务所需的配置。一次运行,则是带着具体提示词和运行时依赖去执行这项任务的一次尝试。在同步脚本中可以调用 run_sync(),在异步应用代码中可以使用 await agent.run();运行完成后,通过结果对象的 .output 读取最终值。这些用法均见于 Agent API 文档。

这里的类型机制承担两项不同的工作。静态类型帮助编辑器或类型检查器发现 Python 代码中的类型不匹配;运行时输出校验则检查模型返回的数据是否符合声明的 schema。无论哪一种,都无法让含糊的客服请求自动变得清晰。

Pydantic AI 工具:让函数访问应用上下文

函数工具让模型能够请求执行代码支持的操作,例如查询订阅信息。需要运行上下文的函数用 @agent.tool 注册,不需要上下文的函数则用 @agent.tool_plain。类型提示描述参数,文档字符串帮助模型理解工具的用途。函数工具文档说明了这些信息如何转化为工具 schema。

依赖注入,就是把某次运行需要的服务传入这次运行。 用 deps_type=CustomerContext 声明预期的 Python 类型,再用 deps=customer_context 传入实际实例。工具接收 RunContext[CustomerContext],并通过 ctx.deps 读取依赖。上下文可以携带已认证的客户、数据库连接或 API 客户端。依赖指南明确指出,deps_type 用于支持类型检查,而不会对依赖对象执行运行时校验。

对于 SaaS 开发者,这带来的好处很具体:在模型请求查询之前,服务器就能确定客户账户。权限校验仍应放在查询代码中。通过带类型的上下文传入数据库客户端,并不会限制该客户端可以读取哪些数据行。

建筑剖面示意图展示智能体与模型、Python 工具、运行时依赖及输出边界的连接
依赖为 Python 代码提供所需资源;智能体协调模型与工具调用,再返回最终输出。

Pydantic AI 结构化输出:究竟校验了什么?

output_type 定义应用期望接收的结果。 传入一个 Pydantic BaseModel,也就是带有类型字段的 Python 类,Pydantic AI 就会据此生成 schema,并校验模型生成的数据。输出文档还列出了其他受支持的类型,包括 dataclass、列表和联合类型。

三种输出模式的区别,在于如何要求模型生成这些数据:

模式结果如何返回需要确认什么
Tool Output(工具输出,默认模式)模型调用专用的输出工具,传入结构化参数所选模型是否支持所需的工具行为
Native Output(原生输出)服务商使用 JSON schema 约束响应模型和 API 是否支持该 schema 及所用功能的组合
Prompted Output(提示词输出)在指令中描述 schema,再解析并校验响应模型是否能遵循格式;仍需处理失败情况

这是 SDK 文档列出的三种输出模式,并非三个准确率等级。应先选择模型支持的机制,再用自己的任务评估结果。

校验失败时,可以把错误反馈给模型,让它再次尝试。重试次数有上限,输出重试耗尽后可能抛出 UnexpectedModelBehavior。应用需要准备失败处理路径,例如补问缺失信息,或将请求转交人工。具体见重试行为说明。

Pydantic AI 教程:返回经过校验的客服分流结果

先从只读的决策对象开始,再考虑赋予智能体修改数据的权限。 下面的示例基于文档中的 Agent、RunContext 和 output_type 用法,实现一个小型客服分流任务。

当前安装指南要求 Python 3.11 或更高版本。在虚拟环境中安装库:

Bash
python -m pip install pydantic-ai

在环境变量中设置 OPENAI_API_KEY,对应账户需有权限访问所用模型。将以下代码保存为 triage.py,然后运行 python triage.py。模型标识沿用当前 Agent 文档中的写法,也可以换成你的账户能够使用且受支持的模型。

Python
from dataclasses import dataclass
from typing import Literal

from pydantic import BaseModel
from pydantic_ai import Agent, RunContext

@dataclass
class Customer:
    plan: str

class Triage(BaseModel):
    category: Literal['billing', 'technical']
    priority: Literal['normal', 'urgent']
    summary: str

agent = Agent(
    'openai:gpt-6.1-sol',
    deps_type=Customer,
    output_type=Triage,
    instructions=(
        'Triage the support message. Use customer_plan for context. '
        'Summarize the issue without inventing account facts.'
    ),
)

@agent.tool
def customer_plan(ctx: RunContext[Customer]) -> str:
    """Return the authenticated customer's plan."""
    return ctx.deps.plan

if __name__ == '__main__':
    result = agent.run_sync(
        'I was charged twice for my subscription.',
        deps=Customer(plan='business'),
    )
    print(result.output.model_dump())

运行成功后,result.output 是一个 Triage 对象。它的类别和优先级必须属于声明的可选值,model_dump() 则把该对象转换为字典。示例中的上下文工具、带类型的结果,以及拒绝非法类别的行为,都已用 TestModel 离线检查。模型生成的措辞和分流准确率,仍需用你自己的案例评估。

这里的客户上下文仅作示意。用于产品时,应根据已认证的请求和账户记录构造上下文。还需要定义什么情况算紧急:schema 只列出了合法标签,并没有包含紧急程度的判定规则。补上这条业务规则,比再加一个智能体更重要。

Pydantic AI 模型接入:换服务商,也要重新验证行为

Pydantic AI 减少了对接不同服务商的代码,但更换模型仍会改变行为。 许多接入方式使用 <provider>:<model> 标识;有些则需要显式配置模型或客户端、相应凭据,以及额外的安装依赖。服务商目录也明确说明,功能支持取决于所选模型和 API。

该目录包括 OpenAI、Anthropic、Google/Gemini、AWS Bedrock、Groq、Mistral、xAI 和 Ollama。文档列出的其他接入方式还包括:

  • 模型与推理服务: Alibaba Cloud/Qwen、Cerebras、Cohere、Crusoe、DeepSeek、Fireworks AI、Heroku AI、Hugging Face、Meta、Moonshot AI/Kimi、Nebius AI Studio、OVHcloud AI Endpoints、SambaNova、Snowflake Cortex、Together AI 和 Z.AI。
  • 云平台、网关与自托管方案: Google Cloud/Vertex AI、Microsoft Azure/Foundry、Pydantic AI Gateway、LiteLLM、OpenRouter、Vercel AI Gateway 和 vLLM。
  • 其他访问方式与决策模型接入: GitHub Copilot、OpenAI Codex、OpenAI Decisions API、System One API 和 TypeSafe (Jev)。

这些名称代表不同的模型接入方式,并不意味着功能可以等价替换。本地模型的工具行为可能与托管的前沿模型不同;即便 API 兼容,对 schema 的限制也可能不同。

对创业者而言,可迁移性意味着保留替换路径和试验空间。对负责落地的开发者而言,验收标准没有改变:替代模型能否选对工具、遵守输出 schema,并在同一组案例上给出可接受的判断?在更改生产环境的默认配置之前,先留存这些验证结果。

MCP 与持久化执行:接入工具,保留运行进度

MCP 负责把智能体连接到工具服务器;持久化执行帮助运行在中断后继续。 两者解决的是不同的问题。

Model Context Protocol(模型上下文协议,简称 MCP)为应用向 AI 客户端提供工具和上下文定义了统一规范。Pydantic AI 的 MCP 能力支持传入服务器 URL、客户端或工具集,在服务商支持的情况下,也可使用其原生 MCP 选项。这让你能够复用工具服务器,无须为每个智能体重新编写集成代码。但它不会替你决定哪些客户有权执行该服务器上的操作。

持久化执行会保存进度,让任务在故障、重启或长时间等待后继续。当前的持久化执行文档列出了 9 种方案:

  • 与供应商团队共同维护: Temporal、DBOS、Prefect、Restate 和 AWS Lambda。
  • 外部 SDK 集成: Kitaru、Apache Airflow、Absurd 和 pgtask。

此外,还提供用于接入其他引擎的后端构建器。如果智能体需要在发起它的请求或进程结束后继续运行,应选择文档列出的集成方案。这些集成的存在,并不意味着单独调用一次 Agent 就构成了支持持久化执行的部署。

图书馆场景中的时间线展示已保存的进度如何跨越中断,让任务继续执行
持久化执行引擎在中断前后保留进度;外部写入仍需设计安全重试策略。

设想一个客服任务:先给出退款建议,等待审批,再执行退款。保存运行状态可以保留等待中的任务,但支付操作仍需保证幂等性,也就是重复请求不应再次产生退款。你需要决定如何识别已经完成的操作,以及如何核对结果不明的操作。这部分责任仍在应用,不能只交给引擎。

Pydantic AI 评估:检查对象背后的判断

Pydantic Evals 检验的是智能体是否完成了可接受的工作,而不只是输出能否被解析。 它是一个独立、以代码为中心的评估包,不依赖 Pydantic AI。你定义案例和评估器,用这些案例运行任务,再查看报告。文档介绍了如何为最终输出和工具调用轨迹评分;后者指一次运行中采取的一系列行动。

Pydantic Evals 文档介绍案例、评估器和实验报告
Pydantic Evals

针对前面的分流示例,可以构造重复扣款、登录失败、缺少账户上下文,以及要求助手忽略自身指令的消息等案例。检查问题类别、是否需要升级处理,以及是否完成了必要的账户查询。也要包含那些应当通过追问来回应的案例。

对运维人员而言,调用链追踪解释单次运行,评估则衡量多个案例上的行为。 Pydantic AI 使用应用遥测标准 OpenTelemetry,并通过其插桩机制支持其他可观测性后端。某个案例失败时,检查模型请求和工具调用,再把该案例保留在评估集中。

可选的 Pydantic Logfire 提供智能体、模型和工具追踪。根据其定价页面,Personal 套餐免费,Team 套餐 $49/月起,额外用量和席位另行计费。

什么情况下该选 Pydantic AI?

选抽象层,要看功能最难的部分在哪里。 对于已有领域模型和服务的 Python 开发者,如果主要集成难点是带类型的输入、工具和输出,Pydantic AI 值得列入候选。技术型创业者则应进一步追问:哪种选择能让业务保留一个足够精简、解释得清且维护得动的运行系统?

Pydantic AI 与 LangGraph 怎么选?

如果你希望明确设计智能体外围的工作流,LangGraph 更适合作为起点。 它的文档围绕长期运行的有状态智能体、持久化执行和人工介入展开。典型场景是具有必经阶段的应用:收集证据、取得审批、执行已授权操作,再核对结果。

LangGraph 文档介绍其有状态智能体工作流运行时
LangGraph

如果应用已经控制了整个流程,只需把带类型的智能体作为其中一个组件,Pydantic AI 就很有吸引力。它也能参与持久化工作流,因此能否持久化并不足以决定选型。关键在于:你想围绕智能体建模整个业务流程,还是主要配置智能体自身的行为?LangGraph 的门槛,是你必须负责工作流设计和状态管理;Pydantic AI 的边界,则在于方便的智能体契约不会替你设计完整流程。

Pydantic AI 与 LangChain 怎么选?

如果 LangChain 现有的模型与工具集成、智能体架构已经契合应用,选择它就有充分理由。 根据 LangChain 概览,LangChain 智能体建立在 LangGraph 之上,使用它的高层智能体 API,并不意味着放弃这层运行时基础。

LangChain 文档展示智能体创建接口
LangChain

如果 Pydantic AI 的依赖和输出契约契合你现有的编码方式,可以在 Python 服务中选择它。已经正常运行的 LangChain 功能应继续保留,除非你能指出迁移具体消除了哪一处复杂性。当行为跨越智能体层与工作流层时,仍需理解 LangChain 的抽象;换库只会把这项工作转移到别处。两者更深入的关系,见 LangChain 与 LangGraph 对比。

OpenAI Agents SDK 与直接调用 API

OpenAI Agents SDK 适合由应用掌控智能体循环,并需要工具、任务交接和追踪的场景。 SDK 在你的应用内运行,支持结构化输出;它的服务商接口也能接入非 OpenAI 模型。因此,不能把带类型的输出或服务商选择说成 Pydantic AI 独有的能力。

OpenAI 文档介绍由应用管理运行的 Agents SDK
OpenAI Agents SDK

如果该 SDK 的智能体与交接机制契合你准备维护的 OpenAI 集成,可以选择它。如果 Pydantic AI 的 Python 依赖模型和服务商配置更合适,就选 Pydantic AI。两者都把部署、工具授权和应用正确性留给你负责。

如果任务只是一次模型请求,外围只有少量确定性代码,直接调用 API 即可。 原生 API 已经能够返回受 schema 约束的输出。收据提取功能不必仅仅因为结果是 Pydantic 对象,就引入智能体框架。真正需要重新考虑的时刻,是你开始在不同功能中反复搭建工具调用循环、校验重试和观测埋点。

更全面的选型可以参考现有的 AI 智能体框架指南。如果你还在权衡显式的工作流控制与分工明确的智能体角色,可以继续阅读 LangGraph 与 CrewAI 对比。

带类型的智能体,哪些期待被夸大了?

最被夸大的说法,是带类型的智能体天然就是正确可靠的生产系统。 有些边界,库无法替你消除:

  • 类型安全不等于事实准确。 格式完好的答案仍可能误解用户请求。你需要决定哪些内容必须对照权威记录核验。
  • 模型可迁移不等于质量一致。 更换服务商配置,与更换提示词一样,都需要用同样的任务评估来检验。
  • 支持持久化执行不等于自动完成部署。 仍需选择并运维功能所需的引擎、存储和恢复路径。
  • 重试会增加工作量。 再发一次模型请求,就会增加延迟和用量。重试耗尽后,应用应有明确的处理结果。

如果下一个 Python 功能已经需要工具和结构化决策,现在就值得动手。如果现有系统运行良好,而迁移的收益只是演示代码看起来更整洁,可以先缓一缓。如果功能只是直接的信息提取调用,并且已有充分的校验和错误处理,那么是否采用这类框架,对你影响不大。

Pydantic AI 常见问题

Pydantic 和 Pydantic AI 有什么区别?

Pydantic 是 Python 数据校验库。Pydantic AI 则是协调模型调用和工具的智能体 SDK,使用 Pydantic 校验结构化数据。只安装 Pydantic,并不会获得这套智能体循环。

Pydantic AI 和 LangChain 有什么不同?

Pydantic AI 侧重带类型的 Python 智能体接口、运行时依赖和经过校验的输出。LangChain 提供基于 LangGraph 的智能体架构和集成。应根据接口是否契合应用来选择,而不要假定某个框架能保证模型给出更好的答案。

Pydantic AI 可以免费使用吗?

可以。该库采用 MIT 许可证;模型服务商的用量构成推理费用,托管和可选服务另计。许可证允许商业使用,并要求在分发副本或实质性部分时,保留版权声明和许可声明。

Pydantic AI 支持哪些模型?

它的服务商目录涵盖 OpenAI、Anthropic、Google、AWS Bedrock、Groq、Mistral、xAI、Ollama,以及上文列出的其他云平台、网关和推理接入方式。在把某个模型视为可直接替换的选项前,要先检查它对工具和输出模式的具体支持。

下周可以先上线什么?

先为一个小型只读功能设定明确的验收边界,再扩大它的自主权限。 对客服产品,可以从示例中的分流对象起步,把最终的账户操作保留在普通应用代码中。

  1. 写清数据契约与业务规则

    选择应用会使用的输出字段。定义分类与紧急程度规则,包括智能体何时应该追问。由服务器传入已认证的上下文。

  2. 验证失败时如何处理

    为数据缺失、请求含糊和未经授权的请求建立评估案例。既检查最终对象,也检查所用工具。明确模型调用或校验失败后如何处理。

  3. 配置功能所需的运行时

    如果任务需要在重启后继续,或等待审批,就选择持久化执行集成,并结合自己的操作验证恢复过程。否则,保持精简的部署。在加入可写入的工具之前,先审查调用链追踪和评估结果。

想获取构建 AI 功能的实用笔记,可以订阅邮件通讯。

发布日期
分类
Build
Guardrails AI 与大模型安全护栏:工具选型、权限控制和落地清单

Guardrails AI 与大模型安全护栏:工具选型、权限控制和落地清单

Guardrails AI 能检查什么,又有哪些权限必须由应用自己把关?本文沿着一次客户退款请求,梳理输入、检索、模型提案、工具执行和输出的安全边界,对照官方文档比较主流工具,解释内容过滤、人工审批、幂等重试与流式输出的限制,并给出小团队可先落实的控制清单及 Promptfoo 测试思路。2026年10月17日Build
AI 幻觉怎么减少:从成因、案例到上线前的校验

AI 幻觉怎么减少:从成因、案例到上线前的校验

AI 幻觉为什么会出现,又该怎样在答案交付客户前拦住错误?本文从编造事实、数字错误、虚假引用和工具参数错误四类案例出发,说明如何用最新证据、RAG、可核验引用、结构化输出和参数校验降低风险,并提供可运行的 Python 校验示例、同时关注正确作答与合理停止的评测方法,以及小团队本周就能执行的实施清单。2026年10月17日Build
系统提示词怎么写?从原理、示例到可复用模板

系统提示词怎么写?从原理、示例到可复用模板

系统提示词该写什么,哪些内容应留给用户请求?本文梳理 Anthropic、OpenAI 和 Google 的指令入口,讲清角色、规则、输出与工具使用的写法,并提供客服示例和可复制模板。从项目指令的作用范围,到多轮对话中的规则延续,再到提示词注入与应用权限,帮你判断问题究竟出在指令、证据还是执行机制。2026年10月17日Build
函数调用详解:让大模型用上你的工具与数据库

函数调用详解:让大模型用上你的工具与数据库

函数调用如何让大模型查询数据库、使用工具?本文从完整的订单状态查询代码入手,讲清工具定义、参数校验、执行与结果回传,对照 OpenAI、Anthropic 和 Gemini 的消息格式,并说明结构化输出与 MCP 各自适合什么场景,以及上线前如何处理权限、工具误选、失败重试和重复执行,帮助你跑通首个只读查询。2026年10月17日Build
MCP是什么?与 API 有何区别,产品该如何选择

MCP是什么?与 API 有何区别,产品该如何选择

MCP是什么,已有 API,还需要它吗?本文从工具发现、认证授权、部署和版本兼容入手,比较 MCP 与 REST API,并用创建工单流程说明两套接口如何共享业务规则。结合 Claude、ChatGPT、Cursor 和 GitHub Copilot 的文档,判断何时保留 API、增加 MCP 或同时提供两者。2026年10月17日Build
Hermes Agent 评测:记忆、技能与成本,是否值得部署?

Hermes Agent 评测:记忆、技能与成本,是否值得部署?

Hermes Agent 值得安装吗?这篇评测从持久记忆、自动创建技能、消息网关和定时任务出发,梳理桌面与终端安装、模型选择、Nous Portal 价格及云端托管费用。以每周客户反馈简报为例,说明如何核实记忆写入、审核技能变更、限制权限,并按每份合格报告的总成本判断是否适合企业试点。2026年10月17日Build
Ollama vs llama.cpp:本地大模型部署,怎么选才合适?

Ollama vs llama.cpp:本地大模型部署,怎么选才合适?

Ollama vs llama.cpp 怎么选?本文从模型管理、GGUF 量化、API 兼容性、并发配置与 GPU 支持逐项比较,说明何时选择 Ollama 的便捷流程,何时需要 llama.cpp 的直接控制,并梳理迁移前要核对的模型文件、上下文与请求行为,帮助团队根据实际负载决定是否更换运行时。2026年10月16日Build
Devin 价格与 Desktop 评测:迁移、功能和选型

Devin 价格与 Desktop 评测:迁移、功能和选型

Devin 价格是否划算,取决于工作流程能否受益。本文梳理 Devin Desktop 的 Agent Command Center、Spaces、Devin Local 与 ACP 接入,解释 Windsurf 迁移缺口、各套餐费用及 Teams 计费差异,说明何时更适合 Cursor 或 Claude Code。2026年10月16日Build
订阅通讯

每周日,一封信。写运转中的系统,不写热评。

每周一期。无垃圾邮件。随时退订。