Skip to content

PydanticAI 是 Pydantic 团队开发的高层次 Python AI Agent 框架,强调类型安全和结构化输出。通过其 OpenAIModel 类可以接入 OpenRouter:安装 pydantic-ai-slim[openai],创建 OpenAIModel 实例并指定 base_url="https://openrouter.ai/api/v1" 和 OpenRouter API key,然后传入 Agent 即可使用 agent.run() 发起调用。

PydanticAI 是 Pydantic 团队开发的 Python AI Agent 框架,提供类型安全的模型交互接口,内置结构化输出、依赖注入和 async 支持。

安装

bash
pip install 'pydantic-ai-slim[openai]'

[openai] extra 包含连接 OpenAI 兼容 API(包括 OpenRouter)所需的依赖。

基本用法

通过 OpenAIModelbase_url 参数将请求路由到 OpenRouter:

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

model = OpenAIModel(
    "anthropic/claude-sonnet-4.6",  # 任意 OpenRouter 模型 ID
    base_url="https://openrouter.ai/api/v1",
    api_key="sk-or-...",
)

agent = Agent(model)
result = await agent.run("What is the meaning of life?")
print(result)

使用环境变量

推荐从环境变量读取 API key:

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

model = OpenAIModel(
    "anthropic/claude-sonnet-4.6",
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

agent = Agent(model)

结构化输出

PydanticAI 的核心优势是类型安全的结构化输出,用 result_type 指定返回类型:

python
from pydantic import BaseModel
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel

class CityInfo(BaseModel):
    city: str
    country: str
    population: int

model = OpenAIModel(
    "anthropic/claude-sonnet-4.6",
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

agent = Agent(model, result_type=CityInfo)
result = await agent.run("Tell me about Paris")
print(result.data)  # CityInfo(city='Paris', country='France', population=2161000)

支持的模型

可以使用任意 OpenRouter 模型列表 中的模型,格式为 provider/model-name,替换 OpenAIModel 的第一个参数即可。

更多文档

常见问题

Q: PydanticAI 的 OpenAIModel 和直接用 openai 库有什么区别?

A: PydanticAI 在 OpenAI SDK 之上提供了更高层次的 Agent 抽象:内置工具调用(@agent.tool)、依赖注入、类型安全的结构化输出(result_type)和 async 支持。如果只需要简单的 chat completion,直接用 openai 库更轻量;如果要构建带工具的 Agent,PydanticAI 更合适。

Q: PydanticAI 的 result_type 如何处理模型不遵守格式的情况?

A: PydanticAI 会在底层使用 function calling 或 JSON mode 强制模型输出结构化格式,并用 Pydantic 验证结果。如果解析失败,会自动重试(默认最多 1 次)并附带 Pydantic 的验证错误信息,让模型修正输出。

Q: 如何传入 OpenRouter 的 Provider 路由参数?

A: 目前 PydanticAI 通过 extra_headers 或直接配置 httpx 客户端来传入额外参数,base_url 指向 OpenRouter 后,可以通过 http_client 参数配置自定义 headers:

python
import httpx
from pydantic_ai.models.openai import OpenAIModel

model = OpenAIModel(
    "anthropic/claude-sonnet-4.6",
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

更复杂的路由参数建议参考 PydanticAI 文档