Pydantic AI + Ertas
使用 Pydantic AI 构建生产级智能体——这是来自 Pydantic 团队的类型安全 Python 智能体框架,通过兼容 OpenAI 的端点对微调后的本地模型提供一流支持。
Overview
Pydantic AI 是 Pydantic 与 Logfire 团队推出的智能体框架——Pydantic 是几乎被所有现代 Python Web 框架采用、成为 Python 运行时数据完整性事实标准的验证库。Pydantic AI 将同样的类型安全准则延伸到 LLM 智能体:每个工具、每个输入、每个输出都是带类型的 Pydantic 模型,在运行时进行验证,并且具备 Python 开发者已经熟悉的完整 Pydantic 错误报告与 IDE 自动补全。该框架在 2026 年 4 月发布了 v1 版本,并迅速成为优先考虑类型安全和开发者人体工学的团队继 LangGraph 之后的明星替代品。2026 年 5 月初的 v1.90.x 与 v1.93.x 小版本发布在 `Agent` 上新增了显 式的 `tool_choice` 设置、用于细粒度流式处理的专用 `OutputToolCallEvent` 与 `OutputToolResultEvent` 事件,以及 OpenAI Conversations API 状态支持——这些改进让生产环境的使用更可控、更可观测。
该框架的设计直接借鉴自 FastAPI:依赖通过类型提示声明,工具是用 `@agent.tool` 装饰的函数,验证自动完成。与通过提示工程和事后解析处理结构化输出的旧式智能体框架不同,Pydantic AI 使用底层模型的原生函数调用能力,将验证失败暴露为可捕获并重试的 Python 异常。这使得智能体的可靠性大幅提升——出错时你得到清晰的栈跟踪,而不是模型幻觉出字段后悄悄在下游失败。
Pydantic AI 与模型无关。该框架通过其提供商抽象支持 OpenAI、Anthropic、Google 以及任何兼容 OpenAI 的端点,这使其天然适配通过 Ollama、vLLM 或 LM Studio 提供服务的自托管本地模型。Pydantic AI 的类型安全与微调本地模型的组合尤其引人注目:框架在边界上强制 schema 合规,微调模型按训练好的格式产出高质量输出,两者结合交付出既可靠又经济的智能体。
How Ertas Integrates
Ertas 训练的模型通过其 OpenAI 提供商配置到本地端点后即可与 Pydantic AI 协同工作。在 Ertas Studio 中微调模型并导出为 GGUF 后,你通过 Ollama、vLLM 或 Ertas Cloud 提供服务,然后让 Pydantic AI 的 `OpenAIModel` 提供商指向你的端点。代码库中的每个智能体——无论是单次 LLM 调用还是协调复杂的多步骤工作流——都会以你的 Ertas 训练模型作为底层引擎。
这种集成尤其强大的原因在于 Pydantic AI 处理结构化输出的方式。框架的 `result_type` 参数接受任何 Pydantic 模型,智能体会根据该 schema 验证 LLM 的输出,若不符则抛出 `ValidationError`。专门针对微调模型——Ertas Studio 的训练流程可纳入 schema 合规示例——这就形成了一个自我强化的循环:模型产出符合 schema 的输出,Pydantic AI 进行验证,任何失败(微调后会变得罕见)都会以可捕获的异常出现,便于重试或记录日志。
对于通过 Ertas Deployment CLI 进行的移动部署,Pydantic AI 的轻量级运行时是绝佳选择。该框架除了 LLM 调用本身之外几乎不增加额外开销——这在通过 llama.cpp 在设备端运行智能体循环时尤为重要。在主机应用一侧(无论主机是 Python 后端还是调用本地推理服务的移动应用),类型安全使契约显式化并减少了通常隐藏错误的集成面。
Getting Started
- 1
在 Ertas Studio 中微调你的领域模型
在包含 Pydantic AI 智能体所需结构化输出和工具调用的数据上训练。Studio 的 JSONL 格式直接映射到 Pydantic AI 的 `messages` 与 `result_type` 模式。
- 2
部署到兼容 OpenAI 的端点
导出为 GGUF 并通过 Ollama、vLLM 或 Ertas Cloud 提供服务。Pydantic AI 的 OpenAI 提供商可连接任何暴露标准聊天补 全 API 的端点。
- 3
安装 Pydantic AI 并配置模型提供商
安装 pydantic-ai。创建一个指向你的 Ertas 推理端点并带有模型名称的 `OpenAIModel`(或 `OpenAIProvider`)实例。
- 4
定义带类型的工具与结果 schema
将工具声明为带类型提示的装饰 Python 函数。将结果 schema 定义为 Pydantic 模型。Pydantic AI 自动处理验证、schema 失败时的重试以及清晰的错误报告。
- 5
运行智能体并处理验证
使用你的输入调用 `agent.run()` 或 `agent.run_sync()`。Pydantic AI 返回带类型的结果。捕获 `ValidationError` 以实现结构化重试逻辑,或依赖框架内置的重试行为。
from pydantic import BaseModel
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel
# Point Pydantic AI at your Ertas-trained model served via Ollama
model = OpenAIModel(
"ertas-support-agent-7b",
base_url="http://localhost:11434/v1",
api_key="not-needed",
)
class TicketTriage(BaseModel):
category: str
priority: int # 1-5
suggested_team: str
requires_human: bool
agent = Agent(
model,
result_type=TicketTriage,
system_prompt="You triage customer-support tickets for a SaaS product.",
)
@agent.tool
async def lookup_customer(ctx, customer_id: str) -> dict:
"""Fetch customer record from the CRM."""
return await crm.get_customer(customer_id)
# The agent returns a validated TicketTriage object — or raises ValidationError
result = agent.run_sync(
"Customer 12345 says the dashboard hasn't loaded for 30 minutes."
)
print(result.data.priority, result.data.suggested_team)Benefits
- 每个边界都具备类型安全——工具、输入、输出全部是带类型的 Pydantic 模型
- 类似 FastAPI 的工程美感——Python 开发者已熟悉
- 原生函数调用支持——无需提示工程化的 JSON 解析
- 自动 schema 验证——失败时抛出可捕获的 Python 异常
- 轻量级运行时——除了 LLM 调用本身之外开销极小
- 天然搭配产出符合 schema 输出的微调模型
- 与 Logfire 集成实现生产级可观测性
Related Resources
Fine-Tuning
Function Calling
Inference
Structured Output
Fine-Tuning for Structured Output: Beyond JSON Mode to Guaranteed Schemas
Fine-Tuning for Tool Calling: How to Build Reliable AI Agents with Small Models
Fine-Tuning for Better JSON Output: Why Small Models Struggle and How to Fix It
LangGraph
Ollama
OpenAI Agents SDK
smolagents
vLLM
Ertas for SaaS Product Teams
Ertas for Customer Support
Ertas for Data Extraction
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.