用 PydanticAI 让 LLM 输出变成可信赖的 Python 对象

简介: 本文介绍PydanticAI——专治LLM输出“差不多但不对”的类型安全方案。它将AI响应直接转为经验证的Python对象,杜绝字段错、类型乱、key多等顽疾;与CrewAI深度协同,前者保障数据契约,后者专注任务编排,显著提升Agent系统稳定性与可维护性。

构建过 AI agent 的人大概都遇到过这种情况:LLM 返回的数据"差不多"是你要的但又不完全对。比如会遇到字段名拼错了数据类型不对,或者干脆多了几个莫名其妙的 key。

这是问题出在哪?当前主流的 agentic AI 系统处理输出的方式太原始了,比如说脆弱的 JSON 解析、基于 prompt 的 schema 约束、各种后处理 hack。这套东西在 demo 里能跑通,到了生产环境就是定时炸弹。

PydanticAI 提供了一个根本性的解决方案:类型安全的 LLM 响应。它能把 AI 输出直接转换成经过验证的 Python 对象,配合 CrewAI 这类 agent 框架使用效果是相当不错的。

本文会介绍 PydanticAI 的核心概念,解释为什么类型化响应对 agent 系统如此重要并给出与 CrewAI 集成的实际代码示例。

LLM 输出的核心问题

Agentic 框架功能很强,但在最基础的环节:数据契约上,表现得相当糟糕。

典型的 agent 开发流程是这样的:先让 LLM 返回 JSON,然后祈祷它遵循你定义的 schema,不行就加重试逻辑,最后发现还是得手写验证器。这套流程走下来,agent 变得不稳定,失败时没有任何提示,调试起来痛苦万分。

类型化系统正是为了解决这个问题而存在的。

PydanticAI 是什么


PydanticAI 把 LLM、Python 类型系统和 Pydantic 模型组合在一起。核心理念很简单:LLM 响应必须符合预定义的 Python 类型,不符合就直接报错。

没有残缺数据,没有静默失败,没有靠猜。

为什么 CrewAI 需要这个

CrewAI 的强项在于多 agent 协调、角色分配和任务分解。但 agent 之间的数据传递、工具调用、记忆持久化,都需要结构化输出作为基础。这正是 PydanticAI 填补的空白——它提供了一个可靠的契约层。

安装

 pip install pydantic-ai crewai openai

设置 OpenAI API key:

 export OPENAI_API_KEY="your-key"

第一个示例:类型化响应

从最简单的场景开始。

定义一个响应模型:

 from pydantic import BaseModel  

 class Summary(BaseModel):  
     title: str  
     key_points: list[str]  
     confidence: float

这不是注释或文档,这是硬性契约。

创建 agent:

 from pydantic_ai import Agent  
from pydantic_ai.models.openai import OpenAIModel  

model = OpenAIModel("gpt-5-mini")  

agent = Agent(  
    model=model,  
    result_type=Summary  
 )

运行:

 result = agent.run_sync(  
     "Summarize the benefits of typed AI agents"  
 )  

 print(result.title)  
 print(result.key_points)  
 print(result.confidence)

这里发生了什么?LLM 被强制返回符合 Summary 结构的数据,验证自动进行,输出不合法会触发重试或直接失败。这才是可以上生产的 LLM 输出。

Agent 间的数据契约

来看一个更实际的例子:两个 agent 协作。

研究 agent:

 class ResearchResult(BaseModel):  
    topic: str  
    findings: list[str]  

research_agent = Agent(  
    model=model,  
    result_type=ResearchResult  
 )

写作 agent,负责消费研究 agent 的输出:

 class BlogDraft(BaseModel):  
    headline: str  
    sections: list[str]  

writer_agent = Agent(  
    model=model,  
    result_type=BlogDraft  
 )

协作流程:

 research = research_agent.run_sync(  
     "Research typed LLM outputs in AI agents"  
 )  

 draft = writer_agent.run_sync(  
     f"Write a blog using these findings: {research.findings}"  
 )

整个过程没有 JSON 解析,不用猜测 schema,Python 对象在 agent 之间直接流转。

与 CrewAI 集成

CrewAI 负责编排,PydanticAI 负责类型正确性,这种组合越来越常见。

 from crewai import Agent as CrewAgent, Task  

analysis_agent = CrewAgent(  
    role="Analyst",  
    goal="Generate structured insights"  
)  

task = Task(  
    description="Analyze market trends in AI tooling",  
    agent=analysis_agent  
 )

加入类型化执行层:

 typed_agent=Agent(  
     model=model,  
     result_type=ResearchResult  
 )  

 result=typed_agent.run_sync(task.description)

CrewAI 处理 agent 的角色和任务分配,PydanticAI 保证输出的结构正确。

类型化如何改变可靠性

没有类型约束的 agent 系统会出现各种问题:agent 凭空生成不存在的 key,下游步骤因为数据格式错误而静默失败,排查问题时无从下手。

用了 PydanticAI 之后,无效输出会被立即拒绝,重试自动触发,这样bug 在早期就会暴露出来。这其实是软件工程领域早就有的实践:API 用 schema 约束,数据库用约束条件,编译器做类型检查,Agentic AI 只不过是终于跟上了这个标准。

生产环境用例

PydanticAI 加 CrewAI 的组合适合这些场景:研究类 agent、内容生成流水线、数据提取任务、业务流程自动化、AI 辅助决策系统。只要你的应用对输出结构有要求,这套方案就值得考虑。

不过有几个做法应该避免:让 agent 返回原始字符串然后自己解析,用 eval() 处理 JSON(安全隐患太大),盲目相信"格式良好"的 prompt 能约束输出,在 agent 之间传递未经验证的数据。

类型化不是额外负担,是风险控制。

总结

Agentic AI 发展很快,但速度如果没有结构做支撑,系统就会变得脆弱。PydanticAI 把软件工程的类型规范带入了 LLM 系统,让 agent 更安全、更可预测、更容易扩展。

当 AI 输出变成真正的 Python 对象,agent 就不再只是 demo,而是可以正式投入使用的系统。
https://avoid.overfit.cn/post/2a20c5c4c1394c92a252a04388f8e26e

作者:Er.Muruganantham

目录
相关文章
|
11天前
|
人工智能 安全 调度
AI工程vs传统工程 —「道法术」中的变与不变
本文从“道、法、术”三个层面对比AI工程与传统软件工程的异同,指出AI工程并非推倒重来,而是在传统工程坚实基础上,为应对大模型带来的不确定性(如概率性输出、幻觉、高延迟等)所进行的架构升级:在“道”上,从追求绝对正确转向管理概率预期;在“法”上,延续分层解耦、高可用等原则,但建模重心转向上下文工程与不确定性边界控制;在“术”上,融合传统工程基本功与AI新工具(如Context Engineering、轨迹可视化、多维评估体系),最终以确定性架构驾驭不确定性智能,实现可靠价值交付。
140 18
AI工程vs传统工程 —「道法术」中的变与不变
|
11天前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
330 46
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
11天前
|
存储 缓存 数据建模
StarRocks + Paimon: 构建 Lakehouse Native 数据引擎
12月10日,Streaming Lakehouse Meetup Online EP.2重磅回归,聚焦StarRocks与Apache Paimon深度集成,探讨Lakehouse Native数据引擎的构建。活动涵盖架构统一、多源联邦分析、性能优化及可观测性提升,助力企业打造高效实时湖仓一体平台。
222 36
|
12天前
|
人工智能 运维 监控
进阶指南:BrowserUse + AgentRun Sandbox 最佳实践
本文将深入讲解 BrowserUse 框架集成、提供类 Manus Agent 的代码示例、Sandbox 高级生命周期管理、性能优化与生产部署策略。涵盖连接池设计、安全控制、可观测性建设及成本优化方案,助力构建高效、稳定、可扩展的 AI 浏览器自动化系统。
312 40
|
13天前
|
人工智能 弹性计算 运维
探秘 AgentRun丨为什么应该把 LangChain 等框架部署到函数计算 AgentRun
阿里云函数计算 AgentRun,专为 AI Agent 打造的一站式 Serverless 基础设施。无缝集成 LangChain、AgentScope 等主流框架,零代码改造即可享受弹性伸缩、企业级沙箱、模型高可用与全链路可观测能力,助力 Agent 高效、安全、低成本地落地生产。
241 39
|
11天前
|
人工智能 运维 前端开发
阿里云百炼高代码应用全新升级
阿里云百炼高代码应用全新升级,支持界面化代码提交、一键模板创建及Pipeline流水线部署,全面兼容FC与网关多Region生产环境。开放构建日志与可观测能力,新增高中低代码Demo与AgentIdentity最佳实践,支持前端聊天体验与调试。
188 25
|
12天前
|
存储 数据采集 弹性计算
面向多租户云的 IO 智能诊断:从异常发现到分钟级定位
当 iowait 暴涨、IO 延迟飙升时,你是否还在手忙脚乱翻日志?阿里云 IO 一键诊断基于动态阈值模型与智能采集机制,实现异常秒级感知、现场自动抓取、根因结构化输出,让每一次 IO 波动都有据可查,真正实现从“被动响应”到“主动洞察”的跃迁。
105 27
|
13天前
|
数据采集 监控 数据可视化
快速上手:LangChain + AgentRun 浏览器沙箱极简集成指南
AgentRun Browser Sandbox 是基于云原生函数计算的浏览器沙箱服务,为 AI Agent 提供安全、免运维的浏览器环境。通过 Serverless 架构与 CDP 协议支持,实现网页抓取、自动化操作等能力,并结合 VNC 实时可视化,助力大模型“上网”交互。
303 43
|
17小时前
|
人工智能 自然语言处理 Cloud Native
大模型应用落地实战:从Clawdbot到实在Agent,如何构建企业级自动化闭环?
2026年初,开源AI Agent Clawdbot爆火,以“自由意志”打破被动交互,寄生社交软件主动服务。它解决“听与说”,却缺“手与脚”:硅谷Manus走API原生路线,云端自主执行;中国实在Agent则用屏幕语义理解,在封闭系统中精准操作。三者协同,正构建AI真正干活的三位一体生态。
213 5
|
11天前
|
SQL 人工智能 Java
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析
DataAgent是基于Spring AI Alibaba生态构建的企业级AI数据分析师,融合NL2SQL、多智能体协作与RAG技术,支持多数据源分析、自动纠错与可视化报告生成,让业务人员零代码获取深度数据洞察。
624 39
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析