AI・機械学習
上級

PydanticAI(パイダンティックエーアイ)

Pydanticチームが開発した型安全なAIエージェントフレームワーク。Pythonの型システムとPydanticバリデーションを活かし、構造化出力・依存性注入・FastAPIライクなDIコンテナでプロダクション品質のエージェントを構築できる。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
LLM
エージェント
Pydantic
型安全
依存性注入
Python

PydanticAI とは

PydanticAIはPydantic(Pythonの最も広く使われるデータバリデーションライブラリ)の開発チームが2024年12月に公開したAIエージェントフレームワークです。「FastAPIがWeb APIにしたことをAIエージェントにする」というビジョンのもと設計されています。

3つの設計柱

  1. 型安全性: Python型アノテーションとPydanticモデルで入出力を厳密に検証
  2. 依存性注入: FastAPIライクなDIコンテナでテスタビリティを確保
  3. 構造化出力: Pydanticモデルで定義した型安全な構造化レスポンス

基本エージェント

from pydantic_ai import Agent
from pydantic import BaseModel

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

agent = Agent(
    "openai:gpt-4o-mini",
    result_type=CityInfo,
    system_prompt="都市情報を構造化して返す専門家です。"
)

result = agent.run_sync("東京について教えて")
print(result.data.city)       # 型安全にアクセス
print(result.data.population) # IntとしてValidation済

依存性注入

PydanticAIの最大の特徴が 依存性注入(DI) です。外部サービスをコンテキスト経由で注入できます。

from pydantic_ai import Agent, RunContext
from dataclasses import dataclass

@dataclass
class Deps:
    db_connection: DatabaseConnection
    api_key: str

agent = Agent("anthropic:claude-3-5-sonnet-latest", deps_type=Deps)

@agent.tool
async def search_database(ctx: RunContext[Deps], query: str) -> list:
    """データベースを検索する"""
    return await ctx.deps.db_connection.search(query)

@agent.system_prompt
async def dynamic_prompt(ctx: RunContext[Deps]) -> str:
    count = await ctx.deps.db_connection.count()
    return f"DBには{count}件のレコードがあります。"

# テスト時はモックDepsを注入
result = await agent.run("最新情報を検索して", deps=Deps(db=mock_db, api_key="test"))

マルチモデル対応

agent = Agent("openai:gpt-4o")                        # OpenAI
agent = Agent("anthropic:claude-3-5-sonnet-latest")   # Anthropic
agent = Agent("google-gla:gemini-1.5-flash")          # Google
agent = Agent("ollama:llama3.2")                       # ローカル

ツール定義

@agent.tool_plain  # ctx不要の簡易ツール
def get_current_time() -> str:
    """現在時刻を返す"""
    from datetime import datetime
    return datetime.now().isoformat()

@agent.tool  # ctx付き(DIアクセス可)
async def fetch_price(ctx: RunContext[Deps], product_id: str) -> float:
    """商品価格を取得する"""
    return await ctx.deps.api.get_price(product_id)

FastAPIとの統合

from fastapi import FastAPI
from pydantic_ai import Agent

app = FastAPI()
agent = Agent("openai:gpt-4o-mini")

@app.post("/chat")
async def chat(message: str):
    result = await agent.run(message)
    return {"response": result.data}

Logfire統合

PydanticAI公式のObservabilityツール Logfire と統合することで、エージェントのトレース・モニタリングが設定できます。

import logfire
logfire.configure()
logfire.instrument_pydantic_ai()

まとめ

PydanticAIは型安全性・テスタビリティ・依存性注入という本番品質の要件を最初から設計に組み込んだエージェントフレームワークです。FastAPIになじみのあるPython開発者にとって直感的であり、プロダクション利用を見据えたエージェント実装の有力選択肢です。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/7